WinXP,VB6,SqlSrever7です。
質問の仕方もよくわからない素人で、質問が意味不明かもしれませんが、わかる方いらしたらよろしくお願いします。
売上管理で「伝票マスター」「伝票サブ」「顧客名簿」「商品一覧」の4テーブルを使用、「伝票サブ」の内容をグリッドに表示させています。検索時は各テーブルの内容がフォーム、グリッドともちゃんと表示されます。
新規登録時、DataGrid_AfterColEditプロシージャで1行ずつrs.updateをしています。msgboxで確認するとrsの内容は登録内容になっているのですが、rs.requeryしたらグリッドが真っ白になります。どうやら「伝票サブ」にrsが保存されていないせいらしいです。cn.executeでUpdateすると同じデータが延々「伝票サブ」に書き込まれていきます。Insert intoすると既存伝票の変更時にも新たにデータが書き込まれます。なにか解決方法はありますでしょうか?
>1行ずつrs.updateをしています。
>msgboxで確認するとrsの内容は登録内容になっているのですが
設定関係で思いつくのは
CursorLocation の設定が悪いとかぐらいしか…
複数テーブルを連結した上に特殊なクエリで操作した後のテーブルを
変更しようとしてるだとか…
トランザクション張ってコミットしてないとか…
実は表示用のローカルで作成したレコードセットにデータを移し替えてて
全く意味のない UpDate してるとか…でもこれはエラー出そうw。
…この状態で何が参考になるのかなぁ(^^;)
[ADO 第 4 章: データの編集]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdconeditingdata.asp
[ADO 第 8 章: カーソルとロックの概要]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdconcursorsandlocks.asp
とりあえず、DataGrid とか関係ない処理は外して、一番単純なプログラムで
データベースの更新のみはできるの?(←Recordset のみで検索した結果をデータ
ベースに更新)…サンプルならどこでも転がってると思うけど(過去ログ検索
『Recordset』とか?WEB検索とか…)それが理解できてないなら話にならない
からね?。
>cn.executeでUpdateすると同じデータが延々「伝票サブ」に書き込まれていきます。
connection.Execute メソッドの場合、引数で指定されたテキストを実行するだけ
なんだから、原因はSQL文が間違ってるしかないと思うけど?(^^;)
>Insert intoすると既存伝票の変更時にも新たにデータが書き込まれます。
INSERT 文は『挿入文』なんだから当然の結果。っつーか普通、データベース更新の
場合は主キーなどでレコードを特定します。既存のレコードを対象として INSERT 文
がエラーで落ちない時点で主キーの管理…というかデータベース全体の管理が甘いです。
そのようなデータベース及びプログラムは作るべきでないです。
>なにか解決方法はありますでしょうか?
色々と試してる部分は評価しますが、どれも基本的なことが理解できてない様子。
『基本から教えて下さい』なんて質問(依頼?)に付き合ってくれる人は、そうそう居ません。
基本を自分で勉強してくるのが今の時点で一番の解決方法です。
ツイート | ![]() |