4

ファイル Journal.db に対する次の TQuery の結果を TDBGrid に入力しようとしています。

select * from Journal
where  Journal.where = "RainPump"

両方試しましJournal."Where"Journal.[Where]がダメでした。

私も試しましselect Journal.[Where] as "Location"た:同じ結果で。

Journal.db はサードパーティによって作成されたファイルで、フィールド名を変更できません。

問題は、私が興味を持っているフィールドが「where」と呼ばれ、当然のことながら上記のエラーが発生することです。BDE を (おそらく) 爆発させずにこのフィールドを参照するにはどうすればよいですか?

4

8 に答える 8

4

ああ、私は再び Delphi を愛しています...回避策を見つけました。TQuery コンポーネントには Filter プロパティがあります :-)
クエリから "Where=" where 句を省略しましたが、他のすべての「and」条件はそのままにしています。
Filter プロパティを「Where = 'RainPump'」に設定しました。
Filtered プロパティを True に設定すると、生活が再び良好になります。

この古い技術を使ってこれを行うためのよりスマートな方法があるかどうかはまだ疑問に思っていますが、それが愚かで機能する場合、それは愚かではありません.

于 2008-09-23T13:28:19.823 に答える
3

このスレッドを読んでいる人は、BDE SQL エンジンがクエリを処理できないという印象を受けるのではないかと心配しています。

select * from Journal where Journal."Where" = "RainPump"

その周りを不必要に迂回して時間を無駄にします。

実際、この構造はうまく機能します。"Where" を引用符で囲むと、BDE がそれをキーワードとして解釈するのを防ぎます。

Baldric の特定の状況で何が問題なのか、または彼がどのような順序で何を試みたのかはわかりません。彼は問題を *.db テーブルのクエリと説明していますが、彼の SQL エラーは、パススルー モードで発生するエラーのように見えます。または、送信用にコードを単純化して、エラーの真の原因を取り除いた可能性があります。

BDE v.5.2 (5.2.0.2) Paradox for Windows v. 7 (32b) Delphi 5.0 (5.62)

成功するステートメントのさまざまなバージョン:

select * from Journal D0 where D0."Where" = "RainPump"
select * from Journal where Journal."Where" = "RainPump"
select * from ":common:Journal" D0 where D0."Where" = "RainPump"
select * from ":common:Journal" where ":common:Journal"."Where" = "RainPump"
select * from :common:Journal where Journal."Where" = "RainPump"
select * from ":common:Journal" D0 where D0."GUMPIK" = 3
select * from ":common:Journal" where ":common:Journal"."GUMPIK" = 3
select * from :common:Journal where Journal."GUMPIK" = 3

正しく見えるが「無効なキーワードの使用」で失敗するバージョンのステートメント:

select * from ":common:Journal" where :common:Journal."Where" = "RainPump"
select * from :common:Journal where :common:Journal."Where" = "RainPump"
select * from ":common:Journal" where :common:Journal."GUMPIK" = 3
select * from :common:Journal where :common:Journal."GUMPIK" = 3

-アル。

于 2008-12-29T17:47:37.820 に答える
2

新しいテーブルで独自の列名を指定した "値" (列名を指定しない) を持つ新しいテーブルに結果セットを挿入し、TQuery を使用してそのテーブルから選択を行うことができます。

Query1.sql.clear;
query1,sql.add('Insert into newtable values (select * from Journal);');
query1.sql.add('Select * from newtable where newcolumn = "Rainpump";');
query1.open;
于 2008-09-23T12:44:49.897 に答える
2

次のように書き直してください。

select * from Journal where Journal.[where] = "RainPump"
于 2008-09-23T11:56:42.040 に答える
0

MySQL では、テーブル/カラム名を `` (斜めの一重引用符) で囲むことができます。BDE で何が許可されているかわかりませんが、[where] を `where` に置き換えてみてください。

于 2008-09-23T15:32:56.327 に答える
0
select * from Journal where Journal."where" = "RainPump"
于 2008-09-23T11:56:37.437 に答える
0

私なら、気まずい列の名前を変更します。

于 2008-09-23T12:21:32.480 に答える
0

わかりましたので、キーボードの後に​​列に名前を付けるのは、どの SQL システムでも悪いことです。列に「select」または「count」または「alter」または「table」という名前を付けますか、それとも単に「truncate」または「drop」という楽しみのために付けますか? ないことを願っています。

このインスタンスの回避策を構築したとしても、あなたの後に来る人のために地雷原を作成しています. mj2008 が言ったことを実行し、血まみれの列の名前を変更します。

この列名を永続化することは、システムを構築している誰かの最悪の例であり、プロジェクト マネージャーのうんちリストにあなたを載せることになります。

于 2011-11-06T19:43:26.777 に答える