度々お世話になります。マグマです。
OracleのSQLデータベースにアクセスする方法について昨日今日勉強しています。
m_strFilter等を用いて抽出条件を指定し、その対象となるDBのレコードをOpenして取得しようとしています。(GetDefaultConnect,GetDefaultSQL)
ただ、”抽出条件を満たすレコード(行)が無い”場合という条件文を作成したいのですがそれに困っています。
単純にOracleでSQLを使用した時、whereで抽出条件を指定してその条件を満たすレコードが無い場合は、列名だけが
表示されると思います。ただこのとき空白のレコードが抽出されているということなら
、”抽出条件を満たすレコード(行)が無い”場合 => if(DB.ある適当な列名 == );
でその条件文が作成できると思うのですが、レコードが抽出されていないのでどのような条件文を作成して良いのか
さっぱりです。
すみませんが、どなたか少し教えて頂けないでしょうか?
> ”抽出条件を満たすレコード(行)が無い”場合 => if(DB.ある適当な列名 == );
もし、SELECTできたデータのある適当な列名の値がたまたま だった場合、まずいですよね。
DBアクセスまわりをどうやって実装しているのかわかりませんが、
大抵は、SQL実行後の結果がEOFやBOFかどうかを判定することが多いですかね。
あるいは、「SELECT COUNT(*) FROM tablename WHERE 条件」のようなSQLを実行して、
条件に一致するレコードの件数を事前に取得するとか。
sugerさん、いつも親切にご返事ありがとうございます。
とりあえず自分は初心者ですので、sugerさんが提供していただいたヒントを元にEOF,BOFについてヘルプで調べてみたいと思います。
恐らくEOFやBOFを返してくれる関数が存在するのだとおもいますが・・・
Open関数を用いて、DBにアクセス(データ取得)するクラスを呼んでいるのですが、そちらのクラスを変更してはいけないようになっています。その関数をどこで呼ぶのかも含めて一度調べてみます。ありがとうございました。
度々すみません、マグマです。
今、sugerさんのおっしゃられた様にEOFについて調べ、IsOFとMoveNextをしりました。
FOR文で,IsDFが0以外を返すまで
まわしてDBの内容をAddStringしようと思います。
for(; !f_db.IsOF;f_db.MoveNext){
list.AddString(f_db.retuname)
}
この時に抽出条件で満たすレコードが最初から無いときは、エラーがでるのですか?それとも単純にFOR文の中の処理が
行われないだけなのですか?
うろ覚えで申し訳ないですが、
検索結果がたまたま0件だったというだけであって、処理が失敗したわけではないですから、
エラーが発生する事はないと思います。
初めからEOF等が終わりを示すのではないかと思います。
例えば、MSDNのCRecordset::IsEOF()の記述のように...
お使いのライブラリの仕様を確認してみてください。
#あるいは、ヒットしないSQLをわざと投げてみるとか...
sugerさん、お返事ありがとうございます。
助かりました。自分でも確認してみたいと思います。