Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SQLConnect nie działa

Ostatnio zmodyfikowano 2015-08-24 14:29
Autor Wiadomość
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

C/C++
#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"; // ODBC database name
   
    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?
P-136585
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.
P-136600
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
P-136627
DejaVu
» 2015-08-21 09:16:30
https://msdn.microsoft.com​/en-us/library​/ms714163(v=vs.85).aspx

Odpal sobie na boku kod przykładowy z jakiegokolwiek artykułu i sprawdź czy działa Ci on prawidłowo. Będziesz miał się na czym wzorować.
P-136631
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

C/C++
// sql.cpp -- sample program to read a database
// Special project requirements:
//   Project->Settings->All Configurations: use MFC in a static library
//   Add a Libs folder to the project and include in it Odbc32.lib from the vc98 folder
//   Configure the database for ODBC access using Start->Settings->Control Panel->ODBC32
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <afxwin.h>
#include <sql.h>
#include <sqlext.h>

int main()
{
    // declarations needed for SQL
    RETCODE rc; // ODBC return code
    HENV henv; // Environment
    HDBC hdbc; // Connection handle
    HSTMT hstmt; // Statement handle
    SDWORD cbData; // Output length of data
   
    // attempt to connect to the ODBC database
    char db[] = "myDatabase"; // ODBC database name
    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 not successful, quit
    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 :/


P-136637
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ąć
P-136822
« 1 »
  Strona 1 z 1