
データベースは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
No.2ベストアンサー
- 回答日時:
再びmaruru01です。
>Requeryメソッドを実行しないとなぜエラーが出るのでしょうか?
質問欄のコードから察すると、フォームのLoadイベントなどでレコードセットをOpenしておいて、そのままOpenしっぱなしで、終了直前とかにCloseしているようですが、これだと、追加や削除の変更が、Openしているレコードセットに反映されません。
通常は、
Rs.Open
・・・追加や削除処理・・・
Rs.Close
という風に、1つの処理ごとにレコードセットをOpenしなおします。
Requeryメソッドは、Closeして元の条件のままOpenするという動作ですので、これを入れるとOpenし直すことになり、変更が反映されるわけです。
>あるtextbox
>に何も入力しなかった場合は更新が成功するのですが、ある文字列を
>入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する
>ことはできません。」といったようなエラーが出るのですが、これは
>どうすればいいのでしょうか?
何も入力していない状態では、連結したフィールドに"Null"を格納し、いったん何かを入力して削除すると、長さ0の文字列""を格納します。
長さ0の文字列(空文字列)とNull値は違う扱いになります。
エラーを回避するには、そのテキストボックスに連結したフィールドのプロパティの、[空文字列の許可]を"はい"にします。
再びありがとうございます。
なるほど!これですべての疑問が解決しました。
1つの処理ごとにCloseすればいいのですかー。
うーん、非常に勉強になりました。
空文字も解決しました。親切にありがとうございました!
No.1
- 回答日時:
こんにちは。
maruru01です。とりあえず、追加と削除のメソッド実行直後に、
Rs.Requery
と、再クエリの処理を入れてみて下さい。
この回答への補足
maruru01さんこんにちは。
さっそくのご回答ありがとうございます。エラーは回避しました。
本を見て勉強していますが、Requeryを実行するとは書いてありません。Requeryメソッドを実行しないとなぜエラーが出るのでしょうか?
また、さらに質問ですが複数のtextboxのDataSourceをRecordSet
オブジェクトにSetしてレコードを更新していますが、あるtextbox
に何も入力しなかった場合は更新が成功するのですが、ある文字列を
入力後、その文字列すべてを削除した場合、「長さ0の文字列を格納する
ことはできません。」といったようなエラーが出るのですが、これは
どうすればいいのでしょうか?また、なぜこのようなエラーが起きるの
でしょうか?よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードが存在しなかった場合
-
差し込み印刷のレコード数について
-
カレントレコードが無い事を判...
-
JSPのNULLレコード表示について...
-
固有レコード識別子の選択とは
-
ADO VBA 実行時エラー3021
-
サブフォームに新規レコードを...
-
Access を×ボタンで閉じ...
-
DataGridViewの、選択されてい...
-
[VB6]プログレスバーコントロー...
-
VB6.0のIsNull関数に相当するもの
-
レコードセット(ADO.Recordset)...
-
データセットのレコード更新が...
-
ADODCとデータグリッドを連動さ...
-
【MS Access2000 VBA ですが】 ...
-
[VBA] ADOの Clone と AddNew
-
Access のフォームで新しい行...
-
DataGridViewの内容をDBに反映...
-
wordのマクロで思うように行き...
-
Line Inputで文字化け(助けて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGridViewの、選択されてい...
-
カレントレコードが無い事を判...
-
レコードが存在しなかった場合
-
差し込み印刷のレコード数について
-
アクセスでレポートの1印刷内...
-
ADO VBA 実行時エラー3021
-
レコードセット(ADO.Recordset)...
-
ACCESSで大量の更新を行うと「...
-
ファイル書込みで一行もしくは...
-
JSPのNULLレコード表示について...
-
ワードの差込印刷で教えて下さ...
-
固有レコード識別子の選択とは
-
データセットのレコード更新が...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
[VBA] ADOの Clone と AddNew
-
サブフォームに新規レコードを...
-
Access を×ボタンで閉じ...
-
ADODBのRecordset.Deleteのエラ...
-
サブレンジ分割されたNDB(富士...
おすすめ情報