TADOQueryの絞り込まれたレコードを使用して再絞り込み

解決


上海ケルベロス  2011-03-08 18:38:44  No: 40200

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  2011-03-08 19:13:44  No: 40201

サブクエリーにすれば可能でしょう。


上海ケルベロス  2011-03-08 20:32:49  No: 40202

HOtaさん
ちょっと主旨ととは違うんですが、サブクエリにするしかないですかね?
リスト化するのにSQLが最大30行ほどになってしまっていいるので、
出来るなら
(SELECT * FROM ADOQuery1)
みたいな感じで再利用したいのですが、無理なら仕方ないのでサブクエリに
するしかないですけど。


Mr.XRAY  2011-03-08 23:31:37  No: 40203

こんにちは,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;


上海ケルベロス  2011-03-09 02:12:52  No: 40204

Mr.XRAYさん
こんにちは。
分かりずらいですよねw

まず再利用とはそういう意味ではなく、
例えば・・・
クエリー結果を別名のテーブルとして使用する事が可能か?
と言った方がいいでしょか。

SQLが長くなる事は全然問題ではないのですが、単に
ADOQuery1 の絞り込み結果を使って
ADOQuery2 、  ADOQuery3 ・・・・
と出来ないかな?と思っただけです。
ADOQuery2のサブクエリーとしてADOQuery1と同じSQL文を、
ADOQuery3のサブクエリーとしてADOQuery1と同じSQL文を、
とするしか方法がないかな。と言う事です。
ますます意味分からないですよねw


nobukoshi802  2011-03-09 21:42:27  No: 40205

意図は解りますが、sqlが実行されるのが
データベース側なので、ADOQuery1 の絞り込み結果を
DelphiのTDataSetに格納してから
TdataSetに対して更に、絞り込みを行う感じだと思います。
SQL一発なら、サブクエリーになります。


上海ケルベロス  2011-03-09 21:58:03  No: 40206

nobukoshi802さん
非常に分かりやすい説明ありがとうございます。
サブクエリーとTDataSetについて詳しく調べてみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加