Borland C++ 5.5.1 for Win32 und SQL



  • Hi,

    ich benutze den Borland C++ 5.5.1 for Win32.
    Dieses Beispiel:

    #include <windows.h>
    #include <sql.h>
    #include <sqlext.h>
    #include <stdio.h>
    
    int main(void)
    {
                    HENV                      hEnv = NULL;                                                      // Env Handle from SQLAllocEnv()
                    HDBC                      hDBC = NULL;                                                      // Connection handle
                    HSTMT                   hStmt = NULL;                                                      // Statement handle
                    UCHAR                   szDSN[SQL_MAX_DSN_LENGTH] = "dbtest";                // Data Source Name buffer
            UCHAR*                 szUID = NULL;                                                      // User ID buffer 
                    UCHAR*                  szPasswd = NULL;                                                                // Password buffer
                    UCHAR                   szModel[128];                                                        // Model buffer
                    SDWORD             cbModel;                                                                 // Model buffer bytes recieved
                    UCHAR                   szSqlStr[] = "Select * From test";                // SQL string
                    RETCODE              retcode;                                                                   // Return code
    
                    // Allocate memory for ODBC Environment handle
                    SQLAllocEnv (&hEnv);
    
                    // Allocate memory for the connection handle
                    SQLAllocConnect (hEnv, &hDBC);
    
                    // Connect to the data source "db97" using userid and password.
                    retcode = SQLConnect (hDBC, szDSN, SQL_NTS, szUID, SQL_NTS, szPasswd, SQL_NTS);
    
                    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
                    {
                                    // Allocate memory for the statement handle
                                    retcode = SQLAllocStmt (hDBC, &hStmt);
    
                                    // Prepare the SQL statement by assigning it to the statement handle
                                    retcode = SQLPrepare (hStmt, szSqlStr, sizeof (szSqlStr));
    
                                    // Execute the SQL statement handle
                                    retcode = SQLExecute (hStmt);
    
                                    // Project only column 1 which is the models
                                    SQLBindCol (hStmt, 1, SQL_C_CHAR, szModel, sizeof(szModel), &cbModel);
    
                                    // Get row of data from the result set defined above in the statement
                                    retcode = SQLFetch (hStmt);
    
                                    while (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
                                    {
                                                    printf ("\t%s\n", szModel);                                                // Print row (model)
                                                    retcode = SQLFetch (hStmt);                                 // Fetch next row from result set
                                    }
    
                                    // Free the allocated statement handle
                                    SQLFreeStmt (hStmt, SQL_DROP);
    
                                    // Disconnect from datasource
                                    SQLDisconnect (hDBC);
                    }
    
                    // Free the allocated connection handle
                    SQLFreeConnect (hDBC);
    
                    // Free the allocated ODBC environment handle
                    SQLFreeEnv (hEnv);
                    return 0;
    }
    

    stellt eine Verbindung zu einer Access Datenbank her
    und setzt ein SQL-Statement ab. Soweit so gut.
    Im Visual C++ funktioniert es.
    Beim Borland Compiler bekomme ich folgende Fehler:

    Error: Unresolved external 'SQLAllocEnv' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLAllocConnect' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLConnect' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLAllocStmt' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLPrepare' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLExecute' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLBindCol' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLFetch' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLFreeStmt' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLDisconnect' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLFreeConnect' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    Error: Unresolved external 'SQLFreeEnv' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\WIN\DESKTOP\DB.OBJ
    

    Hat jemand eine Idee warum????



  • Wahrscheinlich linkst Du eine Library oder eine Objektdatei nicht mit in Dein Programm. Schau' Dir einfach noch einmal die Dateiliste im VC an, die zu dem Projekt gehört. Alle diese Dateien müssen dann auch mit dem BCC kompiliert/gelinkt werden.



  • Es ist nur eine Datei, die ich oben
    gepostet habe. Die habe ich db.cpp genannt.
    Wenn ich sie in den VC++ lade und compiliere
    tut es. Wenn ich sie mit dem Borland compiliere
    bekomme ich die o.g. Fehler...

    Noch jemand eine Idee?



  • Original erstellt von Robby:
    Noch jemand eine Idee?

    JA! du musst eine bestimmte Library linken!



  • Original erstellt von Shade Of Mine:
    JA! du musst eine bestimmte Library linken!

    Super, und welche? und wie mach ich das im bcc?



  • Also ... eine kleine Suche in Google hat ergeben, dass die Funktionen, die der BCC nicht finden kann, in der ODBC32.DLL implementiert sind.

    Also hab ich die Datei mit dem Befehl 'IMPLIB' des Borland-Compilers in eine Library umgewandelt:

    implib odbc.lib odbc32.dll
    

    Und mit

    bcc32 odbc.lib sql.c
    

    kann man das dann übersetzen... (sql.c ist der obige Quelltext) ...



  • Original erstellt von mady:
    **Also ... eine kleine Suche in Google hat ergeben, dass die Funktionen, die der BCC nicht finden kann, in der ODBC32.DLL implementiert sind.

    **

    Das hat google mir gerade eben auch gesagt.
    Hab es ausprobiert und es funktioniert.
    DANKE!


Anmelden zum Antworten