質問があります。データベース上のテーブルにデータがあるかどうかDelphiのプログラムで調べたいと思っています。クエリまたはDBgridを調べようと考えているのですが、まだデータベースの知識が浅いため、苦戦しています。考えている方法は、while not query.EOF doでデータを見ていくか、select文でグリッドに表示し、そこのフィールドに何かしらのデータが入っているかどうか判断するということです。
それぞれの方法について、if文で「ifデータがなかったら(または、DGグリッドのフィールドに何も値がなかったら、このような処理をする」といった命令文はありますか?オラクルの9使っています。Delphiのバージョンは6です。
query1.sql.text := 'SELECT COUNT(*) FROM テ−ブル名;';
query1.oepen;
if 0 = query1.fieldbyname('COUNT(*)').asinteger then
showmessage('データがありません');
以上でどうでしょうか?
スペルミスもしあったらすいません。
ミスquery1.oepen;
↓
正しくはquery1.open;
でした。すいません。
こんにちは。
1.Count(*) を使う
Query1.SQL.Text := 'Select Count(*) From Table_TEST';
Query1.Open;
if Query1.Fields[0].AsInteger = 0 then
ShowMessage('空です');
2.RecordCount を使う
Query1.SQL.Text := 'Select * From Table_TEST';
Query1.Open;
if Query1.RecordCount = 0 then
ShowMessage('空です');
3.IsEmpty を使う
Query1.SQL.Text := 'Select * From Table_TEST';
Query1.Open;
if Query1.IsEmpty then
ShowMessage('空です');
2.の RecordCount を使う方法は、Open の後に、
Query1.Last;
Query1.First;
または
Query1.FetchAll;
が必要な場合があります。あまりオススメできない方法です。
ありがとうございます。
そうなると、もしデータの件数をカウントして、それをTEditに表示したい場合は、TEdit.Text := 'Select Count(*) From Table_TEST'; や
TEdit.Text := Query1.RecordCount; ということになりますか?
>TEdit.Text := 'Select Count(*) From Table_TEST';
は、'Select Count(*) From Table_TEST'という文字列が格納されます。
# “Delphi大好き”さんや DEKO さんはTQueryを使うように書いています・・・
>TEdit.Text := Query1.RecordCount;
は、:= IntToStr(Query1.RecordCount);
で良いとおもいます。
オマケで。
4.BOF/EOF を使う
Query1.SQL.Text := 'Select * From Table_TEST';
Query1.Open;
if (Query1.BOF and Query1.EOF) then
ShowMessage('空です');
> データの件数をカウント
1.Count(*) を使う
Query1.SQL.Text := 'Select Count(*) From Table_TEST';
Query1.Open;
ShowMessage(IntToStr(Query1.Fields[0].AsInteger));
2.While で回す
Query1.SQL.Text := 'Select * From Table_TEST';
Query1.Open;
Cnt := 0;
while not Query1.EOF do
begin
Inc(Cnt);
Query1.Next;
end;
ShowMessage(IntToStr(Cnt));
3.RecordCount を使う
Query1.SQL.Text := 'Select * From Table_TEST';
Query1.Open;
ShowMessage(IntToStr(Query1.RecordCount));
3.の RecordCount を使う方法は、Open の後に、
Query1.Last;
Query1.First;
または
Query1.FetchAll;
が必要な場合があります。あまりオススメできない方法です。
件数取得用に Count(*) の SQL を別途実行するのは無駄に思えるかもしれませんが、
速度の面から考えると RecordCount を使うより Count(*) を別途実行した方が
速い事が多いです (特に件数の多いテーブル)。
たくさんの情報ありがとうございました。
ツイート | ![]() |