- PR -

該当無しの場合

投稿者投稿内容
おっつ
常連さん
会議室デビュー日: 2004/11/04
投稿数: 22
投稿日時: 2004-11-04 15:33
visual studio.netを使用しています。職員の管理システムを作っているのですが、だいたいいい所までは開発する事ができました。しかし、あと一歩のところでつまずいています。
内容は職員番号で検索をかけ、その該当者を出力するというものなのですが、該当がない場合の処理ができません。該当者がいない場合は「該当がありません」などの表示をしたいのですが、エラーになってしまいます。エラーは「インデックス 0 は負の値です。また、行カウントの合計よりも小さい値です」です。どうすればうまくできるのでしょうか?
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-11-04 15:49
スルーされそうな内容だと思われるので、とりあえず回答ではなく指摘。

この内容で自分の望む回答が得られると思いますか?
質問する際には最低限必要な情報は提示しましょうよ。

というわけで、こちらを一読されることをお勧め致します。
http://www.hyuki.com/writing/techask.html

以上。
_________________
まゆりん @ わんくま同盟
Blog る。
おっつ
常連さん
会議室デビュー日: 2004/11/04
投稿数: 22
投稿日時: 2004-11-04 16:27
すいません。もう一度改めて・・・・
私は今までホスト系(COBOL85)を中心に開発してきてWEBに挑戦してみようと思い最近始めたところです。そこで・・・
SQLサーバーを使用しVisual Studio.NET(VB.net)で職員管理のシステムを開発中です。
検索画面で職員番号を入力し検索ボタンをクリックするとその職員の情報が表示されるというシステムを作りました。
サーバー上のテーブルに存在する職員番号を入力した場合、問題なく表示されます。
しかしながら、存在しない職員番号を入力した場合にエラーになってしまいます。
私の予定では、空のデータの画面が表示されるはずだったのですが・・・
できれば、該当者がいない場合には「該当なし」とメッセージを表示させたいのですが、その前にエラーを回避しないとダメですね。
表示されるエラーは「アプリケーションでサーバー エラーが発生しました。インデックス 0 は負の値です。また、行カウントの合計よりも小さい値です。」です。
エラーを見た限りでは、インデックスが負の場合の処理が必要だと思うのですが?
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-04 16:37
ステップ実行をして、エラーが発生したコードを特定してみてください。
そのコードがわかれば、どのように書き換えればよいかを判断できるかもしれません。

データベースからどのようにデータを拾ってきましたか?
0レコードかどうかだけを知ることもできますが、試しましたか?

_________________
たつごろー
codeseek
こみゅぷらす
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-11-04 17:16
どもです。がると申します。
んっと。

引用:

SQLサーバーを使用し


という状態で検索をして
引用:

存在しない職員番号を入力した場合にエラーになってしまいます。


との事なので。
ここだけを見ている限りでは
・SQL文がおかしい
・その後のfetch(かな? SQL Server固有の名詞が…)がおかしい
・またはSELECTできた数のカウント方法がおかしい
あたりではないか、と。

もうちょい細かくいきますと。
普通、おっつさんがおっしゃっているようなシステムを組む場合、
コード:
変数SQL文 = "SELECT ○,○,○ FROM テーブル名 WHERE 職員番号='どこかで入力してもらった値';
SQLオブジェクト.query(変数SQL文);

if (0 == SQLオブジェクト.selectできた数を取得するメソッド() ) {
  職員はいないらしい処理
} else {
  職員がいるらしい処理(重複はチェックしてないけど :-P )
}


多分おおまかにはこーゆーコードを書いていると思います。
こういうロジックの場合、上記の通り、SQLかその後の数の
カウント方法で失敗することが多いように思います。

とりあえず
・イメージしているSQL文

・デバッグ表示で実際に渡されているSQL文を表示
とで比較してみてはいかがでしょうか?

或いはそれでも不明の場合、差し支えない程度にSQL文を
のっけていただけるともう少し見えるかも…です。
sod
会議室デビュー日: 2003/04/24
投稿数: 6
投稿日時: 2004-11-04 17:30
おっつさんがどのように実装されてるかわからないので完全に想像ですが
検索結果をDataSetか配列などで受け取って、データが必ず1件あると決め打ちして
DataTable.Rowsの1行目や配列の最初の要素をバインドしてるとか?
おっつ
常連さん
会議室デビュー日: 2004/11/04
投稿数: 22
投稿日時: 2004-11-08 18:22
日にちがあいてしまいまして・・・体調不良だったもので!
sodさんの言われている通りのやり方です。
検索はSQLのストアドでしています。しかしがるがるさんの言われているような、いない場合のIF文はありません。
ただのselect文だけです。その辺が原因ぽいですね
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-11-08 19:41
if (DataTable.Rows.Count == 0)
{
//
// 該当なしの処理
//
}

のような感じでイイのではないでしょうか。
ちゃんとデバッグでおってますか?

スキルアップ/キャリアアップ(JOB@IT)