Leidiges Thema Datenbanken

si031006

Mitglied
Hi!

Möchte eine Applikation schreiben, welche unter Windows UND Linux funktionieren soll und diverse Datenbanken ansprechen soll (aussuchbar sind hierbei MySql, MSSql und Access und weiss der Geier noch was -> also Datenbankunabhängig).

Da ich ein totaler Anfänger bin, was Datenbanken mit C++ betrifft hab ich mich mal ein bißchen schlau gemacht und rausgefunden das anscheinend ohne ODBC sowieso nichts geht. Da das Programm auch unter Linux laufen soll, fallen die netten MFC Sachen wie CRecordSet und ähnliches auch weg. Deshalb dachte ich mir ich nehm auch diesmal kein Visual Studio, sondern beschränke mich auf den einfachen Dev-C++ Compiler von Bloodshed. Nach einigem stöbern fand ich dann auch ein kleines feines Beispielprogramm welches ich wahnsinnig gerne ausprobieren würde:

#include <windows.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] = "db97"; // 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 Model From Makes Where Make='Vauxhall'"; // 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;
}


PROBLEM: Bekomme einen Linker Error, und zwar:
[Linker error] undefined reference to `SQLAllocEnv@4'
[Linker error] undefined reference to `SQLAllocConnect@8'

Was muss ich hier (vor allem wo) einstellen, das mein c++ programm nun hier läuft? Weiss hier zufällig jemand Rat?
Als kleine feine Alternative hab ich auch noch libodbc++ gefunden, wobei ich leider Gottes auch keinen Compilefähigen Code zustande bringe. Weiss vielleicht auch hierzu irgendjemand eine brauchbare Schritt für Schritt Anleitung für Dummies?

Danke im voraus für die Bemühungen...
 
Hi.
PROBLEM: Bekomme einen Linker Error, und zwar:
[Linker error] undefined reference to `SQLAllocEnv@4'
[Linker error] undefined reference to `SQLAllocConnect@8'
Sind das die einzigen Fehler die du bekommst? Laut MSDN sind die Funktionen SQLAllocEnv (http://msdn2.microsoft.com/en-us/library//ms709270.aspx) und SQLAllocConnect (http://msdn2.microsoft.com/en-us/library/ms714852.aspx) durch die Funktion SQLAllocHandle ersetzt wurden (in ODBC 3.x).

Gruß

PS: Bitte verwende in Zukunft die Code Tags für Quelltext!
 
Zuletzt bearbeitet:
Zurück