我可以使用字符串数组作为记录集中的键吗?

时间:2012-05-08 13:55:06

标签: arrays ms-access vba

我在Access数据库中有这个小VBA脚本。我想做很多场比较。在其他语言中,我可以创建一个键数组,然后使用for..each循环来测试每个键。像这样:

string[] myKeys = { "key1", "key2", "key3" };
foreach(string myKey in myKeys)
{
    if(myRecordset!myKey == myTable!myKey) DoSomething()
}

我在VBA中试过这个,但它给了我运行时错误'3265':使用以下代码时在此集合中找不到项目:

For Each myKey In myKeys
    If Not IsNull(myR![myKey]) Then Me.Recordset![myKey] = myR![myKey]
Next myKey

我在VBA中尝试做什么?

2 个答案:

答案 0 :(得分:2)

如果您想引用名称存储在变量myKey中的字段的值,请使用此...

myR.Fields(myKey)

无论您的记录集是DAO还是ADO对象,都可以使用。

错误3265,“此集合中找不到项目”,不是对阵列的投诉。它告诉你你的记录集没有字段,其文字名称是“myKey”。也许这段代码会让它更清晰。它的编写没有错误。取消前两条Debug.Print行中的任何一行都会触发错误3265.

Public Sub foo()
    Const myKey As String = "id"
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSelect As String
    strSelect = "SELECT id FROM MyTable;"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSelect)
    'Debug.Print rs![myKey]
    'Debug.Print rs!myKey
    Debug.Print rs.Fields(myKey)
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

答案 1 :(得分:0)

不确定你在这里要做什么。 “key1”是字段名还是值? 当你写myR![myKey]时,myKey是一个字段名。

如果它应该是一个值,那么你将得到错误。例如,如果“key1”,“key2”,“key3”是员工ID号(比如10,20和30),那么你试图做的就是问IsNull(myR![10]),因为那里有没有名为10的字段,它会出错。

希望这有帮助。