はじめまして。よろしくおねがいします。
Delphi7で開発してます。
TQueryでAccessからデータを取得してCSVデータに取得するプログラムを作っているのですが、サブクエリを使用するとエラーになります。
「この機能は使用できません。」
いくつかのマスタを見て名称を取得したいのですが、使えないのでしょうか?
↑
ごめんなさい、CSVファイルとして出力するプログラムです。
サブクエリーはTQueryのSQLの中で使っていますか?
SQL文にAccseeで定義したサブクエリーは使えないので、
全文を書かないと動かないのではないですか?
どのようなSQL文か上げてみてください。
HOtaさん、ありがとうございます。
SQL文はTQuery.SQL.Addでセットしています。
Accessでサブクエリは定義していません。
SELECT
TNYM, //年月
SPCD, //仕入先コード
(SELECT SRSRN1 FROM SIREMP WHERE SPCD=SRSRCD) AS SRSRN1, //仕入先名
TNNO, //棚番
SCD1, //商品コード
SHSHNM,//商品名
ONUM, //数量
SHHTKK, //本体価格
(SELECT SKKR FROM SKKRT WHERE SBCD=SHNSHC) AS SKKR, //掛率
FROM TINVTL INNER JOIN SYHNMP ON NSHC = SHNSHC
WHERE TNYM = '201005'
こんにちは.Mr.XRAYといいます.
興味があり,ちょっとおききしたいのですが,
その今テストしているプログラムでは,
つまり,CSVテキストファイルに出力するコードは,
サブクエリーを使用しなければうまくいくのでしょうか?
大変失礼しました.
BDEの設定で可能なんですね.
サブクエリーを使用しないで
そのサブクエリー自体をクエリーにする方法はダメですか?
つまり、新たにクエリーを作成して
Delphiからは、上記で作成したクエリーを単純に出力する方法です。
こんにちは.
>TQueryでAccessからデータを取得してCSVデータに取得する
Accessということは,JETデータベースですよね.
以下のような方法も考えられと思いますが.サブクエリも使用可能です.
>いくつかのマスタを見て名称を取得したいのですが
「名称」の意味も分かりませんし(スミマセン),TQueryでサブクエリということなので,
質問の趣旨をよく理解していないレスです.
目的の動作と違っていたらゴメンナさい.
(最近,ハズレが多いからな〜)
02_カンマ区切りテキストファイルへのエクスポート(スキーマ設定なし)
http://mrxray.on.coocan.jp/Delphi/plSamples/623_ADO_mdbExport.htm#02
ちょっと、テーブルの項目がわかりませんが、このサブクエリーなら、そのままInner Joinで抽出出来そうですよ。
もとのままのクエリーで出てくるエラーはどんな内容でしょうか?
テーブルの定義がわかればお答え出来そうです。
皆様、返信が遅れすみませんでした。
Accessだと思っていたのですが、パラドックスというDBでした。
Accessで開いていたのでてっきりAccessだと思っていました。
仕入先名は別のマスタが持っているので副問い合わせで取得したかったのです。
パラドックスというDBでは使えないのでしょうか。。
テーブルや項目が判りませんが、これでいかがですか?
SELECT
A.TNYM, //年月
A.SPCD, //仕入先コード
C.SRSRN1 AS SRSRN1, //仕入先名
A.TNNO, //棚番
A.SCD1, //商品コード
A.SHSHNM,//商品名
A.ONUM, //数量
A.SHHTKK, //本体価格
D.SKKR AS SKKR, //掛率
FROM TINVTL A
INNER JOIN SYHNM B ON B.NSHC = A.SHNSHC
Left Outer JOIN SIREMP C WHERE A.SPCD = C.SRSRCD
Left Outer JOIN SKKRT D WHERE A.SBCD = D.SHNSHC
WHERE A.TNYM = '201005'
HOtaさん、
Left Outer Join の Whereを'On'に変えてできました!
Whereだとエラーだったので・・。
Hotaさん、皆さん本当にありがとうございました。
LEFT OUTER JOINで解決したようですが、パラドックスなら下記の方法で
サブクエリー(もどき)が使えますので、参考までに。
テキストファイルにサブクエリーの内容を記述する。
例えば SUBQUERY.SQL というファイルを作って
SELECT FIELD_A + FIELD_B AS CALC_FIELD FROM TABLE1
と記述し、テーブルがあるフォルダに保存します。
TQueryのSQLに
SELECT MAX(CALC_FIELD) FROM "SUBQUERY.SQL"
と記述するとSUBQUERY.SQLの内容がサブクエリと同じ扱いになります。
ツイート | ![]() |