MS Access SQL复制表单上显示的记录的一部分,插入到与新记录相同的表中,并在表单上显示新记录

时间:2014-05-07 20:36:14

标签: sql ms-access-2010 insert-into

我继承了一个Microsoft Access 2010数据库,用于将位置/员工信息保存在单个表中。该表具有每个记录的自动编号字段。数据库有一个表单 - ScreenB - 它使用查询在ScreenB中根据用户输入的搜索条件(人员编号,姓氏,社会安全号码等)拉取并显示单个记录。该记录包含大约25个字段,显示有关位置的信息以及有关该职位的人员的信息。当然,每隔一段时间,一个人就会离开一个职位,其他人将被雇用到空出的位置。我的用户想要在ScreenB上点击一个按钮,点击后:

  1. 复制表格中显示的记录信息,仅显示在ScreenB上显示的12个左右的位置信息字段。
  2. 将信息粘贴为表格中的新记录。
  3. 使用表单中的粘贴信息显示新记录。
  4. 由于查询提取单个记录,我的想法是创建一个新表单 - 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
    

    该表名为“tblNewCurrent Emp”,这就是我将其放在括号中的原因。 numSystemNumber是自动编号字段的名称。所有表单,查询和表都在一个数据库/文件中。上面代码中的字段名称是字段的实际名称。

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

    编辑:谢谢billmac1和Remou。 “...,txtClassCode。numGrade,...”是SQL上的问题。一旦我纠正了这个问题,我就用你的建议在立即Windows中使用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"
    

1 个答案:

答案 0 :(得分:1)

这个网站太新了,不能把这个留作评论,但是你的一部分SQL字符串引起了我的注意“......, txtClassCode.numGrade ,......”。字段字符串和值字符串中都有一个句点和一个空格。

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