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

问题描述:

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

我已经得到了代码:

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

Period包含2场。 sMonthPeriod sMonth字段包含月份 - 月份 - 月份。 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 
+0

这是你到达那里的一些奇怪的代码。你正在设置一个等于一个字符串的记录集?通常情况下,您可以“直到Recordset.EOF”循环遍历记录集,但我怀疑这是您正常使用的正常DAO或ADO记录集。如果你想要一个特定的答案,你将不得不分享足够的代码,以便我们理解发生了什么。 –

+1

我认为你应该能够做到这样的事情:https://msdn.microsoft.com/en-us/library/bb243789(v=office.12).aspx – Jeremy

+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 
'...