2017-10-17 14 views
0

私はVB6プロジェクトを変更するように求められました。私が抱えている問題は、Accessデータベースからデータを取得し、そのデータをいくつかの変数に割り当てることです。VB6データベースから変数にデータを割り当てる

私は、コードを持っている:

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

EDITは自分自身との答えを提供しようと、誰の両方に従うことは、物事をシンプルにするために、私は、コードを変更しました。

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

これはあなたがそこにある奇妙なコードです。レコードセットを文字列に設定していますか?通常、レコードセットをループするために 'Do Until 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 
'... 
関連する問題