2013-02-20 35 views
4

我的VBA很生锈,我似乎在画空白。如果它很重要,我正在使用MS Access 2010。如何使用VBA循环访问MS Access记录集并将变量分配给结果?

我有一个查询返回两个字段(Field1是文本和Field2是双)和五个记录的结果,我想根据Field1中的内容将Field2值分配给五个不同的变量。对我而言,这是某种情况下的陈述 - 我如何在VBA上做记录集?

Private Sub test() 

    Dim myRS As DAO.Recordset 
    Dim db As Database 
    Dim strSQL As String 
    Dim v1, v2, v3, v4, v5 As Double 

    ' Pretend strSQL is a different query that gives five records 

    Set dbs = CurrentDb 
    strSQL = "SELECT Field1, BigNumber FROM tmp1" 
    Set myRS = dbs.OpenRecordset(strSQL) 

    Do While Not myRS.EOF 
     v1 = ?   ' I want v1 = Field2 when Field1="A" 
     v2 = ?   ' I want v2 = Field2 when Field1="B" 
     v3 = ?   ' I want v3 = Field2 when Field1="C" 
     v4 = ?   ' I want v4 = Field2 when Field1="D" 
     v5 = ?   ' I want v5 = Field2 when Field1="E" 
    Loop 

    End Sub 

非常感谢!

+1

你在用做变量v1-v5?我想我比循环数据集有更好的解决方案,但我需要知道最终的游戏是什么。 – JohnFx 2013-02-20 16:48:28

回答

0

在这种情况下,你可能也只是使用使用DLookup,忘了记录:

v1 = DLookUp("BigNumber","tmp1","Field1='A'") 
v2 = DLookUp("BigNumber","tmp1","Field1='B'") 

<...> 
+0

问题是,我的SQL语句比从一个表中提取数据复杂得多,我只是简化了这个问题。 – user918967 2013-02-20 15:51:02

+0

如果你的sql更复杂,应该可以构建它以返回5列,或以明确的方式返回数据。几乎任何事情都比走记录集更好。 – Fionnuala 2013-02-20 15:55:44

+0

如果我返回五列,那么我仍然需要将结果分配给五个变量,或者我只是做5个查询并将结果分配给变量 - 这是肯定的更多的打字。 – user918967 2013-02-20 16:04:52

5
Private Sub test() 

Dim myRS As DAO!Recordset 
Dim db As Database 
Dim strSQL As String 
Dim v1, v2, v3, v4, v5 As Double 

' Pretend strSQL is a different query that gives five records 

Set dbs = CurrentDb 
strSQL = "SELECT Field1, BigNumber FROM tmp1" 
Set myRS = dbs!OpenRecordset(strSQL) 

Do While Not myRS!EOF 
    Select Case myRS.Fields(0) 
    Case "A" 
     v1 = myRS.Fields(1) 
    Case "B" 
     v2 = myRS.Fields(1) 
    Case "C" 
     v3 = myRS.Fields(1) 
    Case "D" 
     v4 = myRS.Fields(1) 
    Case "E" 
     v5 = myRS.Fields(1) 
    End Select 
Loop 
+0

嗨,我收到一个错误,说明Field1是一个无法找到的方法或数据成员。 – user918967 2013-02-20 15:49:58

+0

我已经更新了代码。现在试试。 – 2013-02-20 15:51:26

+0

我必须删除!从代码是这样的一个问题?它仍然给我同样的错误。 – user918967 2013-02-20 16:00:46

1

我认为你缺少MoveNext

Do While Not rec.EOF 
    rec.MoveNext 
Loop 
相关问题