访问使用带有数组

时间:2016-05-16 16:09:19

标签: arrays vba ms-access access-vba

我试图在vba中使用FindFirst命令来访问数组,该数组包含用户名,我想搜索一个表并找到数组中每个用户名的ID。但我一直在"编译错误:类型不匹配"每当我按下访问表单上的搜索按钮。

有什么想法吗? - 它也看起来像我正确地将数组传递给下一个私人子?

当我创建username()数组时,我尝试使用数组搜索的位开始。

Private Sub createrel_Click()
'declare variables
    Dim stDocName As String, db As Database, RS As Recordset, FindPraNumber As String
    Dim vary As Variant
    Dim Msg As String
    Dim Response As Integer
    Dim username() As String
    Dim varx() As Variant

    If IsNull(Me![userlist]) Then
      Msg = "Please choose a pra number from the list"
      MsgBox Msg, vbCritical, MsgText
      DoCmd.GoToControl "userlist"
      Exit Sub
    End If

    If IsNull(Me![folderlist]) Then
      Msg = "Please choose a folder from the list"
      MsgBox Msg, vbCritical, MsgText
      DoCmd.GoToControl "folderlist"
      Exit Sub
    End If

    username() = Split(Me.userlist, ",")
    MsgBox Join(username())
    Set db = DBEngine(0)(0)

    Set RS = db.OpenRecordset("tblPra", DB_OPEN_DYNASET)
      RS.FindFirst "[praNo] = """ & username() & """"
      varx() = DLookup("praID", "tblPra", "[praNo] = 'username()'")

    Set RS = db.OpenRecordset("tblFolder", DB_OPEN_DYNASET)
      RS.FindFirst "[folder] = """ & Me.folderlist & """"
      vary = DLookup("folderID", "tblFolder", "[folder] = " & "forms!frmrelationship!folderlist")

    Response = MsgBox("You are about to create a relationship. Continue?", vbYesNo)
    If Response = vbNo Then
      Exit Sub
    Else
      cmdAddRecord varx(), vary
    End If
End Sub

Private Sub cmdAddRecord(x(), y)

   Dim stDocName As String, db As Database, RS As Recordset, FindPraNumber As String
   Dim exists As Boolean
   Dim total As Integer

   Set db = DBEngine(0)(0)
   Set RS = db.OpenRecordset("tblRelationship", DB_OPEN_DYNASET)

   exists = False
   If Not RS.EOF Then RS.MoveLast
   total = RS.RecordCount

   'check to see if relationship exists already
   RS.FindFirst "[praID] = " & x() & ""

   If RS.NoMatch Then

     exists = False

   Else

      If RS("folderID") = y Then
        exists = True

      Else

        For i = 1 To total Or exists = True
         RS.FindNext "[praID] = " & x & ""
         If RS.NoMatch Then
         Else
         If RS("folderID") = y Then exists = True
         End If
        Next i

      End If

   End If

   If exists = False Then
     RS.addNew
     RS("praID").Value = x
     RS("folderID").Value = y
     RS.Update
     Msg = "Relationship has now been created"
     MsgBox Msg, vbInformation, MsgText
   Else
     Msg = "Relationship already exists"
     MsgBox Msg, vbCritical, MsgText
   End If


End Sub

1 个答案:

答案 0 :(得分:3)

你不能这样做:

varx() = DLookup("praID", "tblPra", "[praNo] = 'username()'")

您无法使用DLookup分配数组,DLookup无法提取ID数组,username()应为username(n),并且用户名的连接错误。事实上,这句话中唯一有效的部分是“tblPra”和“[praNo] =”。

重新考虑你的概念。当直接记录集或查询可以完成工作时,没有理由使问题复杂化。