VB6.0でレコードセットの移動について

解決


みなと  2005-09-28 23:08:10  No: 125792

みなとと申します。よろしくお願いします。
現在VB6.0を使ってAccess内にあるデータベースを接続して
VB6.0に表示しています。これは成功したのですが、
次に、別のコマンドボタンにより、レコードを前へ移動させたいのですが
どうもうまくいきません。

 Dim RecordSet As New ADODB.RecordSet
   Dim address As New ADODB.Connection
   
   If address.RecordSet.BOF = True Then
      address.RecordSet.MoveFirst
   Else
      address.RecordSet.MovePrevious
   End If

**addressはテーブル名です。

何かアドバイスをお願いいたします。
それとできれば、レコードの先頭にきて、なお「前」
コマンドボタンを押すと、メッセージボックスを出現させたいのです。

お忙しいと思いますが、よろしくお願いいたします。


LESIA  2005-09-28 23:35:02  No: 125793

> **addressはテーブル名です。
と、書かれてますが、

> Dim RecordSet As New ADODB.RecordSet
> Dim address As New ADODB.Connection

> If address.RecordSet.BOF = True Then
>     address.RecordSet.MoveFirst
> Else
>     address.RecordSet.MovePrevious
> End If
このコードは、テーブル名と同じ名前の変数addressが使われているだけで、
決してテーブルaddressに接続するものではありません。
アクセスのデータベースということは、拡張子mdbのファイルに接続しなければ
テーブルを操作できません。
掲示されたコードの中には、mdbファイルが見当たりませんよね?

というわけで、こんな感じでしょうか。

Option Explicit

Private cn As ADODB.Connection
Private rs As ADODB.RecordSet

Private Sub Form_Load()
    Dim strSQL As String
    
    Set cn = New ADODB.Connection
    cn.CursorLocation = adUseServer
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                          "Data Source=c:\hogehoge.mdb"
    cn.Open
        
    strSQL = "SELECT * FROM address"
    rs.Open strSQL, cn, adOpenStatic, adLockOptimistic, adCmdText
End Sub

Private Sub Command1_Click()
   If rs.BOF = True Then
      rs.MoveFirst
   Else
      rs.MovePrevious
   End If
End Sub

Private Sub Command2_Click()
   If rs.EOF = True Then
      rs.MoveLast
   Else
      rs.MoveNext
   End If
End Sub


LESIA  2005-09-28 23:39:01  No: 125794

修正
rs.Open strSQL, cn, adOpenStatic, adLockOptimistic, adCmdText
の前に
Set rs New ADODB.RecordSet
を追加してください。


みなと  2005-09-29 00:19:12  No: 125795

お返事ありがとうございます。
LESIAさんのアドバイスのおかげで、悩んでた事は理解できました。
ですが、実際に、「前」コマンドボタン(ここではCommand1)に
コードを入れてみたのですが、
エラー文で

”オブジェクト変数またはWITHブロック変数が設定されていません”

と表示されました。
ヘルプ機能を使ってみてもいまいちどこを直したらいいのか
わかりません。
申し訳ないのですが、ご指導をおねがいします。


名無し  2005-09-29 00:36:39  No: 125796

>Set rs New ADODB.RecordSet

これを入れてないとかいうオチがないことを祈る


みなと  2005-09-29 00:41:29  No: 125797

・・・「前」ボタンには入れるの忘れていました。
ですが、入れてやってみたら今度は

”オブジェクトが閉じている間は操作は許可されません”

と出ました。


ree  2005-09-29 04:11:46  No: 125798

ボタンを押すたびにnewをかけてるからですかね
Form_Loadでしかオープン書いてないですし


みなと  2005-09-29 18:53:13  No: 125799

無事解決しました。
今回は、表示するという事が抜けていたため
テキストボックスに表示されてませんでした。

みなさんの参考しつつ、このようにコードを記入しましたら
解決しました。

Private Sub Command2_Click()
    '** 一つ前のレコードを表示。それ以上前がなければメッセージボックスにより
    '**  「前は存在しません」
  
   If Not rs.BOF Then rs.MovePrevious
   
   If rs.BOF And rs.RecordCount > 0 Then
       MsgBox "もうデータがありません"
   Else
       Text1.Text = rs(1)
       Text2.Text = rs(3)
       Text3.Text = rs(4)
       Text4.Text = rs(5)
   End If

End Sub

このコードは「前」操作のことです。

みなさん色々ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加