TADOQueryを使用してAccess のテーブルを絞り込んでリスト化しています。
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT * FROM SampleTable');
SQL.Add('WHERE ((ID IN (''001'', ''002''))');
SQL.Add('AND (sName LIKE 鈴木%))');
SQL.Add('ORDER BY sDate DESC;');
Open;
end;
その絞り込まれたデータを元に更にクエリを使用してグループ化し、レポートに使用したいと思っています。
そもそも、2重でクエリすることは可能なのでしょうか?
色々検索してみましたが、思い通りの処理が見つかりませんでした。
どう検索したら良いものなのでしょうか?
サブクエリーにすれば可能でしょう。
HOtaさん
ちょっと主旨ととは違うんですが、サブクエリにするしかないですかね?
リスト化するのにSQLが最大30行ほどになってしまっていいるので、
出来るなら
(SELECT * FROM ADOQuery1)
みたいな感じで再利用したいのですが、無理なら仕方ないのでサブクエリに
するしかないですけど。
こんにちは,Mr.XRAYです.
もしかしたら,意味を取り違えているかも知れませんが,
>サブクエリにするしかないですかね?
するかしないかではなくサブクエリーだと思いますよ.
>SQLが最大30行ほどになってしまっていいるので、
意味がよく分かりませんが,これはSQL文が長いということでしょうか?
数百行ものSQL文を書くこともありますけど...
>再利用したいのですが
再利用というのは,例えば以下の様なことでしょうか?
以下のコードでは,文字列をAという変数に代入して再利用しています.
SQL文も中身はテキスト,つまり文字列ですから,再利用できると思いますが...
何か問題でも?
// 文字列Aを再利用する例
procedure TForm1.Button1Click(Sender: TObject);
var
A, B, C : String;
begin
A := '東京都';
B := 'ABC' + A;
C := 'EFG' + A;
end;
Mr.XRAYさん
こんにちは。
分かりずらいですよねw
まず再利用とはそういう意味ではなく、
例えば・・・
クエリー結果を別名のテーブルとして使用する事が可能か?
と言った方がいいでしょか。
SQLが長くなる事は全然問題ではないのですが、単に
ADOQuery1 の絞り込み結果を使って
ADOQuery2 、 ADOQuery3 ・・・・
と出来ないかな?と思っただけです。
ADOQuery2のサブクエリーとしてADOQuery1と同じSQL文を、
ADOQuery3のサブクエリーとしてADOQuery1と同じSQL文を、
とするしか方法がないかな。と言う事です。
ますます意味分からないですよねw
意図は解りますが、sqlが実行されるのが
データベース側なので、ADOQuery1 の絞り込み結果を
DelphiのTDataSetに格納してから
TdataSetに対して更に、絞り込みを行う感じだと思います。
SQL一発なら、サブクエリーになります。
nobukoshi802さん
非常に分かりやすい説明ありがとうございます。
サブクエリーとTDataSetについて詳しく調べてみます。
ツイート | ![]() |