2011-07-07 13 views
3

最後にtryを使用してデータベース接続(およびエラー)を処理する人を教えてもらえますか? ベストプラクティスは何ですか? 様々なスタイルが見えますが、何が最善のアプローチだろうと思います。 テーブルをTRYブロックに入れるか、またはメイン接続 文字列にする必要がありますか? 私は通常私のデータベースに置くので、(絶対的なデータベース、アクセスを...)私のexeファイルフォルダ に、私はこの上で最高のアプローチに疑問を抱いていた... またはファイルのための最初のチェックのような..."try finally"を使用したデータベース接続

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; 

? ??

答えて

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'); 
1

は、私がアプリケーションを終了 - あなたは、具体的なアーキテクチャを構築しない限り、多くのデータベースにアクセスせずに行うことができないことこれを処理します。

これ以外の場合は、デフォルトのアプリケーションエラーハンドラがエラーを処理するようにしてください。これは、とにかく予期しないものであるためです。

+0

データベース接続パラメータを変更するには、「設定」ダイアログにアクセスしたいのですか? –

+0

@ldsandon、私の経験上、ほとんどのアプリケーションはデータベース接続を一度セットアップし、基本的にそれを変更することはありません。私はコーポレートタイプのソフトウェアだけを開発するので、これは他のタイプのソフトウェアでは異なるかもしれません。 – Misha

+1

まあ、一部の企業でもデータベースを別のサーバーに移動することがあります:) –