Ms access 运行时错误“3061”参数太少。预期3

Ms access 运行时错误“3061”参数太少。预期3,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我知道以前有人问过这个问题,但我所看到的问题都有点不同。我正在创建一个临时表,导入数据,将数据放在现有表中,并删除临时表。这是我的密码: Dim db As Database Dim StrSql As String Dim rst As Recordset Set db = CurrentDb() If DCount("[Name]", "MSysObjects", "[Name] = 'tblInfoLink'") = 1 Then DoCmd.DeleteObject acTa

我知道以前有人问过这个问题,但我所看到的问题都有点不同。我正在创建一个临时表,导入数据,将数据放在现有表中,并删除临时表。这是我的密码:

Dim db As Database
Dim StrSql As String
Dim rst As Recordset

Set db = CurrentDb()

If DCount("[Name]", "MSysObjects", "[Name] = 'tblInfoLink'") = 1 Then
    DoCmd.DeleteObject acTable, "tblInfoLink"
    StrSql = "SELECT tblStaff.LastName, tblStaff.FirstName, tblStaff.Rank, tblStaff.PriPhone, " _
            & " tblStaff.SecPhone, tblStaff.HireDate INTO tblInfoLink " _
            & " FROM [\\Server\BE.accdb].tblStaff " _
            & " WHERE (((tblInfo.LastName)=[tblInfo].[LastName]) AND ((tblInfo.FirstName)=[tblInfo].[FirstName]) AND ((tblInfo.HireDate)=[tblInfo].[HireDate]));"
    db.Execute StrSql
ElseIf DCount("[Name]", "MSysObjects", "[Name] = 'tblInfoLink'") = 0 Then
    StrSql = "SELECT tblStaff.LastName, tblStaff.FirstName, tblStaff.Rank, tblStaff.PriPhone, " _
            & " tblStaff.SecPhone, tblStaff.HireDate INTO tblInfoLink " _
            & " FROM [\\Server\BE.accdb].tblStaff " _
            & " WHERE (((tblStaff.LastName)=[tblInfo].[LastName]) AND " _
            & " ((tblStaff.FirstName)=[tblInfo].[FirstName]) AND ((tblStaff.HireDate)=[tblInfo].[HireDate]));"
    db.Execute StrSql
End If

StrSql = "Update tblInfo Set PriPhone = Null, SecPhone = Null"
db.Execute StrSql

StrSql = "INSERT Into tblInfo (PriPhone, SecPhone) " _
        & " SELECT tblInfoLink.PriPhone, tblInfoLink.SecPhone " _
        & " FROM tblInfoLink " _
        & " WHERE (((tblInfoLink.LastName)=[tblInfo].[LastName]) AND " _
            & " ((tblInfoLink.FirstName)=[tblInfo].[FirstName]) AND ((tblInfoLink.HireDate)=[tblInfo].[HireDate]));"
db.Execute StrSql

'Delete Linked Tables
DoCmd.DeleteObject acTable, "tblInfoLink"
一旦我尝试运行它,我得到的运行时错误“3061”参数太少。预期3。当我点击debug时,高亮区域是:

执行StrSql

我知道结束后,如果一切正常。实际上,这其中最重要的部分是不起作用的


有什么想法吗?提前谢谢

好的,过去几天我做了一些修改。这就是我现在所在的地方

dimdb作为数据库 作为字符串的Dim StrSql 将rst设置为记录集

退出工作人员: Set db=Nothing

基本上这就是我想要发生的。
我运行这个命令,它将清空所有当前电话号码,连接到服务器上的数据库,收集所有主要和次要电话号码,并将它们插入到包含相同SSN的行中。我可以开始使用SSN作为插入到特定行中所需的唯一标准,而不是名字、姓氏和雇用日期。我希望这是有意义的。

只是想让大家知道,我终于明白了

Dim db As Database<br>
Dim StrSql As String<br>
Dim tblCount As Integer<br>

Const cstrPrompt As String = "Are you sure you want to start the import process? Yes/No"
If MsgBox(cstrPrompt, vbQuestion + vbYesNo) = vbYes Then
    Set db = CurrentDb()`

'Link to Lt's Database to retrieve Phone Numbers

    StrSql = "UPDATE tblInfo SET PriPhone = Null, SecPhone = Null;"
    db.Execute StrSql

    On Error Resume Next
    DoCmd.DeleteObject acTable, "tblPhone"

    StrSql = "CREATE TABLE tblPhone " _
        & " (SSN CHAR, PriPhone CHAR (20), SecPhone CHAR(20));"
        db.Execute StrSql

     StrSql = "INSERT INTO tblPhone (SSN, PriPhone, SecPhone) " _
            & " SELECT ClockNbrId, PriPhone, SecPhone " _
            & " FROM [\\Server\BE.accdb].tblStaff; "
    db.Execute StrSql

StrSql = "UPDATE tblInfo INNER JOIN tblPhone ON tblInfo.SSN = tblPhone.SSN" _
    & " SET tblInfo.PriPhone = [tblPhone].[PriPhone], tblInfo.SecPhone = [tblPhone].[SecPhone] " _
    & " WHERE (((tblInfo.SSN)=[tblPhone].[SSN])); "
    db.Execute StrSql

    DoCmd.DeleteObject acTable, "tblPhone"

Const cstrPrompt2 As String = "The import process is complete"
If MsgBox(cstrPrompt2, vbOKOnly, "Import Complete!") = vbOK Then
    Me.ImportDel.Enabled = False
    Me.ImportDel.Caption = "Import Complete"

Exit_SyncStaff:
Set db = Nothing

Else
    Cancel = True
End If

End If`

谢谢大家的帮助。我想发布解决方案,以便将来如果有问题,其他人可以参考。似乎我的问题是内部连接。谢谢你的建议

尝试使用Debug.Print StrSql或MsgBox StrSql在行前检查查询,我相信您会发现问题,它正好显示了我正在执行的SQL语句。从[\\Server\BE.accdb].tblStaff中选择LastName、FirstName、Rank、PriPhone、SecPhone、HireDate进入tblOfcInfoLink,其中tblStaff.LastName=[tblInfo].[LastName]和tblStaff.FirstName=[tblInfo].[FirstName]和tblStaff.HireDate=[tblInfo].[HireDate];您是否使用了Debug.Print StrSql?我假设我做得对。我这样做了,当我点击debug时,按下Ctrl+G键,这就是即时消息中显示的内容Window@keongkenshih,我刚刚做了一些编辑,我很确定问题出在WHERE语句中。
Dim db As Database<br>
Dim StrSql As String<br>
Dim tblCount As Integer<br>

Const cstrPrompt As String = "Are you sure you want to start the import process? Yes/No"
If MsgBox(cstrPrompt, vbQuestion + vbYesNo) = vbYes Then
    Set db = CurrentDb()`

'Link to Lt's Database to retrieve Phone Numbers

    StrSql = "UPDATE tblInfo SET PriPhone = Null, SecPhone = Null;"
    db.Execute StrSql

    On Error Resume Next
    DoCmd.DeleteObject acTable, "tblPhone"

    StrSql = "CREATE TABLE tblPhone " _
        & " (SSN CHAR, PriPhone CHAR (20), SecPhone CHAR(20));"
        db.Execute StrSql

     StrSql = "INSERT INTO tblPhone (SSN, PriPhone, SecPhone) " _
            & " SELECT ClockNbrId, PriPhone, SecPhone " _
            & " FROM [\\Server\BE.accdb].tblStaff; "
    db.Execute StrSql

StrSql = "UPDATE tblInfo INNER JOIN tblPhone ON tblInfo.SSN = tblPhone.SSN" _
    & " SET tblInfo.PriPhone = [tblPhone].[PriPhone], tblInfo.SecPhone = [tblPhone].[SecPhone] " _
    & " WHERE (((tblInfo.SSN)=[tblPhone].[SSN])); "
    db.Execute StrSql

    DoCmd.DeleteObject acTable, "tblPhone"

Const cstrPrompt2 As String = "The import process is complete"
If MsgBox(cstrPrompt2, vbOKOnly, "Import Complete!") = vbOK Then
    Me.ImportDel.Enabled = False
    Me.ImportDel.Caption = "Import Complete"

Exit_SyncStaff:
Set db = Nothing

Else
    Cancel = True
End If

End If`