0

如何使用 IniFile 打开本地或远程数据库。类似下面的东西。

   vBanco : String; 
   IniFileName : TIniFile; 
begin 
    IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName); 
    Try
        if FileExists (remote+'db\ado.mdb') then
        begin

               vBanco := Trim(IniFileName.ReadString('acesso','BancoRemto','')); 
               Dirlocal := Trim(IniFileName.ReadString('acesso','PastasRemto','')); 
               frmPrincipal.Edit1.text := Dirlocal; 
               Dirtrabalho := (ExtractFilePath(Application.ExeName));

               Conection.ConnectionString := vBanco;
        end
        else
        begin 
           Try 
              vBanco := Trim(IniFileName.ReadString('acesso','banco','')); 
              Dirlocal := Trim(IniFileName.ReadString('acesso','PastasLocais','')); 
              frmPrincipal.Edit1.text := Dirlocal; 
              Dirtrabalho := (ExtractFilePath(Application.ExeName)); 
           Finally 
           end;
        end; 
    Finally
       IniFileName.Free;
    end;
end;
4

3 回答 3

1

似乎您的代码是正确的,如果遇到问题,请确保 INI 连接字符串的值有效。获得有效连接字符串的一个好方法是在设计时设置连接,然后将其复制并粘贴到您的配置文件中。

于 2010-06-07T22:28:56.977 回答
0

如果您的问题与 FileExists 相关,那么您可以通过以下方式对其进行追踪。

在行上放一个断点if FileExists。当它中断到调试器时,按 CTRL-F7,这将打开 Evaluate/Modify 对话框。在输入remote+'db\ado.mdb'框中输入,看看它给出了什么。它很可能会给你一个错误的文件名。

例如,如果remote不以反斜杠结尾,则将产生无效路径。您可以使用 IncludeTrailingPathDelimiter 函数解决此问题。如果没有看到更多代码,很难确定,但根据我的经验,这可能就是正在发生的事情。

于 2010-06-08T00:07:47.780 回答
0

我发现了我的错误。我不应该根据全局变量检查目录中是否存在名为“ado.mdb”的文件remote,而是应该在由我从 INI 文件中读取的值确定的目录中查找名为“base_dados.mdb”的文件.

procedure TfrmDados.ConectionBeforeConnect(Sender: TObject);
const
  FileName = 'config.ini';
var
  vBanco : String;
  IniFileName : TIniFile;
  LBasedados : String;
begin
  IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName);

  vBanco := Trim(IniFileName.ReadString('acesso','BDtrabalho',''));
  Dirlocal := Trim(IniFileName.ReadString('acesso','Pastrabalho',''));
  LBasedados := Dirlocal+'db\base_dados.mdb';
  frmPrincipal.Edit1.text := Dirlocal;
  Dirtrabalho := (ExtractFilePath(Application.ExeName));
  if FileExists(LBasedados) then
    Conection.ConnectionString := vBanco
  else
  begin
    Application.MessageBox('Bade dados do servidor não encontrada vai trabalhar neste Computador!','Ligação Remota FALHOU');
    vBanco := Trim(IniFileName.ReadString('acesso','BD_local',''));
    Dirlocal := Trim(IniFileName.ReadString('acesso','Pasta_local',''));
    frmPrincipal.Edit1.text := Dirlocal;
    Dirtrabalho := (ExtractFilePath(Application.ExeName));
    Conection.ConnectionString := vBanco;
  end;

  IniFileName.Free;
end;
于 2010-06-08T21:46:05.963 回答