Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Access SQL复制表单上显示的部分记录,将其插入新记录所在的表中,并在表单上显示新记录_Sql_Ms Access 2010_Insert Into - Fatal编程技术网

MS Access SQL复制表单上显示的部分记录,将其插入新记录所在的表中,并在表单上显示新记录

MS Access SQL复制表单上显示的部分记录,将其插入新记录所在的表中,并在表单上显示新记录,sql,ms-access-2010,insert-into,Sql,Ms Access 2010,Insert Into,我继承了一个Microsoft Access 2010数据库,用于将职位/员工信息保存在一个表中。表中的每个记录都有一个自动编号字段。该数据库有一个表单——ScreenB,它使用查询根据用户输入的搜索条件(人员编号、姓氏、社会保险号等)在ScreenB中提取并显示一条记录。该记录包含大约25个字段,显示有关该职位以及该职位人员的信息。当然,偶尔会有一个人离开某个职位,而另一个人则会被雇佣到这个空缺的职位上。我的用户希望屏幕B上有一个按钮,单击该按钮时: 复制表单中显示的记录信息,仅用于屏幕B上显

我继承了一个Microsoft Access 2010数据库,用于将职位/员工信息保存在一个表中。表中的每个记录都有一个自动编号字段。该数据库有一个表单——ScreenB,它使用查询根据用户输入的搜索条件(人员编号、姓氏、社会保险号等)在ScreenB中提取并显示一条记录。该记录包含大约25个字段,显示有关该职位以及该职位人员的信息。当然,偶尔会有一个人离开某个职位,而另一个人则会被雇佣到这个空缺的职位上。我的用户希望屏幕B上有一个按钮,单击该按钮时:

  • 复制表单中显示的记录信息,仅用于屏幕B上显示的12个左右的位置信息字段
  • 将信息粘贴为表中的新记录
  • 在表单中显示包含粘贴信息的新记录
  • 由于查询只提取一条记录,所以我的想法是创建一个新表单——ScreenC——在所有方面都与ScreenB相同,以显示新记录。因此,按钮将从ScreenB上显示的记录中复制位置信息,将其作为新记录粘贴到表中,打开ScreenC,跳转到表中记录的末尾,并在ScreenC上显示新(最后)记录(仅包含位置信息),然后关闭ScreenB,只给用户留下职位信息和可以填写员工信息的表单。这将保留前一位员工在该职位上的信息,这是必需的

    我不是训练有素的程序员,因此下面的代码可能充满了错误,但这是我能想到的最好的:

    Dim strSQL as String
    strSQL = "INSERT INTO [tblNewCurrent Emp] (numCostCenter, numPosition, txtTitles, txtClassCode. numGrade, txtPositionType, txtUnit1, txtFieldStaff, txtFedMatch, txtPositionLicReq, txtPositionOrigin, datPosAcquired, datPosLastVacated, datPosTransferred, txtOrigTitle, txtOrigClassCode, numOrigGrade, datPosReclassified) "
    strSQL = strSQL & "SELECT numCostCenter, numPosition, txtTitles, txtClassCode. numGrade, txtPositionType, txtUnit1, txtFieldStaff, txtFedMatch, txtPositionLicReq, txtPositionOrigin, datPosAcquired, datPosLastVacated, datPosTransferred, txtOrigTitle, txtOrigClassCode, numOrigGrade, datPosReclassified from [tblNewCurrent Emp] "
    strSQL = strSQL & "WHERE (numSystemNumber = " & Me.numSystemNumber & ")"
    DoCmd.RunSQL (strSQL)
    DoCmd.OpenForm frmScreenC
    DoCmd.GoToRecord , , acLast
    DoCmd.Close frmScreenB
    
    该表名为“TBLNEWCURENT Emp”,这就是我将其放在括号中的原因。numSystemNumber是自动编号字段的名称。所有表单、查询和表都位于一个数据库/文件中。上面代码中的字段名是字段的实际名称

    当我试图运行代码时,会收到一条错误消息,上面写着“INSERT INTO语句中的语法错误”。没有其他信息,Access帮助系统中也没有任何信息。我尝试从表名中删除括号,并得到相同的错误消息。如有任何意见、想法或建议,我将不胜感激。INSERT INTO语句有什么错误?有没有其他方法来完成这项任务?不幸的是,我不能对数据库进行结构更改,因为它是许多其他数据库的后端,所以更改表名也不是一个选项。用户仅通过表单访问数据库。没有数据表或其他视图。谢谢

    编辑:谢谢billmac1和Remou。“…,txtClassCode.numGrade,…”是SQL上的问题。一旦我纠正了这一点,我就根据您的建议在即时窗口中使用print.debug运行代码。运行良好,所以剩下的就是清理用于打开和关闭表单的VBA代码。对于其他尝试相同操作的人,我还将ScreenC设置为打开Load属性中的最后一条记录。它现在工作得很好。下面是完成的代码

    Dim strSQL As String
    strSQL = "INSERT INTO [tblNewCurrent Emp] (numCostCenter, numPosition, txtTitles, txtClassCode, numGrade, txtPositionType, txtUnit1, txtFieldStaff, txtFedMatch, txtPositionLicReq, txtPositionOrigin, datPosAcquired, datPosLastVacated, datPosTransferred, txtOrigTitle, txtOrigClassCode, numOrigGrade, datPosReclassified) "
    strSQL = strSQL & "SELECT numCostCenter, numPosition, txtTitles, txtClassCode, numGrade, txtPositionType, txtUnit1, txtFieldStaff, txtFedMatch, txtPositionLicReq, txtPositionOrigin, datPosAcquired, datPosLastVacated, datPosTransferred, txtOrigTitle, txtOrigClassCode, numOrigGrade, datPosReclassified FROM [tblNewCurrent Emp] "
    strSQL = strSQL & "WHERE (numSystemNumber = " & Me.numSystemNumber & ")"
    DoCmd.RunSQL (strSQL)
    DoCmd.OpenForm "frmScreen C"
    DoCmd.Close acForm, "frmScreen B"
    

    此网站太新,无法将此作为评论,但您的SQL字符串的一部分引起了我的注意“…,txtClassCode.numGrade,…”。字段字符串和值字符串中都有句点和空格

    正如Remou所建议的那样,“…尝试debug.print strSQL并将结果粘贴到查询设计窗口中以检查问题。”您可能会发现,只需获取语句的SELECT部分并使其正常工作,然后尝试INSERT部分也会很有好处