2016-05-16 52 views
0

我试图用vba中的FindFirst命令访问一个数组,该数组包含用户名,并且我想通过一个表进行搜索并找到每个用户名的ID阵列。但是当我按下访问表单上的搜索按钮时,我总是收到“编译错误:类型不匹配”。访问使用FindFirst命令与数组

任何想法? - 它是否看起来像我正确地传递数组到下一个私人子?

当我创建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 
+0

我想你需要加入数组作为连接(username(),“或”)也许,但为什么不只是使用SQL记录集,这些作为标准? –

回答

3

你不能做到这一点:

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

您不能分配使用使用DLookup阵列,使用DLookup不能拉一组ID,用户名()应该是用户名(N) ,并且用户名的连接是错误的。事实上,这句话中唯一有效的部分是“tblPra”和“[praNo] =”。

重新思考你的概念。当直接记录或查询可以完成这项工作时,没有理由使事情复杂化。

+0

+一个用于“重新思考你的概念”。 @PaulMachin:你这样做太复杂了。 – Andre