
データベースは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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ACCESS ADOでupdateが効かない
その他(データベース)
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
オープンしているレコードセットの中の最大値
その他(データベース)
-
-
4
「更新に必要なキー列の情報が足りません。」エラーメッセージの回避策を教えてください。
Visual Basic(VBA)
-
5
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
6
レコードが存在しなかった場合
Microsoft ASP
-
7
実行時エラー -2147217900 ADODBでレコードセットオープン時エラー
Access(アクセス)
-
8
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
vba 正規表現について教えてく...
-
pythonでのローカルファイルか...
-
if関数とは?
-
プログラム言語
-
今のプログラミング言語
-
vba クリップボードクリアにつ...
-
itエンジニアに就職希望で未経...
-
Pythonのエラーメッセージをコ...
-
P2P地震速報のEEW APIの仕様書...
-
著作権法について
-
プログラミングについて
-
自作scratch アニメの商用利用
-
Geminiフォーム 画像生成で 人...
-
数学、プログラミング、物理、...
-
Python 3.12.2 か一番最新のパ...
-
MOVEコマンドでサブフォルダー...
-
AIがプログラムする時代のプロ...
-
pythonについて(初心者です)
-
pythonでhtmlファイルの指定文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
差し込み印刷のレコード数について
-
レコードが存在しなかった場合
-
アクセスでレポートの1印刷内...
-
DataGridViewの、選択されてい...
-
JSPのNULLレコード表示について...
-
ヘッダレコードとトレーラレコ...
-
ACCESSで大量の更新を行うと「...
-
サブレンジ分割されたNDB(富士...
-
カレントレコードが無い事を判...
-
ワードの差込印刷で教えて下さ...
-
固有レコード識別子の選択とは
-
Access でレコードセレクタが押...
-
[VBA] ADOの Clone と AddNew
-
ファイル書込みで一行もしくは...
-
DataGridViewの内容をDBに反映...
-
VB6.0のIsNull関数に相当するもの
-
Access を×ボタンで閉じ...
-
Accessデータシートビューの行...
-
Line Inputで文字化け(助けて...
おすすめ情報