現在、VB6.0でAccess内にあるデータを呼び出すプログラムを作っています。
フォーム上には、コマンドボタン四つ(検索・前・次・更新)、そしてテキストボックスが四つ(名前。住所・電話番号・誕生日)が設置してあります。
検索ボタンによりAccess内にあるデータをADODBを使うことによってデータを
取ってくることには成功しました。
ですが、その際にレコードセットを閉じてしまい、「前」・「次」ボタンを押してもレコードが移動しなくなりました。
実際現在の検索コードです。
Option Explicit
Private Type MemoryStatus
dwfirstname As String
dwname As String
dwaddress As String
dwphone As String
dwbirthday As Date
End Type
Private memInfo() As MemoryStatus
Private test As ADODB.Connection
________________________________________________________________
Private Sub Command1_Click()
'** レコードの検索、もし検索した名前がなければメッセージボックスにより
'** 「一致する名前がありません」と出力
Dim SQL As String 'SQL文を保持
Dim rs As New ADODB.Recordset
'SQLを使い、データベースにあるデータを取りに行きます
SQL = "SELECT * FROM test Where firstname like '"
SQL = SQL & Text1.Text
SQL = SQL & "%'"
Set test = New ADODB.Connection
test.Open ("AddressBookConnection")
Set rs = New ADODB.Recordset
rs.Open SQL, test, adOpenStatic, adLockOptimistic
If rs.BOF Then
'データなし
MsgBox "一致する名前はありません"
Else
'データあり
Label5.Caption = rs(0)
Text1.Text = rs(1)
Text2.Text = rs(3)
Text3.Text = rs(4)
Text4.Text = rs(5)
End If
END Sub
調べた結果、ユーザー定義により自分で変数を作るまでは理解したのですが、
その後がわかりません。それと、配列を使ってコードを記述したいのです。
何かアドバイスをお願いします。
まず、マルチしないことを学ばれた方がいいかと思います。
http://www7.big.or.jp/~pinball/discus/vb/59705.html
検索結果が複数ある場合に、レコードの移動をしたいのでしょうか?
ならばMoveNextメソッド等で対応できるのではないかと思います。
前ボタンと次ボタンのがどのような記述をしているかわかりませんので
なんとも言えませんが、、、
#同じコードみたいだし、ピッコロさんなのかな?|o_o;
まずマルチはやめましょう。
それと、あちらのサイトにはちゃんと「知らずに」マルチしてしまった事への
謝罪をいたしましょう。
さて・・・ユーザー定義?配列?
何故使いたいのかわからないけど、使わない方法。
Dim rs As New ADODB.Recordset
を
Private rs As ADODB.Recordset
と書き換え、(General)の部分に移動しましょう。
(どのプロシージャにも属さないとこ)
または、標準モジュールを追加して、そこに
Public rs As ADODB.Recordset
としてもよいです。
そうすると、このCommand1_Click以外からでも
Set rs = Nothing
しない限り使えますので、Command1_Clickで検索結果をレコードセットに格納した後であれば、前ボタン、次ボタンなどで
rsオブジェクトのMoveNextメソッドを実行する事によってカレントレコードの移動が出来ます。
#でもこれってあまりに基本中の基本なので、
もしこれを判ってないのであればこの後も厳しいかな?
きちんとrsオブジェクトの後始末やら、検索結果を格納する前の
移動ボタンの制御やら・・・・
ツイート | ![]() |