我想在程序中自动配置数据源,自动连接不同的access数据库,该如何实现呢?
我看过好多通过修改注册表来实现的,可不会用,看不懂,不知道有没有更简单的方法。
请大家帮帮忙吧!谢谢!!!

解决方案 »

  1.   

    uses ADoconEd;
    procedure TForm1.Button1Click(Sender:Tobject);
    begin
        ADOConnection1.close;
        EidtConnectionString(ADOConnection1); //--配置数据源
    end;
      

  2.   

    看看这个,这方法是我常用的
    procedure TOrdSrvF.ADOConBeforeConnect(Sender: TObject);
    const
      l1:string='Provider=SQLOLEDB.1;Password=';
      l2:string=';Persist Security Info=True;User ID=';
      l3:string=';Initial Catalog=RKD;Data Source=';
      l4:string=';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096';
    var
      MyIni: TIniFile;
    begin
      with tregistry.Create do
      try
        rootkey:=HKEY_LOCAL_MACHINE;
        if openkey('\Software\connection\Database',False) Then
        begin
          if valueexists('ServerName') then
            l3:=l3+readstring('ServerName');
          if valueexists('LoginId') then
            l2:=l2+readstring('LoginId')
          else
            l2:=l2+'sa';
          if valueexists('PassWord') then
            l1:=l1+Decrypt(readstring('PassWord'));
        end
        else
        begin
          if Not FileExists(ExtractFilePath(Application.ExeName)+'data') then
          begin //如果配置文件不存在
            Beep();
            if lang=lgbig5 then
              Showmessage(gbtobig5('    服务器配置文件“'+ExtractFilePath(Application.ExeName)+'data'+'”'+chr(13)+chr(10)+'不存在,请先设置服务器!'))
            else
              Showmessage('    服务器配置文件“'+ExtractFilePath(Application.ExeName)+'data'+'”'+chr(13)+chr(10)+'不存在,请先设置服务器!');
            Application.Terminate;
          end
          else
          begin //存在配置文件,读取有关设置
            MyIni := TIniFile.Create(ExtractFilePath(Application.ExeName)+'data);
            l3:=l3+MyIni.ReadString('DataServer', 'ServerName', '');
            l2:=l2+MyIni.ReadString('DataServer', 'LoginId', 'sa');
            l1:=l1+Decrypt(MyIni.ReadString('DataServer', 'PassWord', ''));
            MyIni.Destroy;
          end;
        end;
        ADOCon.ConnectionString:=l1+l2+l3+l4;
      finally
        free;
      end;
      

  3.   

    unit DeliverSetFU;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,inifiles, Mask, ComCtrls;type
      TDeliverSetForm = class(TForm)
        Panel1: TPanel;
        Panel2: TPanel;
        Panel3: TPanel;
        GroupBox1: TGroupBox;
        GroupBox2: TGroupBox;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Button5: TButton;
        Button6: TButton;
        Button1: TButton;
        Button2: TButton;
        MaskEdit1: TMaskEdit;
        MaskEdit2: TMaskEdit;
        MaskEdit3: TMaskEdit;
        MaskEdit4: TMaskEdit;
        MaskEdit5: TMaskEdit;
        MaskEdit6: TMaskEdit;
        MaskEdit7: TMaskEdit;
        MaskEdit8: TMaskEdit;
        Button3: TButton;
        procedure Button6Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        //procedure ReadSectionValues(const section:string;strings:Tstrings);override;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DeliverSetForm: TDeliverSetForm;
      Serv:TInifile;implementation
    uses MainFu,UdmU;
    {$R *.dfm}procedure TDeliverSetForm.Button6Click(Sender: TObject);
    begin
    close;
    end;procedure TDeliverSetForm.Button5Click(Sender: TObject);
    var
    filename:string;
    begin
       Filename:=ExtractFilePath(paramstr(0))+'Serv.ini';
       Serv:=TInifile.Create(filename);
       Serv.WriteString('SourceYuan', 'ServerName',MaskEdit1.text);
       Serv.WriteString('SourceYuan', 'DataName',MaskEdit2.text);
       Serv.WriteString('SourceYuan','UserName',MaskEdit3.text);
       Serv.WriteString('SourceYuan', 'PassWord', MaskEdit4.text);
       Serv.WriteString('SourceBeng', 'ServerName',MaskEdit5.text);
       Serv.WriteString('SourceBeng', 'DataName',MaskEdit6.text);
       Serv.WriteString('SourceBeng','UserName',MaskEdit7.text);
       Serv.WriteString('SourceBeng', 'PassWord', MaskEdit8.text);
    end;procedure TDeliverSetForm.Button1Click(Sender: TObject);
    begin
    udmu.Adodm.ConnYuan.Connected:=false;
    udmu.Adodm.ConnYuan.ConnectionString:=
    'Provider=SQLOLEDB.1;Password='+Maskedit4.text+';Persist Security Info=True;User ID='+Maskedit3.text+';Initial Catalog='+Maskedit2.text+';Data Source='+Maskedit1.text+';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=HNNDTMPCOMPUTER;Use Encryption for Data=False;Tag with column collation when possible=False';
     try
      udmu.Adodm.ConnYuan.Connected:=true;
      showmessage('数据库连接成功!');
     except
      showmessage('数据库连接失败请效对源数据库数据!');
     end;
    end;
    procedure TDeliverSetForm.Button2Click(Sender: TObject);
    begin
    udmu.Adodm.ConnBeng.Connected:=false;
    udmu.Adodm.ConnBeng.ConnectionString:=
    'Provider=SQLOLEDB.1;Password='+Maskedit8.text+';Persist Security Info=True;User ID='+Maskedit7.text+';Initial Catalog='+Maskedit6.text+';Data Source='+Maskedit5.text+';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=HNNDTMPCOMPUTER;Use Encryption for Data=False;Tag with column collation when possible=False';
     try
      udmu.Adodm.ConnBeng.Connected:=true;
      showmessage('数据库连接成功!');
     except
      showmessage('数据库连接失败请效对源数据库数据!');
     end;
    end;procedure TDeliverSetForm.FormCreate(Sender: TObject);
    var
    filename:string;
    begin
       Filename:=ExtractFilePath(paramstr(0))+'Serv.ini';
       Serv:=TInifile.Create(filename);
       MaskEdit1.text:=Serv.ReadString('SourceYuan', 'ServerName','');
       MaskEdit2.text:=Serv.ReadString('SourceYuan', 'DataName','');
       MaskEdit3.text:=Serv.ReadString('SourceYuan','UserName','');
       MaskEdit4.text:=Serv.ReadString('SourceYuan', 'PassWord','');
       MaskEdit5.text:=Serv.ReadString('SourceBeng', 'ServerName','');
       MaskEdit6.text:=Serv.ReadString('SourceBeng', 'DataName','');
       MaskEdit7.text:=Serv.ReadString('SourceBeng','UserName','');
       MaskEdit8.text:=Serv.ReadString('SourceBeng', 'PassWord','');
    end;end.
      

  4.   

    用Ini文件吧,自己做个界面,处理读入和保存。也可用数据链接文件,连界面也不用自己做。