返回列表 发帖

用C++Builder动态设定ODBC数据源

本文以access为例 需要文件 odbcinst.h(bcb或vc的include目录) odbccp32.dll(winnt\system32\目录) implib.exe(通过dll生成lib库) coff2omf.exe (将coff库转化为omf库) 首先将上面文件拷贝到工程目录, 执行下面命令: implib.exe odbccp32.lib odbccp32.dll coff2omf Odbccp32.lib 下面程序的功能为当应用程序启动时,动态添加/修改一个指向当前目录的,名为test的系 统数据源。 新建一个工程,在工程主文件(含有winmain函数)中添加 #include USELIB("odbccp32.lib");//lib在工程当前目录 修改后的代码如下; file://---------------------------------------------------------------------------/ #include #include #pragma hdrstop USEFORM("main.cpp", Form1); file://工/程的其他单元申明..... USELIB("odbccp32.lib"); file://---------------------------------------------------------------------------/ WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); AnsiString Data,DataPath,dbpath; unsigned char temp[255];//接收转化后的连接字符串 LPSTR ch;//字符串指针相当于char * DataPath=GetCurrentDir();//获取当前目录 Data=DataPath+"\\test.mdb\b";//假定当前数据库为test.mdb dbpath="DSN=test\bDBQ="+Data+"DEFAULTDIR="+DataPath+"\b\b"; file://构/造odbc连接字符串,test为数据源名,非法字符先用\b代替 ch=dbpath.c_str();//将AnsiString转化为字符串 int i=0; while(*ch!='\0')//查找并替换非法字符,并装入字符数组 { if(*ch=='\b') *ch='\0'; temp=*ch; ch++; i++; } if(::SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,(LPSTR)"Microsoft Access Driver (*.mdb)\0",(LPSTR)temp))//修改或添加数据源,如果成功,程序正常启动 { Application->Title = "动态设定odbc数据源"; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } else { ShowMessage("数据库设定失败!"); Application->Terminate(); } } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } file://---------------------------------------------------------------------------/

返回列表 回复 发帖