我想用代码实现动态连接ODBC,不在控制面板的数据源ODBC上配置,请问怎么办?

解决方案 »

  1.   

    如果驱动本身都存在的话,基本上就是操作注册表,
    你可以参看注册表里面ODBC的键值
      

  2.   

    我想连接access数据库,怎么做?
      

  3.   

    ado
    bde 两种控件
    直接用相对路径   用connectstring
    bde指定文件夹 然后直接指定数据库文件名就行dirvername:=  路径
    databasename:=数据名就行了
      

  4.   

    if ADOQuery1.Active =true then
         ADOQuery1.Active :=false;
      ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\数据库.mdb;Persist Security Info=False';
      ADOQuery1.SQL.Text  :='select * from 表';
      aDOQuery1.Active:=true;
      adoquery1.ExecSQL;adotable  相同只用设置  tabalename:='表名'
      

  5.   

    请问 yq3woaini(哈哈镜(初级代码工)(★★★)) ,能把代码发给我么,用bde方法
      

  6.   

    刚才写错了
        Table1.DatabaseName  := 路径  extractfilepath(tablename);
        Table1.TableName     := 表名
      

  7.   

    Table1.DatabaseName  :=extractfilepath(E:\111\db1.mdb);
       Table1.TableName     :=user  //user为表名,这样对么
      

  8.   

    程序通过BDE连接ACCESS数据库,最好不要直接连接,建立一个针对该ACCESS数据库的ODBC数据源,然后BDE通过ODBE连到数据库,直接连总出错,为什么,我也不明白。ADO是Microsoft的东西,Inprise能让它好用吗。ACCESS设立密码后,只需给TDatabase的密码参数赋值,用户不用管。 
    Database1->Params->Values["PASSWORD"]="mypassword";
    创建数据源:
    bool __fastcall TThreadLoad::createdatasource()
    {
       //此函数用来创建供bde使用的odbc数据源来连接数据库
       TRegistry *reg = new TRegistry;
       try
       {
          reg->RootKey=HKEY_LOCAL_MACHINE;
          //创建驱动程序
          if(!reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\Microsoft Access Driver (*.mdb)",false))
          {
             Application->MessageBox("请安装MicroSoft Access驱动程序","提示",MB_OK);
          }
          reg->CloseKey();
          /*
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\Microsoft Access Driver (*.mdb)",true);
          reg->WriteInteger("UsageCount",2);
          char p[100];
          String path1;
          GetSystemDirectory(p,100);
          String path(p);   
          path=path+"\\odbcjt32.dll";
          reg->WriteString("Driver",path);
          reg->WriteString("Setup",path);
          reg->WriteString("APILevel","1");
          reg->WriteString("ConnectFunctions","YYN");
          reg->WriteString("DriverODBCVer","02.50");
          reg->WriteString("DSN","MS Access 97 Database");
          reg->WriteString("FileExtns","*.mdb");
          reg->WriteString("FileUsage","2");
          reg->WriteString("SQLLevel","0");
          reg->WriteString("UID","Admin");
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers",true);
          reg->WriteString("Microsoft Access Driver (*.mdb)","Installed");
          //创建odbc驱动文件列表信息
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Core",true);
          reg->WriteInteger("UsageCount",3);
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Core\\FileList",true);
          char pchar[100];      GetSystemDirectory(pchar,100);
          String path2(pchar);
          reg->WriteString("ODBC16GT.DLL",path2+"\\ODBC16GT.DLL");
          reg->WriteString("ODBC32GT.DLL",path2+"\\ODBC32GT.DLL");
          reg->WriteString("ODBC32.DLL",path2+"\\ODBC32.DLL");
          reg->WriteString("ODBCCP32.DLL",path2+"\\ODBCCP32.DLL");
          reg->WriteString("ODBCCR32.DLL",path2+"\\ODBCCR32.DLL");
          reg->WriteString("ODBCINT.DLL",path2+"\\ODBCINT.DLL");
          reg->WriteString("ODBCTRAC.DLL",path2+"\\ODBCTRAC.DLL");
          reg->WriteString("ODBCAD32.EXE",path2+"\\ODBCAD32.EXE");
          reg->WriteString("ODBCCP32.CPL",path2+"\\ODBCCP32.CPL");
          reg->WriteString("ODBCINST.HLP",path2+"\\ODBCINST.HLP");
          reg->WriteString("ODBCINST.CNT",path2+"\\ODBCINST.CNT");
          reg->WriteString("DS16GT.DLL",path2+"\\ODBC16GT.DLL");
          reg->WriteString("DS32GT.DLL",path2+"\\ODBC32GT.DLL");
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\MS Code Page Translator",true);
          reg->WriteString("Translator",path2+"\\MSCPXL32.DLL");
          reg->WriteString("Setup",path2+"\\MSCPXL32.DLL");
          reg->WriteInteger("UsageCount",3);
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\MS Code Page Translator\\FileList",true);
          reg->WriteString("MSCPXL32.DLL",path2+"\\MSCPXL32.DLL");
          reg->WriteString("12520437.CPX",path2+"\\12520437.CPX");
          reg->WriteString("12520850.CPX",path2+"\\12520850.CPX");
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Translators",true);
          reg->WriteString("MS Code Page Translator","Installed");      //存在就返回
          reg->CloseKey();
          */
          reg->OpenKey("SOFTWARE\\odbc\\ODBC.INI\\MyODBC",true);
          String systempath;
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\odbc\\odbcinst.ini\\Microsoft Access Driver (*.mdb)",true);
          systempath=reg->ReadString("Driver");
          String programpath=ExtractFilePath(Application->ExeName);      //创建数据源
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\odbc\\ODBC.INI\\MyODBC",true);
          reg->WriteString("Driver",systempath);
          reg->WriteString("DBQ",programpath+"EzDoc.mdb");
          reg->WriteInteger("DriverId",25);
          reg->WriteString("FIL","MS Access;");
          reg->WriteInteger("SafeTransactions",0);
          reg->WriteString("UID","");
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\odbc\\ODBC.INI\\MyODBC\\Engines\\Jet",true);
          reg->WriteString("ImplicitCommitSync","");
          reg->WriteInteger("MaxBufferSize",2048);
          reg->WriteInteger("PageTimeout",5);
          reg->WriteInteger("Threads",3);
          reg->WriteString("UserCommitSync","Yes");
          reg->CloseKey();
          reg->OpenKey("SOFTWARE\\odbc\\ODBC.INI\\ODBC Data Sources",true);
          reg->WriteString("MyODBC","Microsoft Access Driver (*.mdb)");
          reg->CloseKey();
          reg->Free();
          return true;
       }
       catch(...)
       {
          reg->Free();
          return false;
       }
    }
      

  9.   

    在Form1或DataModule1上放一Database1,
    双击Database1,会弹出一对话框,
    Driver name选MSACCESS,
    Name中输入任一不存在的别名如MyAcesss97(供Table1等使用)
    去掉Login Prompt,
    再点一下Defaults,在参数框中找到下列参数:
    DATABASE NAME=DRIVE:/PATH/DATABASE.MDB
    就是设定你的数据库路径的,可先改成指向你的任一库:
    DATABASE NAME=c:\PATH\myAccess.MDB
    程序中只要动态改变此参数就可任意指向你的Access97库了
    Database1->Params->Values["DATABASE NAME"]=新的其它Access97库路径
      

  10.   

    请问reg->WriteString("DBQ",programpath+"EzDoc.mdb")这句话中,EzDoc.mdb可以是相对programpath的相对路径么?真的谢谢你,yq3woaini(哈哈镜(初级代码工)(★★★)) 
      这分等结贴了就加给你