アプリ版:「スタンプのみでお礼する」機能のリリースについて

データベースはAccess2000 プロバイダはJet4.0です。

(1)まずレコードがない状態でレコードを追加します。
(2)そのまま削除ボタンを押します。
(3)エラーが発生します。
「行が見つからなかったため更新できません。列の値は最後に読み込
  まれた後で変更された可能性があります。」
(4)終了し起動します。
(5)なぜかレコードが1件あります。(削除が失敗?)
(6)削除します。メッセージボックスがでて削除成功します。
 このときレコードはありません。(データグリッド上)
(7)レコードを追加します。成功します。
(8)削除するとデータグリッド上ではレコードがあるのに
 メッセージボックスが出て追加を促してきます。
(9)追加して削除するとまたメッセージボックスが出てきます。
 このときデータグリッド上のレコードは増えています。
 (8)~(9)が繰り返しおきます。

その後vbを終了させてAccessで内容を確認するとレコードが増えていますが、
顧客IDフィールドの増加処理がされていなくすべて1になっています。

Update,Addnew,Deleteメソッドの理解が不十分なのか、カーソルの位置
の理解不足なのかわかりません。
どなたか手を貸してください。

Private Sub cmdDelete_Click()

If Rs.RecordCount = 0 Then
MsgBox "レコードがありません。追加してください。", vbOKOnly
Exit Sub
End If

Rs.Delete

If Rs.RecordCount = 0 Then
MsgBox "レコードがありません。追加してください。", vbOKOnly
Exit Sub
End If

Rs.MoveNext
If Rs.EOF Then
Rs.MoveLast
End If

End Sub

Private Sub cmdNew_Click()

Rs.AddNew "顧客ID", "増加する処理済"

End Sub

Private Sub cmdUpdate_Click()

Rs.Update

End Sub

A 回答 (2件)

再びmaruru01です。



>Requeryメソッドを実行しないとなぜエラーが出るのでしょうか?
質問欄のコードから察すると、フォームのLoadイベントなどでレコードセットをOpenしておいて、そのままOpenしっぱなしで、終了直前とかにCloseしているようですが、これだと、追加や削除の変更が、Openしているレコードセットに反映されません。
通常は、
Rs.Open
・・・追加や削除処理・・・
Rs.Close
という風に、1つの処理ごとにレコードセットをOpenしなおします。
Requeryメソッドは、Closeして元の条件のままOpenするという動作ですので、これを入れるとOpenし直すことになり、変更が反映されるわけです。

>あるtextbox
>に何も入力しなかった場合は更新が成功するのですが、ある文字列を
>入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する
>ことはできません。」といったようなエラーが出るのですが、これは
>どうすればいいのでしょうか?
何も入力していない状態では、連結したフィールドに"Null"を格納し、いったん何かを入力して削除すると、長さ0の文字列""を格納します。
長さ0の文字列(空文字列)とNull値は違う扱いになります。
エラーを回避するには、そのテキストボックスに連結したフィールドのプロパティの、[空文字列の許可]を"はい"にします。
    • good
    • 0
この回答へのお礼

再びありがとうございます。
なるほど!これですべての疑問が解決しました。
1つの処理ごとにCloseすればいいのですかー。
うーん、非常に勉強になりました。
空文字も解決しました。親切にありがとうございました!

お礼日時:2002/09/05 12:17

こんにちは。

maruru01です。

とりあえず、追加と削除のメソッド実行直後に、

Rs.Requery

と、再クエリの処理を入れてみて下さい。

この回答への補足

maruru01さんこんにちは。
さっそくのご回答ありがとうございます。エラーは回避しました。
本を見て勉強していますが、Requeryを実行するとは書いてありません。Requeryメソッドを実行しないとなぜエラーが出るのでしょうか?

また、さらに質問ですが複数のtextboxのDataSourceをRecordSet
オブジェクトにSetしてレコードを更新していますが、あるtextbox
に何も入力しなかった場合は更新が成功するのですが、ある文字列を
入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する
ことはできません。」といったようなエラーが出るのですが、これは
どうすればいいのでしょうか?また、なぜこのようなエラーが起きるの
でしょうか?よろしくお願いします。

補足日時:2002/09/04 17:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています