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を押すと、[評価/変更]ダイアログが表示されます。入力ボックス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 に答える