SQL / C++ med sqlext.h
jeg er igand med at lave en class som skal kunne udføre lidt DB arbejde for mig. jeg benytter sqlext.h.problemet ligger i mint SetSQL funktion, den får ikke converteret det rigtigt eller lignende.
<!---------- KODE
#include \"stdafx.h\"
#include <windows.h>
#include <sqlext.h>
#include \"stdlib.h\"
class BDAC {
public:
bool adIsOpen;
char **rs;
unsigned char *sql;
BDAC() {
adIsOpen=false;
rs=NULL;
sql=NULL;
}
~BDAC() {
if (rs!=NULL) { free(rs); }
if (sql!=NULL) { free(sql); }
}
void SetSQL(char *s) {
int l,j;
l=strlen(s);
sql=(unsigned char*)malloc((l*sizeof(unsigned char))+1);
for (j=0;j<l;j++) { sql[j]=(unsigned char)s[j]; }
sql[l]=NULL;
}
void GetData() {
//unsigned char szSql[]=\"select * from cpp\"; // SQL string
unsigned char szDSN[SQL_MAX_DSN_LENGTH] = \"LOCAL_DB\"; // Data Source Name buffer
unsigned char* szUID = NULL; // User ID buffer
unsigned char* szPasswd = NULL; // Password buffer
HENV hEnv = NULL; // Env Handle from SQLAllocEnv()
HDBC hDBC = NULL; // Connection handle
HSTMT hStmt = NULL; // Statement handle
UCHAR szModel[200]; // Model buffer
SDWORD cbModel; // Model buffer bytes recieved
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) { adIsOpen=true; }
if (adIsOpen) {
// Allocate memory for the statement handle
retcode = SQLAllocStmt (hDBC, &hStmt);
// Prepare the SQL statement by assigning it to the statement handle
retcode = SQLPrepare (hStmt, sql, sizeof (sql));
// Execute the SQL statement handle
retcode = SQLExecute (hStmt);
// Project only column 1 which is the models
SQLBindCol (hStmt, 2, 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 (\"* %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);
}
};
void main(int argc, char* argv[]) {
BDAC *db = new BDAC;
db->SetSQL(\"select * from cpp\");
printf(\"SQL=\'%s\'\\n\\n\",db->sql);
db->GetData();
delete db;
};
<------- KODE
hvis nogen har efaring med dette, vil jeg meget gerne høre hvordan jeg skal bærer mig ad med at få det til at virke?
jeg får ingen compiler fejl, eller runtime fejl - den får bare ikke noget ud af basen. og jeg er sikker på det er min sql. da jeg har testet med den szSqlStr som er udkommenteret, og der virker det fint. det nytter jo bare ikke noget at bruge den, da sql sætningen så er defineret i objektet, og det kan man ikke bruge til noget i længden!
