Hej NG
Jeg vil gerne undersøge hvorledes man opretter forbindelse til en access eller oracle database i c++.
Det skulle gerne være til Windows og jeg udvikler i Dev-C++.
Er der nogen, der har nogle hints eller nogle henvisninger til hjemmesider eller toturials, der kunne hjælpe mig
Med venlig hilsen
Karin Otzen
jeg har lavet et eks. på en ODBC løsning, hvilket er så dejligt fordi det kan arbejde med alle databaser kræver blot den rigtige DSN, som blot sættes op i windows' ODBC manager
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <windows.h>
// to header filer der er nødvednige for at kunne lave ODBC kald
#include <sql.h>
#include <sqlext.h>
// DSN + brugernavn + kodeord (jeg har testet mod en Access og en MySQL database, men alt kan bruges)
char* dsn = "TestMSAccess";
char* un = "";
char* pw = "";
// en stump SQL som jeg vil teste med
char* sqlstr = "SELECT * FROM T1";
int main(int argc, char *argv[])
{
SQLHENV Environment;
SQLHDBC DataBaseConnect;
SQLHSTMT stmt;
SQLRETURN stat;
// initialiser ODBC
stat = SQLAllocEnv(&Environment);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocEnv" << endl;
// alloker connection
stat = SQLAllocConnect(Environment,&DataBaseConnect);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocConnect" << endl;
// connect til database
stat = SQLConnect(DataBaseConnect,
(SQLCHAR *)dsn,strlen(dsn),
(SQLCHAR *)un,strlen(un),
(SQLCHAR *)pw,strlen(pw));
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in Connect" << endl;
// alloker statement
stat = SQLAllocStmt(DataBaseConnect,&stmt);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocStmt" << endl;
// udfør SQL sætning
stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr));
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in ExecDirect" << endl;
int i,il,sl;
char s[10];
// første kolonne skal gemmes i integer variablen i
stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl;
// anden kolonne skal gemmes i char arrayet s
stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl;
// kør i løkke (indtil vi udfører break)
for(;;) {
// hent række
stat = SQLFetch(stmt);
// hop ud hvis ikke flere data
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) break;
// udskriv data
s[sl] = '\\0';
cout << i << " " << s << endl;
}
// frigør diverse eressourcer
SQLFreeStmt(stmt,SQL_DROP);
SQLDisconnect(DataBaseConnect);
SQLFreeConnect(DataBaseConnect);
SQLFreeEnv(Environment);
system("PAUSE");
return 0;
}
tabel T1 har 2 felter et INTEGER og et VARCHAR.