在delphi中,如何根据不同的数据库自动创建数据源?
谢谢!

解决方案 »

  1.   

    这个好象不好实现!你可以把所有的数据库都列出来,使用异常连接.
    try
     连接1
    except
     连接2
    ...
    end;
      

  2.   

    根据配置文件,来进行配置BDE或者式ADO吧
      

  3.   

    搜一下有很多的procedure TFrom1.CreateDSNBtnClick(Sender: TObject); 
    var 
      registerTemp : TRegistry; 
      bData : array[ 0..0 ] of byte; 
    begin 
      registerTemp := TRegistry.Create; 
      //建立一个Registry实例 
      with registerTemp do 
           begin 
          RootKey:=HKEY_LOCAL_MACHINE; 
          //设置根键值为HKEY_LOCAL_MACHINE 
          //找到Software\ODBC\ODBC.INI\ODBC Data Sources 
          if OpenKey('Software\ODBC\ODBC.INI 
          \ODBC Data Sources',True) then 
         begin //注册一个DSN名称 
         WriteString( 'MyAccess', 'Microsoft 
          Access Driver (*.mdb)' ); 
               end 
             else 
               begin//创建键值失败 
         memo1.lines.add('增加ODBC数据源失败'); 
         exit; 
          end; 
          CloseKey; 
    //找到或创建Software\ODBC\ODBC.INI 
     \MyAccess,写入DSN配置信息 
          if OpenKey('Software\ODBC\ODBC.INI 
          \MyAccess',True) then 
         begin 
         WriteString( 'DBQ', 'C:\inetpub\wwwroot 
         \test.mdb' );//数据库目录,连接您的数据库 
         WriteString( 'Description', 
         '我的新数据源' );//数据源描述 
         WriteString( 'Driver', 'C:\PWIN98\SYSTEM\ 
         odbcjt32.dll' );//驱动程序DLL文件 
         WriteInteger( 'DriverId', 25 ); 
         //驱动程序标识 
         WriteString( 'FIL', 'Ms Access;' ); 
         //Filter依据 
         WriteInteger( 'SafeTransaction', 0 ); 
         //支持的事务操作数目 
         WriteString( 'UID', '' );//用户名称 
         bData[0] := 0; 
         WriteBinaryData( 'Exclusive', bData, 1 ); 
         //非独占方式 
         WriteBinaryData( 'ReadOnly', bData, 1 ); 
         //非只读方式 
               end 
             else//创建键值失败 
               begin 
         memo1.lines.add('增加ODBC数据源失败'); 
         exit; 
          end; 
          CloseKey; 
    //找到或创建Software\ODBC\ODBC.INI 
    \MyAccess\Engines\Jet 
        //写入DSN数据库引擎配置信息 
          if OpenKey('Software\ODBC\ODBC.INI 
         \MyAccess\Engines\Jet',True) then 
         begin 
         WriteString( 'ImplicitCommitSync', 'Yes' ); 
         WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小 
         WriteInteger( 'PageTimeout', 10 );//页超时 
         WriteInteger( 'Threads', 3 );//支持的线程数目 
         WriteString( 'UserCommitSync', 'Yes' ); 
               end 
             else//创建键值失败 
               begin 
         memo1.lines.add('增加ODBC数据源失败'); 
         exit; 
          end; 
          CloseKey; 
             memo1.lines.add('增加新ODBC数据源成功'); 
          Free; 
           end; 
    end;
      

  4.   

    上面是创建Access数据源的例子//其它数据库在这里改一下
    WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)' );
      

  5.   


    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Registry;
    type
      TForm2 = class(TForm)
      private             
        ****************************
        procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION;
        *****************************
      public
      end;
    以上*之间的语句为什么提示错误?
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
      private
        procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationprocedure TForm1.WMEndSession(var Msg:TWMEndSession);
    begin
      //
    end;