VB6将数据分配给数据库中的变量

时间:2017-10-17 11:57:12

标签: ms-access vb6 recordset

我被要求对VB6项目进行更改。我遇到的问题是我试图从Access数据库中获取一些数据并将数据分配给某些变量。

我已经获得了代码:

Dta_Period.DatabaseName = DB_Accounts_Name$
Dta_Period.RecordSet = "SELECT * FROM [Period]"
Dta_Period.Refresh

Period包含2个字段。 sMonthPeriod sMonth字段包含1月到12月的月份。 Period字段存储数字0到11,表示已分配给客户财政年度中哪个月的数字。 1月可能是0,或者可能是11,基本上。

我需要知道哪个月与哪个时期有关,这就是我从数据库中选择这些数据的原因。但是,我一直坚持下一步该做什么。

如何循环RecordSet(如果可能的话?)并找出每个月分配的号码?

我认为我无法使用Do Until循环。是否更容易使用12个单独的查询,然后创建一个字符串数组和一个整数数组,然后循环遍历字符串数组,直到找到正确的月份,在整数上使用相同的数组索引?

编辑1

为了让自己和任何试图提供答案的人都能更容易理解,我修改了代码。

Dim rstPeriod As DAO.RecordSet
Dim accDB As DAO.Database

' DB_Session is a Workspace, whilst DB_Accounts_Name$ is the name of the DB I am using
Set accDB = DB_Session.OpenDatabase(DB_Accounts_Name$)

SQL = "SELECT * FROM [Period] ORDER BY [Period]"

Set rstPeriod = accDB.OpenRecordset(SQL, dbOpenDynaset)

If rstPeriod.BOF = False Then
   rstPeriod.MoveFirst
End If

Dim strMonth(11) As String
Dim pNumber(11) As Integer

伪代码的想法:

Do Until rstPeriod.EOF
   Select Case currentRow.Field("Month")
     Case "January"
       strMonth(0) = "January"
       pNumber(0) = currentRow.Field("Number")
     Case "February"
       strMonth(1) = "February"
       pNumber(1) = currentRow.Field("Number")
    End Select
Loop

1 个答案:

答案 0 :(得分:0)

循环记录集并使用月份名称和月份编号填充数组。

这假设记录集返回的记录不超过12条。

Public Sub LoopThroughtRecordset()
    On Error GoTo ErrorTrap

    Dim rs As DAO.Recordset
    Set rs = CurrentDb().OpenRecordset("SELECT * FROM [Period] ORDER BY [Period]", dbOpenSnapShot)
    With rs
        If .EOF Then GoTo Leave
        .MoveLast
        .MoveFirst
    End With

    Dim strMonth(11) As String
    Dim pNumber(11) As Integer

    Dim idx As Long
    For idx = 0 To rs.RecordCount -1
        strMonth(idx) = rs![Month]
        pNumber(idx) = rs![Number]
        rs.MoveNext
    Next idx

Leave:
    On Error Resume Next
        rs.Close
    Set rs = Nothing
    On Error GoTo 0
    Exit Sub

ErrorTrap:
    MsgBox Err.Description, vbCritical, CurrentDb.Properties("AppTitle")
    Resume Leave
End Sub

'strMonth(0) = January
'strMonth(1) = February
'...
'pNumber(0) = 1
'pNumber(1) = 2
'...