第 5 章: データセットデータの背後にある...
データの最初のセクションのステータス
Delphi と ADO を使用してデータベース アプリケーションを開発する場合、作業のほとんどはデータセット コンポーネントのヘルプ ドキュメントの学習に費やされます。 。 ADO ベースのプログラムを作成するために、Delphi はいくつかのデータ セット コンポーネント (TAdoTable、TAdoQuery およびその他のコンポーネント) を提供します。これらは、データベース テーブルまたはクエリからデータを取得、提示、および変更するために使用されます。
このチュートリアルの第 5 章では、対象となるデータセット コンポーネントのほとんどのプロパティ、イベント、メソッドをいくつか紹介することで、データの表示、参照、読み取りの方法を実際に見ていきます。
選択、設定、接続、取得
第 5 章まで進んだので、データベース フォームの作成に必要な手順は理解できたはずです。第 4 章では、簡単なデータ参照フォームを手動で作成しました。この章では、これを使用して議論を続けます。
これまで、1 つの (ADO) データセット コンポーネント、TAdoTable のみを使用してきました。 TADOQuery と TADODataSet (データセット コンポーネントとして) は、同じメソッドとイベントに対して同じ設定を使用することを理解することが重要です。
オープンセサミ; クローズセサミ (オープンセサミ; クローズセサミ)
Delphi データベース開発の非常に重要な機能の 1 つは、Delphi を使用するとプログラム設計中にデータを処理できることです。前の章で、デザイン時にデータへのアクティブな接続を開くために Active プロパティを使用したことを思い出してください。
テーブルのデータの処理を開始する前に、プログラムがまずデータ セットを開く必要があることを理解するのは難しくありません。 Delphi には、この機能を実現する 2 つの方法があります。 1 つ目は、これまで見てきたように、Active プロパティを設計時または実行時に True に設定できることです。2 つ目は、実行時に Open メソッドを呼び出すことができることです。たとえば、次のコードをフォームの OnCreate イベント ハンドラーに追加して、ADOTable コンポーネントのデータを取得します。
ADOTable1.Open;
注: 各 ADO データ セットは、独自の ConnectionString プロパティまたは ADOConnection コンポーネント (およびその ConnectionString) を通じてデータベース データにアクセスできます。 ADOTable1 コンポーネントが ADOConnection1 コンポーネントに接続されている場合 (この方法が推奨されます)、ADOTable を開くと、対応する ADOConnection コンポーネントがアクティブになります。 ADOConnection には、OnWillConnect と OnConnectComplete という 2 つの実行イベントが用意されています。
Open メソッドは、Active プロパティを True に設定し、接続をアクティブ化します。接続が完了したら、Active プロパティを False に設定するか、Close メソッドを呼び出して切断します。通常、フォームの OnClose イベント ハンドラーに Close メソッドの呼び出しを置きます。
ADOTable1.Close;
先に進む前に、データセットのメソッドとプロパティの操作はデータの現在の状態の知識に依存していることを理解しておくことが重要です。簡単に言うと、データセットの State プロパティによって、いつでもデータセットに対してどのようなアクションを実行できるか、または実行できないかが決まります。
お元気ですか?
データ セットが閉じられている場合、データの状態には非アクティブな接続が表示されます。接続が閉じられると、データに対して操作、動作、メソッドを実行できなくなります。初めてデータセットへの接続を開いたとき、データセットはデフォルトの参照状態になっています。 「自分の」データの状態を常に把握しておく必要があります。たとえば、データセットを DBGrid に接続すると、ユーザーは基になるデータセット (またはレコードセット) を表示できますが、一部のデータを変更したい場合は、状態を編集に設定する必要があります。
プログラムがデータを処理するときは、データセットの状態が常に変化していることを理解することが重要です。たとえば、DBGrid でデータを参照しているとき (参照状態)、ユーザーがレコードの編集を開始すると、状態は自動的に編集に変わります。もちろん、データ視覚化コントロール (DBGrid、DBEdit) の AutoEdit プロパティが True に設定されている場合、これがデフォルトの動作になります。
しかし、どうやってステータスを取得するのでしょうか? ADOTable (または他の DataSet コンポーネント) には、状態の変更を処理するトリガーがありません。
それでは、見てみましょう。各 DataSet コンポーネントについて、通常は DataSource コンポーネントを使用して、1 つ以上のデータ視覚化コントロールへの接続をレンダリングします。それでおしまい。
各データ ソース コンポーネントには OnStateChange イベントがあり、基になるデータ セットの状態が変化するたびにトリガーされます。次のコードを OnStateChange イベント ハンドラーに配置して、フォームのタイトルを使用して ADOTable1 データ セット コンポーネントの現在の状態を表示します。
PROcedure TForm1.DataSource1StateChange(送信者: TObject);
var ds:文字列;
始める
case ADOTable1.State of
dsInactive: ds:='クローズ';
dsBrowse: ds:='ブラウズ';
dsEdit: ds:='編集中';
dsInsert: ds:='新しいレコードを挿入';
それ以外
ds:='その他の州'
終わり;
Caption:='ADOTable1 状態: ' + ds;
終わり;