2017-10-17 1 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

편집은 자신과 답변을 제공하기 위해 시도하는 사람 모두에 따를 것을 간단하게하기 위해, 나는 코드를 수정했습니다.

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