c++ builder 动态设定odbc数据源

    技术2022-05-11  149

    本文以access为例需要文件 odbcinst.h(bcb或vc的include目录)  odbccp32.dll(winnt/system32/目录) implib.exe(通过dll生成lib库) coff2omf.exe (将coff库转化为omf库)

    首先将上面文件拷贝到工程目录,执行下面命令:implib.exe odbccp32.lib odbccp32.dllcoff2omf Odbccp32.lib

    下面程序的功能为当应用程序启动时,动态添加/修改一个指向当前目录的,名为test的系 统数据源。

    新建一个工程,在工程主文件(含有winmain函数)中添加#include <odbcinst.h>USELIB("odbccp32.lib");//lib在工程当前目录

     

    修改后的代码如下;file://---------------------------------------------------------------------------

    #include <vcl.h>#include <odbcinst.h>

    #pragma hdrstopUSEFORM("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[i]=*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://---------------------------------------------------------------------------

    参考:c++ builder 应用开发大全  msdn

     

     


    最新回复(0)