DBGridのTQuery.SQLのSQLについて、
このSQLにフィールドを連結したものを表示させたいのですが、
演算子のエラーと表示されます
ex. SELECT TbAAA & TbBBB & TbCCC As ABC
TbAAA,TbBBB,TbCCC : テーブル名
「&」は、いけないみたいなのですが、この代わりになるものは何なのでしょうか?
「||」です。
もしくは、計算項目を作りOnCulcイベントで作る方法もあります。
それと,文字列以外の連結では,CASTで変換といったところでしょうか.
ex. SELECT TbAAA & TbBBB & TbCCC As ABC
↑これだとAccess上では起動するんです
Basser様
「||」は駄目でした
Accessのことは知らないんですけど、
> SELECT TbAAA & TbBBB & TbCCC As ABC
これが、実行させようとしているSQL文のすべてなのでしょうか?
たいてい、SELECT ..... FROM ..... ってなるような気がするのですが。。。
あと、
> TbAAA,TbBBB,TbCCC : テーブル名
って文章がなんかひっかかるんですけど。
どんなもんなんでしょ!?
通りすがり様
SQL全文は以下の様に記載しています
******************************************************************
TQuery.SQL =
SELECT
TbH.ACode,(略)…,
TbA.AName & TbB.BName & TbCName & … & TbGName As ABCDEFGName
FROM ((((((TbHist LEFT JOIN TbA ON TbH.ACode = TbA.ACode)
LEFT JOIN TbB ON TbH.BCode = TbB.BCode)
LEFT JOIN TbC ON TbH.CCode = TbC.CCode)
LEFT JOIN TbD ON TbH.DCode = TbD.DCode)
LEFT JOIN TbE ON TbH.ECode = TbE.ECode)
LEFT JOIN TbF ON TbH.FCode = TbF.FCode)
LEFT JOIN TbG ON TbH.GCode = TbG.GCode
**************************************************************
> って文章がなんかひっかかるんですけど。
仮のテーブル名です、 実際は違いますよ
紛らわしくてすいませんでした
AccessではなくParadoxでなんの役にも立たず申し訳ありませんが、
試しにやってみました。
TbHist
| ACode | BCode |
+-------+-------+
| 10 | 11 |
| 11 | 10 |
TbA
| ACode | AName |
+-------+-------+
| 10 | A10 |
| 11 | A11 |
TbB
| BCode | BName |
+-------+-------+
| 10 | B10 |
| 11 | B11 |
SELECT
TbHist.ACode, TbHist.BCode,
TbA.AName || TbB.BName AS ABName
FROM
((TbHist
LEFT JOIN TbA ON TbHist.ACode=TbA.ACode)
LEFT JOIN TbB ON TbHist.BCode=TbB.BCode)
結果は
| ACode | BCode | ABName |
+-------+-------+--------+
| 10 | 11 | A10B11 |
| 11 | 10 | A11B10 |
となります。
> 仮のテーブル名です、 実際は違いますよ
> 紛らわしくてすいませんでした
テーブルそのものを'&'でつないでいるように見えたものですから。
> SELECT
> TbHist.ACode, TbHist.BCode,
> TbA.AName || TbB.BName AS ABName
Basser様のおっしゃる通り「||」は使えるんですね
Access97、Delphi5でもエラーが出たのですけどね…
他が悪かったかもしれないのでもう一度チャレンジしてみます
すみません。安易に答えてしまいました。
データベースはAccessなのでしょうか?
そうであれば「&」で結合できるようですが...
>FROM ((((((TbHist LEFT JOIN TbA ON TbH.ACode = TbA.ACode)
あとTbHistの相関名がTbHだと思うのですが、
上記ではエラーとなるのでは?
Basser様
> あとTbHistの相関名がTbHだと思うのですが、
あ、うっかり…その通りでした
> データベースはAccessなのでしょうか?
Access97のハズです
先輩のPC(Windows98)だと「&」で結合できてるみたいなのですけど…
私のはWindows2000です
ディスクにころがっていた NWIND.mdb で試してみました。
SELECT Address || City AS Place FROM Cutomers
とすると、「クエリー式 'Address || City' の垂直バーの使い方が無効です。」のエラーになります。
SELECT Address & City AS Place FROM Customers
とすると、正しく結果が出ます。
D6/W2Kです。
あ、タイプミスしました。
SELECT Address || City AS Place FROM Cutomers
でなく
SELECT Address || City AS Place FROM Customers
でした。
やはりOSの違いかなにかなのでしょうね
そこで(許されるのなら)ついでに質問しますが、
TQuery.SQL文の中身のWHERE節をフォーム上にあるTLabelなどで条件文を作成したいのですが、これもエラーが出ます
これはどういったエラーなのでしょうか?
EX.
WHERE ACode = :ACode
とACodeは変数扱いできるのですが、
WHERE ACode = ****.Caption
とはできませんよね?
>EX.
>WHERE ACode = :ACode
>とACodeは変数扱いできるのですが、
>WHERE ACode = ****.Caption
>とはできませんよね?
ACodeの型が何かわからないのですが、
文字列型(テキスト型)として考えると、
Query1.SQL.Add(
'WHERE ACode = ' + AnsiQuotedStr(Lable1.Caption, '''')
);
のように引用符が必要となります。そのあたりはどうなんでしょうか?
> WHERE ACode = :ACode
ACode : 日付時刻型(TDateTime)ですね
「AnsiQuotedStr関数」を使ってみます、初めて見ましたっ
> WHERE ACode = ****.Caption
ACode : TDateTimeと****.Captionではもともと型が違いますね(笑
>ACode : TDateTimeと****.Captionではもともと型が違いますね(笑
TLabelのCaptionに適切な日付書式が用いられていれば可能ですが、
日付フォーマットを気にしなくてはいけないので、
パラメータを用いたほうが無難だと思います。
「ParamByName('(パラメータ名)').AsString」という関数を使えという事なのでしょうか
因みにエラーの内容は、
「QryHist(TQuery名):パラメータ'PostDt(パラメータ名?)'が見つかりません」というエラーなのですけど…
いい加減この質問も面倒ですよね…
素人過ぎてすいません…
>因みにエラーの内容は、
>「QryHist(TQuery名):パラメータ'PostDt(パラメータ名?)'が見つかりません」>というエラーなのですけど…
パラメータの設定はどのようにしているのでしょうか?
・ParamByNameで直接指定
・TQueryのDatasourceプロパティに設定されたデータセットの値を用いる
等が、今浮かぶのですが、考えられることは
前者なら、問い合わせ文の中に PostDt というパラメータが存在しない。
後者なら、Datasourceプロパティに設定されたデータセットがアクティブでない又はPostDtというフィールドが存在しないと思われます。
QryHist(TQuery)をダブルクリックした時に表示される小ウィンドウには'PostDt'をしっかりと定義してます。
QryHist.DataSource = ''
となってますが、これがいけないのでしょうか…(いけないのでしょうね)
DataSorceは指定してください。
TQueryのSQLに
Select hoge1,hoge2
From TblHoge
WHERE hoge3 = :hogehoge
と書いて、パラメターで文字列型と設定しておくと、
ParamByName('hogehoge').asString = 'aaaaa';
Open
で選択できます。
HOta様
「hogehoge」はTQueryを右クリック(かダブルクリック)で表示される「項目の設定」で定義するのですよね?
「'DBQry:項目 'hogehoge'が見つかりません'」というエラーが出てしまいます
因みにこの「DBQry」というのは今まで使用しているのと違うTQueryなのですけど…(一応DBQryにも同じ様に定義しました)
何とか解決できました(でもまた質問してしまうかも)
HOta様、Basser様、通りすがり様、Mr.XRAY様
本当にありがとうございました
ツイート | ![]() |