'====================================================
'VB6 Access.mdb + DAO を使ったキュークラス
'====================================================
'DAO 3.6 Object Lib を参照設定します
'VBの開発環境でクラスモジュールに Queue という名前で保存します
'c:\log.mdbというファイルを作成し、logTableというテーブルを追加します
'以下のようなテーブルデザインにします
'
'QueueTable : テーブル
'_________________________
'|  フィールド名  |  データ型  |
'-------------------------
'|    num     |  通貨型  |←キーにしてもよい
'|    data    |  テキスト型  |
'-------------------------
'
'使用方法
'-----------------------------------
'値の追加
'Private Sub Command1_Click()
'    Dim obj As New Queue
'    obj.init ("c:\test.mdb")    'キュークラスの初期設定
'    If (obj.getEmpty()) Then    'キューに値があれば
'        Form1.Caption = obj.pop '値の取り出し
'    End If
'    Set obj=Nothing
'End Sub
'-----------------------------------
'値の取り出し
'Private Sub Command2_Click()
'    Dim obj As New Queue
'    obj.init ("c:\test.mdb")    'キュークラスの初期設定
'    obj.push (Text1.Text)       '値を追加する
'    Set obj=Nothing
'End Sub
'-----------------------------------

Option Explicit

Const tableName As String = "QueueTable"
Private filename As String

Dim MyDB As Database

'クラスの初期化
Public Sub init(FilePath As String)
    filename = FilePath
End Sub

'値がたまっているかどうかの確認
Public Function getEmpty() As Boolean
    Call connect
    Dim count As Integer
    count = MyDB.OpenRecordset(tableName).RecordCount  'レコードの総数を出す
    If count = 0 Then getEmpty = False Else getEmpty = True
    Call unconnect
End Function

'値を追加
Public Sub push(data As String)
    Call connect
    '--------------レコードの追加---------------
    Dim num As String
    num = CStr(MaxNo() + 1)
    
    MyDB.Execute "INSERT INTO " & tableName & " (num,data) VALUES ('" & num & "','" & data & "');"

    Call unconnect
End Sub

'値を取り出し
Public Function pop() As String
    Call connect
        
    Dim RecPos As Recordset
    Set RecPos = MyDB.OpenRecordset("SELECT * FROM " & tableName & " WHERE (((num)=(SELECT MIN(num) AS MinNo FROM " & tableName & ")));")
    pop = RecPos![data]
    RecPos.Delete
    RecPos.Close
    Set RecPos = Nothing
    Call unconnect
End Function

'データベースへの接続
Private Sub connect()
    On Error GoTo start
start:
    Set MyDB = OpenDatabase(filename) 'データーベースファイルのオープン、フルパスの指定が必要
    On Error GoTo 0
End Sub

'データベースの切断
Private Sub unconnect()
    MyDB.Close
    Set MyDB = Nothing
End Sub

'現在のTable.numの最大値を返します
Private Function MaxNo() As Currency
    On Error GoTo err
        Dim RecPos As Recordset
        Set RecPos = MyDB.OpenRecordset("SELECT * FROM " & tableName & " WHERE (((num)=(SELECT MAX(num) AS MinNo FROM " & tableName & ")));")
        MaxNo = RecPos![num]
        RecPos.Close
        Set RecPos = Nothing
errEnd:
    On Error GoTo 0
Exit Function
err:
    MaxNo = 0
    GoTo errEnd
End Function



▲トップページ > Visual BASIC と C#