我被要求对VB6项目进行更改。我遇到的问题是我试图从Access数据库中获取一些数据并将数据分配给某些变量。
我已经获得了代码:
Dta_Period.DatabaseName = DB_Accounts_Name$
Dta_Period.RecordSet = "SELECT * FROM [Period]"
Dta_Period.Refresh
表Period
包含2个字段。 sMonth
和Period
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
答案 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
'...