我用ado连接了一个access 的数据库编译后的程序能到处运行(在任何目录下),但是把程序和数据库一起移动的话就是不能运行。(ado 连接的时候不是用的绝对路径吗,用相对路径可以吗。)谁能告诉我应怎样编写程序。

解决方案 »

  1.   

    在连接字符串中找到你的Access文件名,把文件名前面的路径去掉,这样就可以了,
    或者用odbc连接也没有问题。
      

  2.   

    用相对路径  这样最好你打开程序源代码  pas文件把里面的绝对路径改成相对路径就可以了用ODBC有些麻烦
      

  3.   

    当然可以,
    Dbconn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
      ExtractFilePath(Application.ExeName)+'中心站D.mdb'+
      ';Persist Security Info=False';
      try
      Dbconn.Open;
      except
      showmessage('打开[中心站D.mdb]失败');
      end;
      

  4.   

    出现问题的原因:
    数据库采用静态的连接。
    所以一动数据库程序就找不到数据库,出错。
    可以用以下的方法动态的连接数据库:
    uses ADOConEd;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;
    end;在以上的连接中程序把连接字符串存在一个配置文件中,
    以后每次连接时直接读取连接字符串。
    如果读取的字符串不能接,
    则出现数据库连接对话框,
    并改写配置文件。
      

  5.   

    上面还要使用一个单元:
    IniFiles.(用于生成配置文件)