请高手帮帮忙怎样实现动态连接数据库(access)
我要的是有设置路径
在程序运行时查找(access)库

解决方案 »

  1.   

    转帖:
    procedure TfrmMain.ConnectDB;
    var
      ConnStr,DBPath:String;        //保存连接字符串和数据库路径
    begin
      {ExtractFilePath函数从一个完整的文件名中分离出路径,以'\'结束,
       Application.ExeName得到程序执行文件本身的文件名,
       这里要求数据库文件(UserInfo.mdb)必须放在程序同一个目录,
       否则就连接不上了,呵呵!}  try
        DBPath:=ExtractFilePath(Application.ExeName)+'UserInfo.mdb';
        ConnStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
            DBPath+';Persist Security Info=False';
        ADOConnection1.Close; //要改变它的属性前要关闭连接!
        ADOConnection1.ConnectionString:=ConnStr;     //指定连接串
        ADOconnection1.LoginPrompt:=False;  //不显示默认的登录对话框
        ADOConnection1.Open   //打开连接
      except
        on E:Exception do
        begin
          ShowMessage('出错!'+e.Message);  //显示出错信息
          frmMain.Close;    //退出程序算了,数据库都连不上还有什么用!^_^
        end;
      end;
    end;procedure TfrmMain.FormCreate(Sender: TObject);
    begin
      ConnectDB;    //连接数据库
    end;
      

  2.   

    如果是采用本地的ACCESS,应该在ODBC库中设置系统DNS,那里可以设置ACCESS的路径。
      

  3.   

    with AdoConnection1 do
      begin
        Connected:=false;
        Connectionstring := '';
        ConnectionString :=' Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= '
                                   + DataBaseName
                                   + ' ;Data Source='
                                   + ServerName;
        Connected := true;  end;
    Databasename是你的数据库名称
    Servername是你的服务器名称
      

  4.   

    这是连接Sql server2000的
    连接Access的是
    Path:=ExtractFilePath(ParamStr(0));
      if not FileExists(Path+'Data\Pack.Dll') then
        begin
          Msg:='数据库文件"Pack.Dll"没有找到!'+#10#13+
               '请查找到该文件以"Pack.Dll"为文件名放置到目录:'+#10#13+
               Path+'Data\ 中。';
          Application.MessageBox(Pchar(Msg),'错误',MB_OK+MB_ICONERROR);
          Application.Terminate;
        end;
      AdoCon.Connected:=False;
      ConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Path+'Data\Pack.Dll;Persist Security Info=True';
      AdoCon.ConnectionString:=ConStr;
      try
        AdoCon.Connected:=True;
      except
        Application.MessageBox('数据库连接错误,请重试!','错误',MB_OK+MB_ICONERROR);
        Application.Terminate;
      end;
      

  5.   

    sigh..
    来晚了就是晚了..进最后的努力吧...上面的代码是正确的..
    我只能给你写思路..
    首先得到你的软件所在的路径..Path:=ExtractFilePath(ParamStr(0));
    然后动态打开ado..其数据库文件便是path+你的数据库名.也可以是相对与你主程序的路径,比如你的主程序在目录"c:\test\"目录下.数据是"c:\test\data\db.mdb"..
    那么.就path+'data\db.mdb'..data前面不要加\..因为.path已经在后面加了\了...
      

  6.   

    简单procedure TfrmMain.ADOConnection1BeforeConnect(Sender: TObject);
    begin
      ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
        + stFileName.Caption + ';Persist Security Info=False';
    end;
      

  7.   

    procedure TfrmLogin.FormCreate(Sender: TObject);
    beginif fileexists(extractfilepath(application.exename)+'yh.mdb') then
    begin
    //连接数据库字串
    connstr:='Provider=Microsoft.Jet.OLEDB.4.0;data Source='+extractfilepath(application.exename)+'yh.mdb';
    //建立Connection
    conn:=CreateOleObject('ADODB.Connection');
    //打开连接
    conn.open(connstr);
    rs:=CreateOleObject('ADODB.Recordset');
    rs.open('select * from tuser order by userid',conn,1,1);还可以动态创建一个Q控件,再连,
      

  8.   

    这个我做过: 
        getdir(0,path) ;
        g_path:=path+'\db1.mdb';
        ADOConnection1.close;
    ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+g_path+''';Persist Security Info=False';
        ADOConnection1.Open ;
        ADOConnection1.Connected :=true;
      

  9.   

    动态连接用上面的方法都可以,
    但是有一种情说,说是不用 Microsoft.Jet.OLEDB.4.0 时,你怎么办?
    即你要用不同的数据库引擎时怎么办?有以下的方法可以很好的实现,
    原理:
        在我们连数据库时,系统会有一个向导,可以选择数据库引擎,数据库。
    我们也可以用他的方法,从VCL 库中我们知道,在连接时,他会调用一个方法:PromptDataSource,该方法要求有一个窗口句柄。我们也可以用它的方法:
    实现如下:
    必须要包含单元:ADOConEd,IniFiles代码:
    procedure TfrmMain.FormCreate(Sender: TObject);
    var
      ConnectString: String;
      ConfigFile: TIniFile;
    begin
      ConfigFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Config.ini');
      
      If Not FileExists(ExtractFilePath(Application.ExeName) + 'Config.ini') Then
      Begin
        ShowMessage('数据库没有连接,请先连接数据库');              
        ConnectString := PromptDataSource(Handle, ConnectString);
        ConfigFile.WriteString('ConnectString', 'CurConnectString', ConnectString);
      End
      Else
      Begin
        ConnectString := ConfigFile.ReadString('ConnectString', 'CurConnectString', '');
      End;  frmDM.ADOConnection1.ConnectionString := ConnectString;
      Try
        frmDM.ADOConnection1.Open;
      Except
        ShowMessage('数据库连接错误,请检查配置文件 Config.ini !');
        DeleteFile(ExtractFilePath(Application.ExeName) + 'Config.ini');
        Application.Terminate;
      End;