VB6将数据分配给数据库中的变量
问题描述:
我被要求对VB6项目进行更改。我遇到的问题是我试图从Access数据库获取一些数据并将数据分配给一些变量。VB6将数据分配给数据库中的变量
我已经得到了代码:
Dta_Period.DatabaseName = DB_Accounts_Name$
Dta_Period.RecordSet = "SELECT * FROM [Period]"
Dta_Period.Refresh
表Period
包含2场。 sMonth
和Period
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
答
遍历记录并填写与月份名称和月份数字阵列。
这假定记录集返回不超过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
'...
这是你到达那里的一些奇怪的代码。你正在设置一个等于一个字符串的记录集?通常情况下,您可以“直到Recordset.EOF”循环遍历记录集,但我怀疑这是您正常使用的正常DAO或ADO记录集。如果你想要一个特定的答案,你将不得不分享足够的代码,以便我们理解发生了什么。 –
我认为你应该能够做到这样的事情:https://msdn.microsoft.com/en-us/library/bb243789(v=office.12).aspx – Jeremy
是否有任何机会的记录集包装类? –