クエリの指定

提供: RAD Studio
移動先: 案内検索

クエリタイプ データセットの使用 への移動


真のクエリタイプ データセットの場合は、SQL プロパティを使用して、データセットで実行される SQL 文を指定します。TADODataSetTSQLDataSet、クライアント データセットなどの一部のデータセットでは、CommandText プロパティを使用してそれを行います。

レコードを返すクエリのほとんどは SELECT コマンドです。通常、この種のクエリでは、選択するフィールド、それらのフィールドが存在するテーブル、選択するレコードを限定する条件、結果として得られるデータセットの順序を明示します。次に例を示します。

SELECT CustNo, OrderNo, SaleDate
FROM Orders
WHERE CustNo = 1225
ORDER BY SaleDate

レコードを返さないクエリとしては、データ定義言語(DDL)文や SELECT 文以外のデータ操作言語(DML)文を使用する文があります(たとえば、INSERT、DELETE、UPDATE、CREATE INDEX、ALTER TABLE の各コマンドではレコードを返しません)。コマンドで使用される言語はサーバー固有ですが、通常は、SQL 言語の SQL-92 標準に準拠しています。

実行する SQL コマンドは、使用しているサーバーに受け入れられるものでなければなりません。データセットでは SQL を評価せず、実行もしません。ただ、コマンドをサーバーに渡して実行させるだけです。ほとんどの場合、その SQL コマンドは単一の完全な SQL 文でなければなりません。ただし、SQL 文は必要なだけ複雑にすることができます(たとえば、AND や OR などのいくつかの論理演算子をネストして使用した WHERE 句を含んでいる SELECT 文など)。一部のサーバーでは、複数の文を使用できる "バッチ" 構文もサポートしています。サーバーでそのような構文をサポートしている場合は、クエリを指定する際に複数の文を入力できます。

クエリで使用される SQL 文は、パラメータなしの場合も、置換可能なパラメータが含まれている場合もあります。パラメータを使用するクエリは、パラメータ化されたクエリと呼ばれます。パラメータ化されたクエリを使用する場合は、パラメータに割り当てられる実際の値をクエリに挿入してから、クエリを実行します。パラメータ化されたクエリを使用すると、SQL 文を変更しなくても、ユーザーのデータ表示やデータ アクセスを実行時にその場で変更できるので、柔軟性が非常に高くなります。パラメータ化されたクエリの詳細については、「クエリでのパラメータの使用」を参照してください。

SQL プロパティを使ったクエリの指定

真のクエリタイプ データセット(TQuery、TADOQuery、TSQLQuery、 TIBQuery のいずれか)を使用する場合は、クエリを SQL プロパティに割り当てます。SQL プロパティは TStrings オブジェクトです。この TStrings オブジェクトに含まれている個々の文字列は、クエリの個々の行を表しています。複数行を使用しても、サーバー上でのクエリの実行には影響はありませんが、文を論理的な単位に分割すれば、クエリの変更やデバッグが容易になります。

MyQuery.Close;
MyQuery.SQL.Clear;
MyQuery.SQL.Add('SELECT CustNo, OrderNO, SaleDate');
MyQuery.SQL.Add(' FROM Orders');
MyQuery.SQL.Add('ORDER BY SaleDate');
MyQuery.Open;
MyQuery->Close();
MyQuery->SQL->Clear();
MyQuery->SQL->Add("SELECT CustNo, OrderNO, SaleDate");
MyQuery->SQL->Add("FROM Orders");
MyQuery->SQL->Add("ORDER BY SaleDate");
MyQuery->Open();

次のコードでは、既存の SQL 文の中の 1 行だけを変更する場合の例を示しています。この場合、SQL 文の 3 行目に ORDER BY 句が既に存在しています。これは、SQL プロパティを通じてインデックス 2 で参照されています。

MyQuery.SQL[2] := 'ORDER BY OrderNo';
MyQuery->SQL->Strings[2] = "ORDER BY OrderNO";

メモ: SQL プロパティを指定または変更するときは、データセットを閉じる必要があります。

設計時には、文字列リスト エディタを使用してクエリを指定します。[オブジェクト インスペクタ]SQL プロパティの参照([...])ボタンをクリックすると、文字列リスト エディタが表示されます。

メモ: Delphi のバージョンによっては、TQuery を使用している場合、SQL ビルダを利用して、データベース内のテーブルやフィールドの表示に基づいてクエリを作成することもできます。SQL ビルダを使用するには、クエリ コンポーネントを選択し、それを右クリックしてコンテキスト メニューから[SQL ビルダ]を選択します。SQL ビルダの使用方法については、SQL ビルダを起動し、そのオンライン ヘルプを参照してください。

SQL プロパティは TStrings オブジェクトなので、TStrings.LoadFromFile メソッドを呼び出すことにより、クエリのテキストをファイルから読み込むことができます。

MyQuery.SQL.LoadFromFile('custquery.sql');
MyQuery->SQL->LoadFromFile("custquery.sql");

SQL プロパティの Assign メソッドを使用して、文字列リスト オブジェクトの内容を SQL プロパティにコピーすることもできます。Assign メソッドでは、新しい文をコピーする前に、SQL プロパティの現在の内容を自動的にクリアします。

MyQuery.SQL.Assign(Memo1.Lines);
MyQuery->SQL->Assign(Memo1->Lines);

CommandText プロパティを使ったクエリの指定

TADODataSetTSQLDataSet、クライアント データセットのいずれかを使用する場合は、クエリ文のテキストを CommandText プロパティに割り当てます。

MyQuery.CommandText := 'SELECT CustName, Address FROM Customer';
MyQuery->CommandText = "SELECT CustName, Address FROM Customer";

設計時には、クエリを直接[オブジェクト インスペクタ]に入力できます。あるいは、データセットとデータベースとの接続が既にアクティブになっている場合は、CommandText プロパティの参照([...])ボタンをクリックして、コマンド テキスト エディタを表示できます。コマンド テキスト エディタでは、使用可能なテーブルとそれらのテーブル内のフィールドが一覧表示され、クエリを作成しやすくなっています。

関連項目