抽出条件を満たすレコードがない場合は?

[戻る]
マグマ 2001/10/04(木) 15:15:26
度々お世話になります。マグマです。

OracleのSQLデータベースにアクセスする方法について昨日今日勉強しています。

m_strFilter等を用いて抽出条件を指定し、その対象となるDBのレコードをOpenして取得しようとしています。(GetDefaultConnect,GetDefaultSQL)
ただ、”抽出条件を満たすレコード(行)が無い”場合という条件文を作成したいのですがそれに困っています。

単純にOracleでSQLを使用した時、whereで抽出条件を指定してその条件を満たすレコードが無い場合は、列名だけが
表示されると思います。ただこのとき空白のレコードが抽出されているということなら

、”抽出条件を満たすレコード(行)が無い”場合 => if(DB."ある適当な列名" == " ");

でその条件文が作成できると思うのですが、レコードが抽出されていないのでどのような条件文を作成して良いのか
さっぱりです。

すみませんが、どなたか少し教えて頂けないでしょうか?

sugar 2001/10/04(木) 20:05:26
> ”抽出条件を満たすレコード(行)が無い”場合 => if(DB."ある適当な列名" == " ");

もし、SELECTできたデータの"ある適当な列名"の値がたまたま" "だった場合、まずいですよね。
DBアクセスまわりをどうやって実装しているのかわかりませんが、
大抵は、SQL実行後の結果がEOFやBOFかどうかを判定することが多いですかね。

あるいは、「SELECT COUNT(*) FROM tablename WHERE 条件」のようなSQLを実行して、
条件に一致するレコードの件数を事前に取得するとか。

マグマ 2001/10/05(金) 09:00:39
sugerさん、いつも親切にご返事ありがとうございます。

とりあえず自分は初心者ですので、sugerさんが提供していただいたヒントを元にEOF,BOFについてヘルプで調べてみたいと思います。

恐らくEOFやBOFを返してくれる関数が存在するのだとおもいますが・・・

Open関数を用いて、DBにアクセス(データ取得)するクラスを呼んでいるのですが、そちらのクラスを変更してはいけないようになっています。その関数をどこで呼ぶのかも含めて一度調べてみます。ありがとうございました。

マグマ 2001/10/05(金) 09:40:16
度々すみません、マグマです。

今、sugerさんのおっしゃられた様にEOFについて調べ、IsOFとMoveNextをしりました。

FOR文で,IsDFが0以外を返すまで
まわしてDBの内容をAddStringしようと思います。

for(; !f_db.IsOF;f_db.MoveNext){
list.AddString(f_db.retuname)
}

この時に抽出条件で満たすレコードが最初から無いときは、エラーがでるのですか?それとも単純にFOR文の中の処理が
行われないだけなのですか?

sugar 2001/10/05(金) 11:00:40
うろ覚えで申し訳ないですが、
検索結果がたまたま0件だったというだけであって、処理が失敗したわけではないですから、
エラーが発生する事はないと思います。
初めからEOF等が終わりを示すのではないかと思います。
例えば、MSDNのCRecordset::IsEOF()の記述のように...
お使いのライブラリの仕様を確認してみてください。

#あるいは、ヒットしないSQLをわざと投げてみるとか...

マグマ 2001/10/09(火) 09:05:26
[[解決]]
sugerさん、お返事ありがとうございます。
助かりました。自分でも確認してみたいと思います。

古いスレッドには追加発言できません。