VB6.0でデータベースの内容を更新するプログラムを作成しています。
1.データベースの内容をデータグリッドに読み込む
2.グリッドより1行を選択、レコードを新しくOpenしたダイアログに表示する。
3.ダイアログ内でレコードを修正・更新する。更新した内容をデータグリッドに反映させるため、グリッドのRefreshを行う。
4.ダイアログを閉じる。
とした場合、3のリフレッシュでブックマークの位置が変わってしまいます。
ブックマークを元通りに戻すため、2でブックマークの位置をバリアント型変数に退避し、4以降でブックマークを退避しておいた値に戻すようにしましたが、こうすると設定しなおしたブックマークの行がグリッドの先頭に表示されてしまい、ダイアログを開く前のグリッドとは違った表示になってしまいます。
FirstRowプロパティを使えば良いような気がしますが、FirstRowを単にストリング型変数を使って退避し、元に戻すわけではないようです。
(元に戻すときにエラーになります。)
FirstRowプロパティをうまく使われている方、ぜひご教示ください。
お願いいたします。
Public Sub Click_Mainte修正ボタン(Frm As Form, Dgd As DataGrid, AdoD As Adodc, NewFrm As Form)
Dim lngRow As Long
Dim strFirstRow As String
Dim varRow As Variant
On Error Resume Next
If Not Chk_Records(Dgd, Frm) Then GoTo Exit_
strFirstRow = Dgd.FirstRow
varRow = Dgd.Bookmark
Load NewFrm
NewFrm.Show vbModal
AdoD.Refresh
Dgd.Bookmark = varRow
Dgd.FirstRow = strFirstRow '「ブックマークの値が不正です」エラーになってしまう。
Exit_:
On Error GoTo 0
End Sub
No.1ベストアンサー
- 回答日時:
Refresh後に Bookmark > FirstRowの順に処理するのではなく、FirstRow > BookMarkの順に処理すればいいようですよ
FirstRowの復元は FirstRowに代入するのではなく、Bookmarkに代入してやるようにしてみましょう
保存しておく FirstRowはVariant型のほうがよさそうです
AdoD.Refresh
Dgd.Bookmark = varFirstRow
Dgs.Bookmark = varRow
せっかく回答くださったのに、気づくのが大変遅れ、申し訳ございませんでした。
質問してから1ヶ月近く経ったというのに、データグリッドの部分は半分あきらめてそのままにしておりました。
早速試してみたところ、思い通りの動作になりました!
ほんとうにありがどうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
切り上げ
-
i++と++i ってどう違うのですか?
-
jsp~jspにhiddenを使って変数...
-
構造体からレコードセットへの代入
-
Variant型で宣言してるのにEmpt...
-
コマンドプロンプト バッチ|結...
-
processing エラーで、 "cannot...
-
[VBS]変数を定数に変換する方法...
-
定数の設定について。
-
Pythonで辞書内のValueをfor k,...
-
js this
-
サブwindowをオープンして外部...
-
VB6.0 DataGridでのfirstRowの...
-
VBAで日時を文字列から代入する...
-
verilog HDLの[=]と[<=]の使い分け
-
JAVAのユーザー定義関数
-
EXCEL/VBA 変数の値をクリップ...
-
インクリメント演算子の前置(+...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
だれがとけるの?
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
EXCEL/VBA 変数の値をクリップ...
-
[VBS]変数を定数に変換する方法...
-
processing エラーで、 "cannot...
-
Variant型で宣言してるのにEmpt...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
C言語 列挙型(enum型)変数について
-
i++と++i ってどう違うのですか?
-
切り上げ
-
インクリメント演算子の前置(+...
-
VB6.0での条件文にある#の意味
-
親ウィンドウの情報をインライ...
-
C言語 exitで終了した関数の戻...
-
Serialize(CArchive& ar)にて
おすすめ情報