DBGridをSELECTするには?

解決


比嘉医者  2008-04-06 17:41:09  No: 30426  IP: 192.*.*.*

いつもお世話になっております。

データベースデスクトップで以下のような
データベースをつくりました

bangou  name   color

1番   田中      赤
2番   佐藤      白

 データベース名はtestdatabase
 このデータベースをDBGridに表示させております。

このDBGridの
2番   佐藤      白
のみを表示させたい場合、
フォーム上にボタンを配置して、以下のようなコードを書きました。

begin

Query1.SQL.Clear;
Query1.SQL.ADD('SELECT * From testdatabase where bangou=2');

end;

 実行してボタン押しても、DBGridはビタイチ反応しません。

WinXP&Delphi5&データベースはParadoxの環境です。

結構、教科書みたのですが行き詰まりましたので、質問させていただきました。

編集 削除
HOta  2008-04-06 17:46:46  No: 30427  IP: 192.*.*.*

Query1(TQuery) -> TDataSOurce -> TDBGridの接続だと考えます。

Query1.Close;
>Query1.SQL.Clear;
>Query1.SQL.ADD('SELECT * From testdatabase where bangou=2');
Query1.Open;

としたらどうでしょう。

編集 削除
比嘉  2008-04-06 20:02:43  No: 30428  IP: 192.*.*.*

HOta様  コメントありがとうございました。

ボタンのコードはご指摘のとおり、↓のようにしております。

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD('SELECT * From testdatabase where bangou=2');
Query1.Open;

フォームには、
Table  DataSourse Query DBGrid Button  の5つを配置しております。

私の悩みと無関係かもしれませんが、
QueryのAvtiveをTrueにしようとすると、「SQL文がありません」
と拒否されます。

うーむ、SELECTできないデータベースってのは、恐ろしいほど無意味ですね。。。

編集 削除
???  2008-04-06 20:29:24  No: 30429  IP: 192.*.*.*

> 2番   佐藤      白
これがデータの内容だとすれば、bangou=2 では無くbangou=''2番''では?

> QueryのAvtiveをTrueにしようとすると、「SQL文がありません」
QueryにSQL文として直接記述すればokかもよ。

編集 削除
比嘉  2008-04-06 20:49:49  No: 30430  IP: 192.*.*.*

失礼いたしました。
データベースは

bangou  name   color

1   田中      赤
2   佐藤      白

としております。

編集 削除
AY  2008-04-06 21:49:44  No: 30431  IP: 192.*.*.*

>QueryのAvtiveをTrueにしようとすると、「SQL文がありません」
と拒否されます。
これは、オブジェクトインスペクタでですよね。
QueryのSQLに何も設定していないからでしょう
試しに、SELECT * From testdatabase を設定すればActiveに出来るでしょう
それ以前に、DBGridに表示させていると発言と、SQL文がありませんが矛盾します。
Tableも置いてあるようですね。
Dbgridには、Tableを表示させているのではないですか?

現在
Table >  DataSourse >  DBGrid  となっているのではないですかね
Query >  DataSourse >  DBGrid  としてください。

編集 削除
比嘉  2008-04-07 00:16:02  No: 30432  IP: 192.*.*.*

AY様

Table >  DataSourse >  DBGrid  となっているのではないですかね
Query >  DataSourse >  DBGrid  としてください

↑そのとおりでした。
なんとかSelectできました。
ありがとうございました。

HOta様からの

Query1(TQuery) -> TDataSOurce -> TDBGridの接続だと考えます。

のコメントで気づくべきでした。

尚、
Query1.SQL.ADD('SELECT * From testdatabase where name=''田中''');
であれば正常にSELECTされるのに

Edit1.Textに田中と記入して
Query1.SQL.ADD('SELECT * From testdatabase where  name=''Edit1.Text''');

とするとSELECTされなくなりました。

もうちょいSQL入門の教科書みてみます。

編集 削除
ofZ  2008-04-07 08:26:39  No: 30433  IP: 192.*.*.*

> もうちょいSQL入門の教科書みてみます。
そうではなく、文字列と文字列型の区別を、きっちりすることです。

> name=''Edit1.Text''
これは、Edit1.Text  で入力された値で絞り込みしているのではなく、
名前が「Edit1.Text」のもので絞り込んでいることになります。

なのでイカですね。
name='''' + Edit1.Text + ''''

編集 削除
比嘉  2008-04-07 08:50:52  No: 30434  IP: 192.*.*.*

ofz様
ありがとうございました。
いろんな問題が一挙に解決しました。

同じ検討をVCでやってる同僚がおります、
「どっちが優れているか?」
について、これから議論(勝負)してきます。

編集 削除
HOta  2008-04-07 13:26:28  No: 30435  IP: 192.*.*.*

データーベースを使うのなら、Delphiです。

編集 削除