抽出条件を満たすレコードがない場合は? – プログラミング – Home

抽出条件を満たすレコードがない場合は?
 
通知
すべてクリア

[解決済] 抽出条件を満たすレコードがない場合は?


マグマ
 マグマ
(@マグマ)
ゲスト
結合: 24年前
投稿: 33
Topic starter  

度々お世話になります。マグマです。

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

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

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

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

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

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


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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

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

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


返信引用
マグマ
 マグマ
(@マグマ)
ゲスト
結合: 24年前
投稿: 33
Topic starter  

sugerさん、いつも親切にご返事ありがとうございます。

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

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

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


返信引用
マグマ
 マグマ
(@マグマ)
ゲスト
結合: 24年前
投稿: 33
Topic starter  

度々すみません、マグマです。

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

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

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

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


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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

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


返信引用
マグマ
 マグマ
(@マグマ)
ゲスト
結合: 24年前
投稿: 33
Topic starter  

sugerさん、お返事ありがとうございます。
助かりました。自分でも確認してみたいと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました