みなとと申します。よろしくお願いします。
現在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はテーブル名です。
何かアドバイスをお願いいたします。
それとできれば、レコードの先頭にきて、なお「前」
コマンドボタンを押すと、メッセージボックスを出現させたいのです。
お忙しいと思いますが、よろしくお願いいたします。
> **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
修正
rs.Open strSQL, cn, adOpenStatic, adLockOptimistic, adCmdText
の前に
Set rs New ADODB.RecordSet
を追加してください。
お返事ありがとうございます。
LESIAさんのアドバイスのおかげで、悩んでた事は理解できました。
ですが、実際に、「前」コマンドボタン(ここではCommand1)に
コードを入れてみたのですが、
エラー文で
”オブジェクト変数またはWITHブロック変数が設定されていません”
と表示されました。
ヘルプ機能を使ってみてもいまいちどこを直したらいいのか
わかりません。
申し訳ないのですが、ご指導をおねがいします。
>Set rs New ADODB.RecordSet
これを入れてないとかいうオチがないことを祈る
・・・「前」ボタンには入れるの忘れていました。
ですが、入れてやってみたら今度は
”オブジェクトが閉じている間は操作は許可されません”
と出ました。
ボタンを押すたびにnewをかけてるからですかね
Form_Loadでしかオープン書いてないですし
無事解決しました。
今回は、表示するという事が抜けていたため
テキストボックスに表示されてませんでした。
みなさんの参考しつつ、このようにコードを記入しましたら
解決しました。
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
このコードは「前」操作のことです。
みなさん色々ありがとうございました。
ツイート | ![]() |