怎么通过ado动态的连接数据库

解决方案 »

  1.   

    在你需要的时候给ADOConnection的ConnectionString赋值即可,
    因为你的问题不是很清楚,我只能说这么多了,见谅!
      

  2.   

    如果是设置CONNECTIONSTRING,可以先用近代件设置好,然后把CONNECTIONSTRING 复制出来在程序中动态写入。
    不知你是不是想要这个。
      

  3.   

    function GetConnectionString: string;
    var
      SYSINI: TINIFile;
      ServerName, UserName, Password, tmpstr: string;
    begin
      SYSINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DB.INI');
      try
        ServerName := SYSINI.ReadString('Database', 'ServerName', '');
        UserName := SYSINI.ReadString('Database', 'UserName', '');
        tmpstr := SYSINI.ReadString('Database', 'Password', '');
        Password := Decrypt(tmpstr, '');
        Result := '';
        Result := 'Provider=OraOLEDB.Oracle.1;Password=' + Password + ';Persist Security Info=True;User ID=' + UserName + ';Data Source='+ServerName+';Extended Properties=""';
      finally
        SYSINI.Free;
      end;
    end;
    上面是我的方法,我把connectionstring需要的内容写到db.ini这个配置文件中,需要的时候再从文件中读取出来,动态配置adoconnection;
    函数的调用 :
     begin
        Application.CreateForm(TDataModule1, DataModule1);
      DataModule1.ADOConnection1.Connected:= false;
        try
          DataModule1.ADOConnection1.ConnectionString:= GetConnectionString;
          DataModule1.ADOConnection1.Connected:= true;
        except
          MessageBox(Application.Handle,'数据库初始化设置错误,请与系统管理员联系!','错误',MB_OK OR MB_ICONSTOP);
          Exit;
        end;
        Application.CreateForm(TMainform, Mainform);
        Application.Run;
      end;
      

  4.   

    function TMainDataModule.GetConnectionString(const strKey,ConString:String): String;
    var
      m_reg:TRegistry;
    begin
      //获得数据库连接串
      //ConString='' 从注册表中获得连接串,如果不存在则生成
      //ConString<>'' 编辑存在的连接串,然后更新注册表
      m_reg:=TRegistry.Create;
      m_reg.RootKey:=HKEY_LOCAL_MACHINE;
      m_reg.OpenKey(app.RegKey,true);
      if ConString='' then    //从注册表中读取
      begin
        Result:=m_reg.ReadString(strKey);
        if Result='' then
        begin
          Result:=PromptDataSource(Application.Handle,ConString);
          if Result<>'' then
            m_reg.WriteString(strKey,Result);
        end;
      end
      else    //编辑存在的连接串
      begin
        Result:=PromptDataSource(Application.Handle,ConString);
        m_reg.WriteString(strKey,Result);
      end;
      m_reg.Free;
    end;
      

  5.   

    PromptDataSource函数很酷哦,在db单元中
      

  6.   

    PromptDataSource在D5中怎么找不到?
      

  7.   


    错了
    在adodb单元中
      

  8.   

    就是这样的,为了不出错,你可以用那个连接程序得到两个connectionString.
    这两上String,你分别保存下来,比如cnStr1,cnStr2
    然后若要连接cnStr1,你就这样。
    conn.close;
    conn.ConnectionString:=cnStr1;
    conn.open;
    .......
    然后要换成另外一个数据库的时候只要如上一样先关闭再换string,再open就可以了啊?
      

  9.   

    非常鑽同wks(mex) :
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB, Registry;type
      TForm1 = class(TForm)
        Button1: TButton;
        ADOConnection1: TADOConnection;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    //动态选择数据源和数据库procedure TForm1.Button1Click(Sender: TObject);
    var
      strConnection: string;
      Reg01: TRegistry;
    begin
      strConnection := '';
      Reg01 := Tregistry.Create;
      try
       //从注册表中读出ConnectionString
        Reg01.RootKey := HKEY_CURRENT_USER;
        if Reg01.OpenKey('\Software\LdcErpAcc\AdoCon', TRUE) then
          strConnection := Reg01.ReadString('Connection');
        adoconnection1.ConnectionString := strConnection;
        try
          adoconnection1.open;
        except
          adoconnection1.Close;
          strConnection := PromptDataSource(Handle, ADOConnection1.ConnectionString);
          showmessage(strConnection);      if strConnection <> '' then
          begin
            adoconnection1.ConnectionString := strConnection;        if (Reg01.OpenKey('\Software\LdcErpAcc\AdoCon', False)) = False then
          //如果注册表中没有信息则创建信息
              reg01.CreateKey('\Software\LdcErpAcc\AdoCon');
             //将ConnectionString写到注册表中
            Reg01.OpenKey('\Software\LdcErpAcc\AdoCon', True);
            Reg01.WriteString('Connection', strConnection);
            adoconnection1.Open;
          end
          else
            Application.Terminate;
        end;
      finally
        Reg01.closekey;
        Reg01.free;
      end;
    end;end.
      

  10.   

    function  Tdm1.LoginToDb(user,pass,servername:string):boolean;
    var
        rtn:boolean;
        conn:string;
    begin
        with dm1.ADOConnection1 do
        begin
            if connected then close;
            conn:='Provider=MSDAORA.1;Password='+pass+';User ID='+user+';Persist Security Info=True;'+'Data Source='+servername;
            adoconnection1.ConnectionString:= conn;
            try
                Open;
                rtn:= true;
            except
                rtn:= false;
            end;
        end;
        result:= rtn;
    end;
      

  11.   

    连接ACCESS
    Constr:='Provider=Microsoft.Jet.OLEDB.4.0;Password="' + 口令 + '";User ID="' + 用户名 + '";Data Source="' + 数据库名 + '";Mode=ReadWrite';连接SQLServer
    constr:='Provider=SQLOLEDB.1;Password="' + 口令
     + '";Persist Security Info=True;User ID="' + 用户名 + '";Initial Catalog="' + 数据库名 + '";Data Source="' + 服务器名 + '"';
      

  12.   

    继上:设定好constr,然后
        with ADOConection do
          begin
           Close;
           ConnectionString:=Constr;
           Open;
          end;
      

  13.   

    下面是我的,使用正常。
    //当主窗体建立时连接数据库,我用的是Access
    procedure Tmainform.FormCreate(Sender: TObject);
    var dbpath,connectstr: String;
    begin
       getdir(0,dbpath);
       dbpath := dbpath + '\table.mdb';//dbpath: Access数据库路径
       connectstr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
       connectstr := connectstr + dbpath;
       connectstr := connectstr + ';Mode=ReadWrite|Share Deny None;Persist Security Info=False';
       AdoQuery.ConnectionString := connectstr;
       //以上代码用于AdoQuery与Access数据库的连接(动态实现)
    end;