2017-10-17 169 views
0

我被要求對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

是否有任何機會的記錄集包裝類? –

回答

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 
'... 
相關問題