qrchack Temat założony przez niniejszego użytkownika |
SQLConnect nie działa » 2015-08-20 14:09:04 Witam serdecznie. Z bazami danych nigdy nie miałem doczynienia, a tu się okazuje, że muszę. W google nie potrafię znaleźć niczego, co mogłoby pomóc laikowi - cpp sql tutorial wrzuca jakieś linki do forów z niezrozumiałym dla mnie kodem... Anyway. Mam serwer baz danych: "pl-100-srv30" (fizyczny komputer który sobie gdzieś tam stoi) Mam się połączyć z bazą o nazwie "inwentaryzacja" Nazwa użytkownika "inwentaryzacja" i hasło "2015" Udało mi się nawiązać połaczenie z baza korzystając z MS Accessa, czyli dane podane powyżej na pewno są poprawne. W swoich poszukiwaniach dotarłem do funkcji SQLConnect, która u mnie nie działa #include <windows.h> #include <sqlext.h> #include <sql.h> #include <sqltypes.h>
#include <tchar.h>
void Start_SQL_Connection( void ) { RETCODE rc; HENV henv; HDBC hdbc; HSTMT hstmt; SDWORD cbData; char db[] = "pl-100-srv30"; SQLAllocEnv( & henv ); SQLAllocConnect( henv, & hdbc ); rc = SQLConnect( hdbc,( unsigned char * ) db, SQL_NTS,( unsigned char * ) "inwentaryzacja", SQL_NTS,( unsigned char * ) "2015", SQL_NTS ); if(( rc != SQL_SUCCESS ) &&( rc != SQL_SUCCESS_WITH_INFO ) ) { } }
Pomijam już kwestię, że nigdzie nie można znaleźć informacji, że #include <sqltypes.h> MUSI być pod <sqlext.h> i <sql.h>, inaczej program się nie kompiluje (wywala, że SQLHANDLE jest niezadeklarowane), doszedłem do tego sam po kilkugodzinnym a bezowocnym grzebaniu w guglach i metodą prób i błędów - zaznaczam, że pracuję w code:blocks 13.12. Anyway. Po skompilowaniu (musiałem dodać bibliotekę libodbc32.a w linkerze) i wywołaniu funkcji Start_SQL_Connection(tej z kodu wyżej) funkcja SQLConnect nie robi nic, co więcej gdy program dochodzi do tej linii wogóle wywala z funkcji Start_SQL_Connection - do ifa poniżej nawet nie podchodzi Co robię źle? Co zrobić, żeby połączyć się z odpowiednią bazą na serwerze? |
|
DejaVu |
» 2015-08-20 17:45:02 Jeżeli wywala Ci się aplikacja na pierwszym wywołaniu funkcji z biblioteki to znaczy, że: a) masz błąd w kodzie (złe argumenty przekazujesz do funkcji) b) masz niepoprawnie skompilowaną bibliotekę, którą linkujesz (lub skompilowaną innym kompilatorem bądź z innymi opcjami) c) nie masz pliku dll/so do binarki, której używasz lub plik ten jest niezgodny z plikem *.lib/*.a. |
|
qrchack Temat założony przez niniejszego użytkownika |
» 2015-08-21 07:32:36 Sama aplikacja się nie wywala. Wywala się funkcja, ale bez żadnych komunikatów o błędach, niczego nie zwraca nic :/ Mój programik wygląda tak, że mam okienko z jednym przyciskiem. Po na ciśnięciu przycisku wywoływana jest moja funkcja Start_SQL_Connection. Ustawilem sobie breaka na linijkę rc = SQLConnect( hdbc,( unsigned char * ) db, SQL_NTS,( unsigned char * ) "inwentaryzacja", SQL_NTS,( unsigned char * ) "2015", SQL_NTS ); jak robię next line to program wychodzi z funkcji Start_SQL_Connection, ale się nie zawiesza, nie pojawiają się żadne komunikaty o błędach - NIC. Mogę znowu nacisnąć guziczek i wejść do funkcji. SQLConnect działa u mnie tak jak break w pętli Ad a) Całkiem możliwe, że mam błąd w kodzie - nie mam bladego pojęcia jak używać funkcji SQLConnect - jej opisy są (dla mnie przynajmniej)nie jasne Ad b) Biblioteka jest dostarczona razem z COde::blocks 13.12 którego używam, więc zakładam, że jest poprawna Ad c) Nie mam pojęcia jak to sprawdzić - rozumiem, że sama dllka wcale nie musi być razem ze środowiskiem? EDIT: W Visual Studio 2010 jest dokladnie ten sam efekt - moja funkcja przerywa prace po dojsciu do linijki SQLConnect, przy czym znowu mogę nacisnąć guziczek - czyli sama aplikacja dziła |
|
DejaVu |
» 2015-08-21 09:16:30 |
|
qrchack Temat założony przez niniejszego użytkownika |
» 2015-08-21 11:06:17 no... to właśnie jest kod przykładowy, wzięty stąd: http://cs.dvc.edu/HowTo_SQL.html
#include <iostream> using std::cin; using std::cout; using std::endl;
#include <afxwin.h> #include <sql.h> #include <sqlext.h>
int main() { RETCODE rc; HENV henv; HDBC hdbc; HSTMT hstmt; SDWORD cbData; char db[] = "myDatabase"; cout << "Attempting to open database " << db << "..." << endl; SQLAllocEnv( & henv ); SQLAllocConnect( henv, & hdbc ); rc = SQLConnect( hdbc,( unsigned char * ) db, SQL_NTS, 0, 0, 0, 0 ); if(( rc != SQL_SUCCESS ) &&( rc != SQL_SUCCESS_WITH_INFO ) ) { cout << "Cannot open database -- make sure ODBC is configured properly." << endl; SQLFreeConnect( hdbc ); SQLFreeEnv( henv ); cout << "Press ENTER to continue." << endl; cin.get(); return 1; } (...)
Oczywiście musiałem zmienic linijkę z rc, bo nie mam bazy myDatabase, no i moja baza wymaga nazwy użytkownika i hasła. No i wywaliłem wszystko z ifa Nie działa... Google mnie rozczarowało (nie pierwszy raz zresztą...) A ja potrzebuje kodu do połączenia się z bazą na ms sql - tego, to praktycznie wogóle nie ma, mysql no peeewno - tysiąc stron. A do ms sql nic :/ |
|
qrchack Temat założony przez niniejszego użytkownika |
» 2015-08-24 14:29:28 Hurra! Udało się!
Po tygodniu grzebaniu w guglach znalazłem SQLDriverConnect wraz z przykładem. http://blog.jamesrossiter.co.uk/2011/01/26/connecting-to-sql-server-from-c/
Funkcja działa, temat można zamknąć |
|
« 1 » |