31. januar 2004 - 17:45
#3
Jeg formoder at vi snakker ODBC.
Typisk laver man en DSN inde i ODBC Manager og så kan et program connecte til
den DSN.
Men man kan også lave en DSNless connection ved at angive driver og de
andre oplysninger som angive si DSN direkte i koden.
31. januar 2004 - 17:46
#4
Jeg lavede det her eksempel for ike så længe siden:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
char* constr = "Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\\Database\\MSAccess\\Test.mdb;Uid=Admin;Pwd=;";
char* sqlstr = "SELECT * FROM T1";
int main(int argc, char *argv[])
{
SQLHENV Environment;
SQLHDBC DataBaseConnect;
SQLHSTMT stmt;
SQLRETURN stat;
int i,il,sl,outconlen;
char s[10],outconstr[1024];
stat = SQLAllocEnv(&Environment);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in AllocEnv\n");
stat = SQLAllocConnect(Environment,&DataBaseConnect);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in AllocConnect\n");
stat = SQLDriverConnect(DataBaseConnect,NULL,
(SQLCHAR *)constr,(SQLSMALLINT)strlen(constr),
(SQLCHAR *)outconstr, (SQLSMALLINT)sizeof(outconstr),
(SQLSMALLINT *)&outconlen,SQL_DRIVER_COMPLETE);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in Connect\n");
stat = SQLAllocStmt(DataBaseConnect,&stmt);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in AllocStmt\n");
stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr));
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in ExecDirect\n");
stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in BindCol\n");
stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in BindCol\n");
for(;;) {
stat = SQLFetch(stmt);
if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) break;
s[sl] = '\0';
printf("%d %s\n",i,s);
}
SQLFreeStmt(stmt,SQL_DROP);
SQLDisconnect(DataBaseConnect);
SQLFreeConnect(DataBaseConnect);
SQLFreeEnv(Environment);
return 0;
}