3

誰かがtryfinallyを使用してデータベース接続(およびエラー)を処理する方法を教えてもらえますか?ベストプラクティスは何でしょうか?いろいろなスタイルを見てきましたが、どうしたらいいのかしら。テーブルのオープニングはTRYブロックに入れるべきですか、それともメインの接続文字列だけに入れるべきですか?私は通常自分のデータベース(絶対データベース、アクセス..)をexeフォルダーに置くので、これに対する最善のアプローチについて疑問に思っていました...または最初に次のようなファイルを確認してください...

if (FileExists(sDatabasePath)) then begin
    ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sDatabasePath+';Persist Security Info=False';
    try
        ADOConnection1.Connected:=True;
        ADOTable1.Open;
    except
        ShowMessage ('cant access the database !');
    end;
end;

???

4

2 に答える 2

2

コメント:

  • 基本的にあなたのShowMessage場合のように、例外を飲み込まないでください。プロシージャを呼び出すコードは、何か問題が発生したことを知る方法がありません。エラーを修正できる場合にのみエラーを処理するか、ユーザーに表示されるアプリケーションのエラー ハンドラーをバブルアップさせます。
  • コードの動作方法によっては、データベースへの接続を で保護してtry-finally、ジョブが完了したら切断されるようにすることができます。私はそうしません。通常、アプリケーションの存続期間中、接続を開いたままにします。
  • で何をするかによっては、他のブロックADOTable1で使用し終わったら、確実に閉じたいと思うかもしれません。try-finally私は通常、Db 対応の GUI コントロールを使用しておらず、コントロールが苦手なので、そうしています。トランザクションも手動で処理します (トランザクションの開始 / コミット / ロールバック)
  • エラーを無視しないでください。データベースが存在しない (つまりFileExists()、false を返す) 場合、プロシージャを呼び出すコードもユーザーも何も知りません。

コードを書き直す方法は次のとおりです。

if (FileExists(sDatabasePath)) then 
  begin
      ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sDatabasePath+';Persist Security Info=False';
      ADOConnection1.Connected:=True;
      try
        ADOTable1.Open;
        try
          // Do non-GUI database stuff here.
        finally ADOTabel1.Close;
        end;
      finally ADOConnection1.Connected := False;
      end;
  end
else
  raise Exception.Create('Database file not found');
于 2011-07-07T11:30:51.487 に答える
1

データベースを開くことができない場合は、アプリケーションを終了します。これを処理するアーキテクチャを特別に構築しない限り、データベースにアクセスせずにできることはほとんどありません。

これ以外は、とにかくかなり予期しないことになるので、デフォルトのアプリケーションエラーハンドラにエラーを処理させてください。

于 2011-07-07T11:34:34.467 に答える