2009-04-05 9 views
1

この質問では、私の目的はデータベーステーブルの内容を取得することです。 にdbGridを設定し、接続を閉じます。 次のコードを使用すると、dbgridまたはcomboboxが情報を失います。コンボボックスまたはデータベース接続を閉じた後にdbgridを維持する方法

adoQry := TADOQuery.Create(self); 
adoQry.Connection := adoConn; 
adoQry.SQL.Add(SqlStr); 
adoQry.Prepared := true; 

try 
    adoQry.Active := True; 
except 
    on e: EADOError do 
begin 
    MessageDlg('Error while doing query', mtError, 
       [mbOK], 0); 

    Exit; 
end; 
end; 
for i := 0 to adoQry.RecordCount - 1 do 
begin 
    cmbCnty.Items.Add(adoQry.Fields[1].AsString); 
    adoQry.Next 
end; 

FreeAndNil(adoConn); 
FreeAndNil(adoQry); 

dbGridの場合、私はStringGridを使用しています。それは私のために働きます。 しかし、時にはdbGridを使用したいと思うこともありますが、データベースへの密接な接続でコンテンツを保持する方法がわかりません(もちろん、コンテンツを取得した後) 提案があります。
Chris

答えて

5

TClientDataSetにクエリ結果セットを設定し、TClientDataSetをTDBGridにリンクすることができます。

+0

実際、TClientDatasetがそうであることはまさにそれです。 –

0

私が正しく覚えていれば(私はそれを使いましたが、ここから試すことはできません)、til adoQueryの接続をnilに設定すると、切断されたデータセットのように振る舞いますtクライアントデータセット)。 ただし、データセット(adqQry)を閉じるとデータが消えます。

コメントには、上記のステートメントが間違っていると書かれていました(まだテストしていません)。 しかし、このMicrosoft Knowlegde Baseの記事"How To Create ADO Disconnected Recordsets" http://support.microsoft.com/kb/184397では、同じテクニックを示しています。

同じ技術はまた、物品について、Delphiで"TOP ADO programming TIPS" http://delphi.about.com/od/beginners/l/aa021202a.htm

に記載されていることは、ほとんどのデータセット内のゼロへの接続をsetteingこと、また、データセットを閉じていることが正しいそれ。

+0

接続をnilに設定することは、これを行う正しい方法ではありません。tclientdatasetを推奨どおりに使用してください – Fred

0

ベニーが正しいです。 TAdoQueryの代わりにTAdoDataSetを使用する必要があるかもしれません。 TAdoDatasetsとTClientDatasetsには同様の機能があります。私の理解から、TAdoQueryコンポーネントは、BDEアプリケーションをdbGoに移行するのに役立つように設計されています。

関連する問題