som jeg tænkte jeg tog noget eksisterende ODBC C kode jeg havde liggende, snuppede
en connection string fra
www.connectionstrings.com og så virkede det
Book1.xls
=========
F1 F2
1 A
2 BB
3 CCC
4 Lang tekst
xls2txt.c
=========
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
int main()
{
SQLHENV Environment;
SQLHDBC DataBaseConnect;
SQLHSTMT stmt;
SQLRETURN stat;
char *constr = "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\\Book1.xls;";
char outconstr[1024];
int outconlen;
char *sqlstr = "SELECT * FROM [sheet1$]";
int i;
char s[50];
int il,sl;
stat = SQLAllocEnv(&Environment);
stat = SQLAllocConnect(Environment,&DataBaseConnect);
stat = SQLDriverConnect(DataBaseConnect,NULL,
(SQLCHAR *)constr,(SQLSMALLINT)strlen(constr),
(SQLCHAR *)outconstr, (SQLSMALLINT)sizeof(outconstr),
(SQLSMALLINT *)&outconlen,SQL_DRIVER_COMPLETE);
stat = SQLAllocStmt(DataBaseConnect,&stmt);
stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr));
stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il);
stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl);
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;
}
test
====
C:\>bcc32 xls2txt.c odbc32.lib
Borland C++ 5.6.4 for Win32 Copyright (c) 1993, 2002 Borland
xls2txt.c:
Warning W8004 xls2txt.c 30: 'stat' is assigned a value that is never used in function main
Turbo Incremental Link 5.65 Copyright (c) 1997-2002 Borland
C:\>xls2txt
1 A
2 BB
3 CCC
4 Lang tekst