- PR -

急にボタンが効かなくなった

1
投稿者投稿内容
chibimama
会議室デビュー日: 2005/05/17
投稿数: 3
投稿日時: 2005-05-17 14:29
WebMatrixを使用し、ASP.NET VBでSQLへ情報を格納するシステムを作っている初心者です。
どうしてもわからないことがあり、質問することにしました。お知恵をかしてください。よろしくお願いします。

A.aspxにはDataGridとボタン2つが配置されています。
A.aspxの1つ前のページからSessionで引き継いだIDをもとに、TableからID=aのものをDataGrid表示させています。
ボタンの1つは追加ボタンで、押すとレコード追加画面(B.aspx)にTransferするようにしています。
もう一つのボタンは削除ボタンで、押すとレコード削除画面(C.aspx)にTrandferするようになっています。
B.aspxではいくつかのTextBoxを配置し、入力されたものをTableに保存するように設定しました。

B.aspx?ID=aで5レコードまで正常に保存できることを確認したのですが、6レコード目が保存できません。
保存どころか、A.aspxで追加ボタンを押しても削除ボタンを押しても何も起こらなくなってしまいました。

SQLのマネージャを起動してTableへ直接レコードを保存したところ、6レコード目も7レコード目も保存できました。
A.aspxのDataGridにもきちんと表示されています。

その後A.aspx?ID=bで追加ボタンを押したら正常にTransferしたのでレコード保存を行いましたが、やはり同じく5レコード目までしか保存できませんでした。

一体どこの具合が悪いのでしょうか??
コードもDBも見直しましたが、落とし穴が見つかりませんでした。
何か思い当たる方がいらっしゃったら、何でもいいので教えてください。
お願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-05-17 16:09
せめてどのように旨く行かないのか書きましょう。例外が発生するのですか?デッドロックしてしまうのですか?全てが正常終了するのにデータベースには書き込まれていないのですか?

#単純にSqlConnectionや、その関連のインスタンスを破棄するのを忘れているだけの予感。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-17 20:46

引用:

B.aspx?ID=aで5レコードまで正常に保存できることを確認したのですが、6レコード目が保存できません。
保存どころか、A.aspxで追加ボタンを押しても削除ボタンを押しても何も起こらなくなってしまいました。


A画面から、「追加」ボタンでB画面へ遷移する。
B画面で情報を入力し、「登録」ボタンを押すと、データベースに追加し、A画面に戻る。
A画面では、B画面で追加した情報も含めて、再表示する。

ということですか?

 それで、A画面を一旦終わって、もう一度id=aで表示したら、また5つ追加できるのでしょうか。
 AまたはB画面で、実行をトレースし、5つめとそれ以外とに違いがないか、確認しましたか?
 A画面の「追加」ボタンが、HTML上で何になっていますか?
 『何もおこらなくなってしまいました』というのは、ポストバックも発生しない状態でしょうか?

_________________
chibimama
会議室デビュー日: 2005/05/17
投稿数: 3
投稿日時: 2005-05-18 09:58
お二方様、返信ありがとうございます。

処理の流れはJittaさんのおっしゃるとおりです。

A画面を一旦終わってもう一度id=aで表示し、追加ボタンを押した時、
id=aのレコードが5未満であればB画面へ遷移して処理が進みます。
もしid=aのレコードが既に5個保存されている状態だったら、ロックがかかったようになってしまい、何も起こりません。

『何も起こらない』状態というのは、押しても何の反応もない、ということです。
エラーも出ず、画面遷移もせず、もちろん保存もされず、ただペコペコとボタンが引っ込むだけなんです。
5個レコードがたまるまではボタンを押すと処理が進むのに、5個たまった途端にどうしてロックされてしまうのか?
なぜ『5』なのか??

5個目と6個目の処理で違いはありません。
同じ項目に同じ文字数入力して保存ボタンを押すと、5個目の場合では処理が進み、6個目の場合はボタンがペコペコ引っ込む以外何もおこらないんです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-18 21:21
 えっと、私の質問のうち2つ、意味わかりませんでしたか?

> AまたはB画面で、実行をトレースし、
> 5つめとそれ以外とに違いがないか、確認しましたか?
 デバッグ実行はしているのでしょうか?その時に、4つめと5つめ、またはデータベースからの取得が5つめの時に、他と違うルーチンを通ったりしていませんか?
 例えば、DataGridをページングしていて、そのページング単位が5であるとか。


> A画面の「追加」ボタンが、HTML上で何になっていますか?
 ページが表示されたら、右クリックしてソースを表示してください。そして、「追加」ボタンが、HTMLの要素で、どの様に表現されているか、教えてください。
 HTMLでボタンを表示するのは、2つあります。input要素でtypeがbuttonの場合と、input要素でtypeがsubmitの場合です。typeがsubmitなら、必ずポストバックします。それが発生しないなら、onclick属性を付けて、その中でキャンセルしている(return false;)ことが考えられます。JavaScriptの関数中でエラーが発生した場合はポストバックします。
 typeがbuttonの場合、onclick属性でsubmitするわけですが、その中の処理が間違っていることが考えられます。または、個数が5の時にonclick属性を追加していないか。


 追加で、6つめをデータベースに直接追加した場合、どうなりますか?

_________________
chibimama
会議室デビュー日: 2005/05/17
投稿数: 3
投稿日時: 2005-05-24 13:54
Jittaさん
返信いただいていたにもかかわらず、長期間返信せず失礼致しました。

ページングサイズは10、追加ボタンはsubmitでした。
その他の部分を見直したり修正したり、いろいろ思案したのですが、
結局一から作り直して無理矢理問題解決させてしまいました。
なので原因はわからずじまいですが、これでクローズさせていただくことにします。
検索で閲覧されている方、お役に立てず申し訳ありません。
Jittaさん、ありがとうございました。
1

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