VB6.0 ユーザー定義を使って


みなと  2005-10-01 00:24:04  No: 125905

現在、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

調べた結果、ユーザー定義により自分で変数を作るまでは理解したのですが、
その後がわかりません。それと、配列を使ってコードを記述したいのです。
何かアドバイスをお願いします。


マルチ  2005-10-01 01:21:20  No: 125906

まず、マルチしないことを学ばれた方がいいかと思います。
http://www7.big.or.jp/~pinball/discus/vb/59705.html


KG  2005-10-01 09:57:32  No: 125907

検索結果が複数ある場合に、レコードの移動をしたいのでしょうか?

ならばMoveNextメソッド等で対応できるのではないかと思います。

前ボタンと次ボタンのがどのような記述をしているかわかりませんので
なんとも言えませんが、、、

#同じコードみたいだし、ピッコロさんなのかな?|o_o;


瘋癲  2005-10-04 02:18:03  No: 125908

まずマルチはやめましょう。
それと、あちらのサイトにはちゃんと「知らずに」マルチしてしまった事への
謝罪をいたしましょう。

さて・・・ユーザー定義?配列?
何故使いたいのかわからないけど、使わない方法。

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オブジェクトの後始末やら、検索結果を格納する前の
移動ボタンの制御やら・・・・


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




  


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