A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
レコードセットを作成した上で、検索・表示されていると思います。
レコードセットをrsとして定義しているとして、
rs.MoveNext を記述して下さい。
この回答への補足
さっそく回答を頂きありがとうございます。
現在は・・・
Private Sub 次へ_Click()
Dim ws As DAO.Workspace
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim sql As String
Set ws = DBEngine.Workspaces(0)
Set DB = ws.Databases(0)
sql = "select * from ポイント管理テーブル where 顧客コード = '" & Me.顧客コード & "';"
Set rs = DB.OpenRecordset(sql)
rs.MoveNext
If rs.EOF = True Then
MsgBox ("データがありません。")
Exit Sub
End If
こういった感じで記述しているのですが、これだと「次へ」ボタンを押すたびにSQLでレコードをセットし直してしまうので、2件目のレコードしか表示されません。
こういった場合、どうしたら良いのでしょうか?
宜しくお願いします。
No.2
- 回答日時:
こんばんは。
レコードセットのオブジェクト変数を、rsとして、
「次へ」ボタンのクリックイベントに、
rs.MoveNext
If rs.EOF Then
rs.MoveLast
End If
と、記述してください。
IF~End Ifを入れないと、
最終レコードの状態で「次へ」ボタンをクリックするとエラーになってしまいます。
No.3
- 回答日時:
おはようございます、No.2です。
「次へ」ボタンのクリック・イベントには、
----------------------------------------
rs.MoveNext
If rs.EOF = True Then
rs.MoveLast
MsgBox ("これ以上データはありません。")
End If
----------------------------------------
コレ↑だけを記述してください。(メッセージは適当に修正してください)
>「次へ」ボタンを押すたびにSQLでレコードをセットし直してしまうので、
>2件目のレコードしか表示されません。
それは「次へ」ボタンのクリック・イベントに
----------------------------------------
sql = "select * from ポイント管理テーブル where 顧客コード = '" & Me.顧客コード & "';"
Set rs = DB.OpenRecordset(sql)
----------------------------------------
↑が記述されているからです。
これではボタンをクリックするたびに、入力されている顧客コードのレコード→次のレコード→入力されている顧客コードのレコード、のくり返しになってしまいます。
「次へ」ボタンのイベントに記述するものではありません。
◇
おそらく、オブジェクト変数の適用範囲を間違えていることに問題があるのだと思います。
オブジェクト変数をプロシージャーごとに宣言しておられませんか?
--------------------------------
Dim ws As DAO.Workspace
Dim DB As DAO.Database
Dim rs As DAO.Recordset
---------------------------------
これら↑の変数は、フォームの宣言セクション(General-Declarations)で1回だけ宣言しておけばいいものです。
そこで宣言しておけば、その変数はフォームのすべてのプロシージャーから参照することができます(<モジュールレベル変数>というものです)。
いちいちプロシージャーごとに宣言するものではありません。
(「次へ」ボタンのクリック・イベントだけに使うのなら別ですが・・)
★VBAの参考書をお持ちなら「変数の適用範囲」について書かれているところを、よくお読みください。
--------------------------------
Set ws = DBEngine.Workspaces(0)
Set DB = ws.Databases(0)
--------------------------------
この↑Setを使った変数への代入も、フォームのLoadイベントで行ってください。
そうすればフォームを閉じるまで、代入する必要なく変数を使うことができます。
変数 rs へのレコードセットの代入も同じことです。
フォームを開いたときの初期値として、フォームのLoadイベントで、変数 rs にレコードセットを代入して下さい。
ユーザーが任意の顧客コードを指定できるような作り方をされているのなら、
Loadイベント以外にも、レコードセットを代入する必要があります。
たとえばですが・・データ表示のボタンを別に作り、そのボタンのクリック・イベントに、とか。
◇
なんか、だらだらと長くなってしまいましたが、
要は・・
★オブジェクト変数の宣言は、フォームの宣言セクションで1回だけ行う。
(プロシージャーごとに宣言しない)
★オブジェクト変数への代入は、フォームのLoadイベントで行う。
・・ということです。
あと・・
No.2に書いたように、
If rs.EOF (= True) Then("= True" は省略可)
のあとには、必ず rs.MoveLast を入れて、強制的に最終レコードに移動させないとエラーになりますよ。
それと・・
No.1の補足に書いておられるようなことは、はじめから最初の質問に書いておくべきだったと思いますが・・。
この回答への補足
何度も何度も補足をして申し訳ありません。
No.3さんの仰る通り、もう少し整理してから書き込むように心がけます。
皆様の回答・アドバイス、大変参考になりました。
本当にありがとうございます。
教えて頂いたコードで、ちゃんと動作するようになりました。
そして最初に述べたのですが、本当に補足説明が多くて申し訳ありません。あともう1つだけこの質問関連でお聞きしたいのですが、
DoCmd.GoToRecord , , acNext
このコードだとテーブルの中に入っているデータ全てを次へ次へと移動していっていると思うのですが、例えば「顧客コード」を指定して、その顧客コードのレコードだけを次へ次へと移動させる場合、どのように記述したら良いのでしょうか?
質問が重ね重ね多くなり申し訳ありませんが、宜しくお願い致します。
No.4
- 回答日時:
ボタンに「cmdNext」名前の場合、
Private Sub cmdNext_Click()
On Error GoTo Err_cmdNext_Click
DoCmd.GoToRecord , , acNext
Exit_cmdNext_Click:
Exit Sub
Err_cmdNext_Click:
MsgBox Err.Description
Resume Exit_cmdNext_Click
End Sub
以上のようにERR処理を含んだコードです。参考にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Excel(エクセル) excelvbaでスライドショーを作りたい 2 2023/04/20 14:32
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードを保存するコード ア...
-
Access2010、値を入力したら自...
-
レコード削除時に(サブ)フォー...
-
アクセスの自動保存解除はでき...
-
AccessVBA RecordSourceのリセ...
-
Accessで上の行を自動でコピー...
-
Accessでフォーム上に 直前の...
-
アクセスでフォームビューがみ...
-
Accessで前に入力したフィール...
-
Access データのないフォーム...
-
Accessでレコードの保存をせず...
-
ACCESSでフォームを使って、テ...
-
新規レコード行を非表示にしたい
-
access 自作の移動ボタンのエラ...
-
Access レコード移動時イベント...
-
ACCESS起動時に所定フォームを...
-
Access:フォームプロパティ「...
-
アクセス2000で在庫管理ファイ...
-
フィルタ後のフォームの件数の...
-
accessのクエリで、該当するデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードを保存するコード ア...
-
アクセスでフォームビューがみ...
-
ACCESSでフォームを使って、テ...
-
新規レコード行を非表示にしたい
-
フィルタ後のフォームの件数の...
-
Accessでレコードの保存をせず...
-
Accessでフォーム上に 直前の...
-
Accessで上の行を自動でコピー...
-
AccessVBA RecordSourceのリセ...
-
レコード削除時に(サブ)フォー...
-
アクセスの自動保存解除はでき...
-
Accessで新しいレコードに規定...
-
ACCESS起動時に所定フォームを...
-
Access 「このレコードを保存す...
-
Access:フォームプロパティ「...
-
Access2010、値を入力したら自...
-
レコードをダブルクリックする...
-
アクセス データの競合を非表...
-
ACCESSのクエリで抽出したデー...
-
Accessでのデータ消滅に...
おすすめ情報