下面一段程序是我写的,希望对你有帮助。
/*放在头部的定义 */
#define ODBC_ADD_DSN 1
#define ODBC_CONFIG_DSN 2
#define ODBC_REMOVE_DSN 3
#define ODBC_ADD_SYS_DSN 4
#define ODBC_CONFIG_SYS_DSN 5
#define ODBC_REMOVE_SYS_DSN 6
#define ODBC_REMOVE_DEFAULT_DSN 7
#define SQL_FETCH_NEXT 1
#define SQL_FETCH_FIRST 2
#define SQL_FETCH_LAST 3
#define SQL_FETCH_PRIOR 4
#define SQL_FETCH_ABSOLUTE 5
#define SQL_FETCH_RELATIVE 6
#define SQL_FETCH_FIRST_USER 31
#define SQL_FETCH_FIRST_SYSTEM 32
/*下面一个函数,是将所有的数据源取出来放到QTableWidget中,两列,一列显示名称,另一列显示驱动名称*/
void DsnDialog::loadDSN()
{
#ifdef Q_OS_WIN32
typedef int (__stdcall *SQLAllocEnvType)(long*);
typedef int (__stdcall *SQLFreeEnvType)(long);
typedef int (__stdcall *SQLDataSourcesType)(long,int,char *,int,int *,char *,int,int *);
typedef int (__stdcall *SQLDriversType)(long,int,char *,int,int *,char *,int,int *);
QLibrary lib("odbc32",this);
#else
typedef int ( *SQLAllocEnvType)(long*);
typedef int ( *SQLFreeEnvType)(long);
typedef int ( *SQLDataSourcesType)(long,int,char *,int,int *,char *,int,int *);
typedef int ( *SQLDriversType)(long,int,char *,int,int *,char *,int,int *);
QLibrary lib("odbc",this);
#endif
long henv=0;
char dsn[512],desc[512];
int ndsn=0;
int ndesc=0;
int i=0;
QTableWidgetItem *item=0;
QMap<QString,QString> map1;
QMap<QString,QString> map2;
if(lib.load())
{
SQLAllocEnvType SQLAllocEnv=(SQLAllocEnvType)lib.resolve("SQLAllocEnv");
SQLFreeEnvType SQLFreeEnv=(SQLFreeEnvType)lib.resolve("SQLFreeEnv");
SQLDataSourcesType SQLDataSources=(SQLDataSourcesType)lib.resolve("SQLDataSources");
SQLDriversType SQLDrivers=(SQLDriversType)lib.resolve("SQLDrivers");
if(SQLAllocEnv && SQLFreeEnv && SQLDataSources && SQLDrivers)
{
if(SQLAllocEnv(&henv)==-1)
{
qDebug()<<tr("SQLAllocEnv fail.");
}
else
{
int nRet=-1;
memset(dsn,0,512); ndsn=0; memset(desc,0,512); ndesc=0;
nRet=SQLDataSources(henv,SQL_FETCH_FIRST_USER,dsn,512,&ndsn,desc,512,&ndesc);
while(nRet==0)
{
map1[dsn]=desc;
memset(dsn,0,512); ndsn=0; memset(desc,0,512); ndesc=0;
nRet=SQLDataSources(henv,SQL_FETCH_NEXT,dsn,512,&ndsn,desc,512,&ndesc);
}
memset(dsn,0,512); ndsn=0; memset(desc,0,512); ndesc=0;
nRet=SQLDataSources(henv,SQL_FETCH_FIRST_SYSTEM,dsn,512,&ndsn,desc,512,&ndesc);
while(nRet==0)
{
map2[dsn]=desc;
memset(dsn,0,512); ndsn=0; memset(desc,0,512); ndesc=0;
nRet=SQLDataSources(henv,SQL_FETCH_NEXT,dsn,512,&ndsn,desc,512,&ndesc);
}
SQLFreeEnv(henv);
}
}
else
qDebug()<<"error:"<<lib.errorString();
lib.unload();
}
else
qDebug()<<"loadDSN: load odbc lib fail"<<lib.errorString();
QStringList list=map1.keys();
list.sort();
i=0;
item=0;
ui->tableUser->setRowCount(0);
ui->tableUser->setRowCount(list.count());
foreach(QString str,list)
{
item=new QTableWidgetItem(str);
ui->tableUser->setItem(i,0,item);
item=new QTableWidgetItem(map1[str]);
ui->tableUser->setItem(i,1,item);
i++;
}
list.clear();
list=map2.keys();
list.sort();
i=0;
item=0;
ui->tableSystem->setRowCount(0);
ui->tableSystem->setRowCount(list.count());
foreach(QString str,list)
{
item=new QTableWidgetItem(str);
ui->tableSystem->setItem(i,0,item);
item=new QTableWidgetItem(map2[str]);
ui->tableSystem->setItem(i,1,item);
i++;
}
ui->tableSystem->resizeColumnsToContents();
ui->tableSystem->resizeRowsToContents();
ui->tableUser->resizeColumnsToContents();
ui->tableUser->resizeRowsToContents();
}