2017-03-29 51 views
0

我需要帮助确定为什么在尝试在Microsoft Access中运行此代码时出现此语法错误。我正在研究这个数据库的工作,并有一些经验,但不是很多。在INSERT INTO语句中获取语法错误

我创建了一个数据库之前,我目前正在工作,它工作正常。它与我现在正在处理的数据库非常相似,因此我只复制它,然后重命名字段和文本框以及所有与数据库将要处理的信息相匹配的内容。

本质上,我有一个数据表,然后我想要一个表格,每个表格中的每个字段都有一个文本框,其中包含一个主表的子表。用户使用信息填充文本框,然后将其添加到表中,或者可以单击记录并编辑它或使用表单上的相应按钮将其删除。

现在我得到一个运行时错误'3134':当试图点击我的窗体上的添加按钮时,INSERT INTO语句中的语法错误。这只发生在添加按钮上,因此更新按钮(如果它被设置为更新)发生,但所有其他按钮都正常工作。

这里是新数据库的代码:

Option Compare Database 

Private Sub cmdAdd_Click() 
    'when we click on button Add there are two options 
    '1. for insert 
    '2. for update 
    If Me.txtICN.Tag & "" = "" Then 
     'this is for insert new 
     'add data to table 
     CurrentDb.Execute "INSERT INTO tblInventory(ICN, manu, model, serial, desc, dateRec, dateRem, dispo, project, AMCA, UL, comments) " & _ 
     " VALUES(" & Me.txtICN & ", '" & Me.txtManu & "', '" & Me.txtModel & "', '" & Me.txtSerial & "', '" & Me.txtDesc & "', '" & Me.txtDateRec & "', '" & Me.txtDateRem & "', '" & Me.txtDispo & "', '" & Me.txtProject & "', '" & Me.txtAMCA & "', '" & Me.txtUL & "', '" & Me.txtComments & "')" 
    Else 
     'otherwise (Tag of txtICN store the ICN of item to be modified) 
     CurrentDb.Execute "UPDATE tblInventory " & _ 
     " SET ICN = " & Me.txtICN & _ 
     ", manu = '" & Me.txtManu & "'" & _ 
     ", model = '" & Me.txtModel & "'" & _ 
     ", serial = '" & Me.txtSerial & "'" & _ 
     ", desc = '" & Me.txtDesc & "'" & _ 
     ", dateRec = '" & Me.txtDateRec & "'" & _ 
     ", dateRem = '" & Me.txtDateRem & "'" & _ 
     ", dispo = '" & Me.txtDispo & "'" & _ 
     ", project = '" & Me.txtProject & "'" & _ 
     ", AMCA = '" & Me.txtAMCA & "'" & _ 
     ", UL = '" & Me.txtUL & "'" & _ 
     ", comments = '" & Me.txtComments & "'" & _ 
     " WHERE ICN = " & Me.txtICN.Tag 
    End If 

    'clear form 
    cmdClear_Click 
    'refresh data in list on form 
    frmInventorySub.Form.Requery 
End Sub 

Private Sub cmdClear_Click() 
    Me.txtICN = "" 
    Me.txtManu = "" 
    Me.txtModel = "" 
    Me.txtSerial = "" 
    Me.txtDesc = "" 
    Me.txtDateRec = "" 
    Me.txtDateRem = "" 
    Me.txtDispo = "" 
    Me.txtProject = "" 
    Me.txtAMCA = "" 
    Me.txtUL = "" 
    Me.txtComments = "" 

    'focus on ID text box 
    Me.txtICN.SetFocus 
    'set button edit to enable 
    Me.cmdEdit.Enabled = True 
    'change caption of button add to Add 
    Me.cmdAdd.Caption = "Add" 
    'clear tag on txtICN for reset new 
    Me.txtICN.Tag = "" 
End Sub 

Private Sub cmdClose_Click() 
    DoCmd.Close 
End Sub 

Private Sub cmdDelete_Click() 
    'delete record 
    'check existing selected record 
    If Not (Me.frmInventorySub.Form.Recordset.EOF And Me.frmInventorySub.Form.Recordset.BOF) Then 
     'confirm delete 
     If MsgBox("Are you sure you want to delete this item?", vbYesNo) = vbYes Then 
      'delete now 
      CurrentDb.Execute "DELETE FROM tblInventory " & _ 
       "WHERE ICN =" & Me.frmInventorySub.Form.Recordset.Fields("ICN") 
      'refresh data in list 
      Me.frmInventorySub.Form.Requery 
     End If 
    End If 
End Sub 

Private Sub cmdEdit_Click() 
    'check whether there exists data in list 
    If Not (Me.frmInventorySub.Form.Recordset.EOF And Me.frmInventorySub.Form.Recordset.BOF) Then 
     'get data to text box control 
     With Me.frmInventorySub.Form.Recordset 
      Me.txtICN = .Fields("ICN") 
      Me.txtManu = .Fields("manu") 
      Me.txtModel = .Fields("model") 
      Me.txtSerial = .Fields("serial") 
      Me.txtDesc = .Fields("desc") 
      Me.txtDateRec = .Fields("dateRec") 
      Me.txtDateRem = .Fields("dateRem") 
      Me.txtDispo = .Fields("dispo") 
      Me.txtProject = .Fields("project") 
      Me.txtAMCA = .Fields("AMCA") 
      Me.txtUL = .Fields("UL") 
      Me.txtComments = .Fields("comments") 
      'store id of item in Tag of txtICN in case ICN is modified 
      Me.txtICN.Tag = .Fields("ICN") 
      'change caption of button add to Update 
      Me.cmdAdd.Caption = "Update" 
      'disable button edit 
      Me.cmdEdit.Enabled = False 
     End With 
    End If 
End Sub 

这里是旧数据库的代码:

Option Compare Database 

Private Sub cmdAdd_Click() 
    'when we click on button Add there are two options 
    '1. for insert 
    '2. for update 
    If Me.txtID.Tag & "" = "" Then 
     'this is for insert new 
     'add data to table 
     CurrentDb.Execute "INSERT INTO tblEquipmentList(equipID, equipDesc, equipManu, equipModelNum, equipSerNum, lastCalDate, calDue) " & _ 
     " VALUES(" & Me.txtID & ", '" & Me.txtDesc & "', '" & Me.txtManu & "', '" & Me.txtModelNum & "', '" & Me.txtSerNum & "', '" & Me.txtLastCalDate & "', '" & Me.txtCalDueDate & "')" 
    Else 
     'otherwise (Tag of txtID store the id of equipment to be modified) 
     CurrentDb.Execute "UPDATE tblEquipmentList " & _ 
     " SET equipID = " & Me.txtID & _ 
     ", equipDesc = '" & Me.txtDesc & "'" & _ 
     ", equipManu = '" & Me.txtManu & "'" & _ 
     ", equipModelNum = '" & Me.txtModelNum & "'" & _ 
     ", equipSerNum = '" & Me.txtSerNum & "'" & _ 
     ", lastCalDate = '" & Me.txtLastCalDate & "'" & _ 
     ", calDue = '" & Me.txtCalDueDate & "'" & _ 
     " WHERE equipID = " & Me.txtID.Tag 
    End If 

    'clear form 
    cmdClear_Click 
    'refresh data in list on form 
    frmEquipmentListSub.Form.Requery 
End Sub 

Private Sub cmdClear_Click() 
    Me.txtID = "" 
    Me.txtDesc = "" 
    Me.txtManu = "" 
    Me.txtModelNum = "" 
    Me.txtSerNum = "" 
    Me.txtLastCalDate = "" 
    Me.txtCalDueDate = "" 

    'focus on ID text box 
    Me.txtID.SetFocus 
    'set button edit to enable 
    Me.cmdEdit.Enabled = True 
    'change caption of button add to Add 
    Me.cmdAdd.Caption = "Add" 
    'clear tag on txtID for reset new 
    Me.txtID.Tag = "" 
End Sub 

Private Sub cmdClose_Click() 
    DoCmd.Close 
End Sub 

Private Sub cmdDelete_Click() 
    'delete record 
    'check existing selected record 
    If Not (Me.frmEquipmentListSub.Form.Recordset.EOF And Me.frmEquipmentListSub.Form.Recordset.BOF) Then 
     'confirm delete 
     If MsgBox("Are you sure you want to delete this piece of equipment?", vbYesNo) = vbYes Then 
      'delete now 
      CurrentDb.Execute "DELETE FROM tblEquipmentList " & _ 
       "WHERE equipID =" & Me.frmEquipmentListSub.Form.Recordset.Fields("equipID") 
      'refresh data in list 
      Me.frmEquipmentListSub.Form.Requery 
     End If 
    End If 
End Sub 

Private Sub cmdEdit_Click() 
    'check whether there exists data in list 
    If Not (Me.frmEquipmentListSub.Form.Recordset.EOF And Me.frmEquipmentListSub.Form.Recordset.BOF) Then 
     'get data to text box control 
     With Me.frmEquipmentListSub.Form.Recordset 
      Me.txtID = .Fields("equipID") 
      Me.txtDesc = .Fields("equipDesc") 
      Me.txtManu = .Fields("equipManu") 
      Me.txtModelNum = .Fields("equipModelNum") 
      Me.txtSerNum = .Fields("equipSerNum") 
      Me.txtLastCalDate = .Fields("lastCalDate") 
      Me.txtCalDueDate = .Fields("calDue") 
      'store id of equipment in Tag of txtID in case id is modified 
      Me.txtID.Tag = .Fields("equipID") 
      'change caption of button add to Update 
      Me.cmdAdd.Caption = "Update" 
      'disable button edit 
      Me.cmdEdit.Enabled = False 
     End With 
    End If 
End Sub 

正如你所看到的,我很有信心,他们”除了字段名外,几乎完全相同。

我也在这里连接数据库的屏幕截图的专辑:http://imgur.com/a/xLV3Q

感谢所有帮助你们可以提供。

+0

是ICN绝对是一个数字字段和其他字段字符串?你有任何样本数据? – finjo

回答

1

问题可能是: 您的新表tblInventory有一列DESC这是一个SQL保留关键字。您有两种选择:

  1. 删除列DESC并创建具有不同名称OR的新列;
  2. 将括号添加到脚本中,如下所示:INSERT INTO tblInventory([ICN], [manu], [model], [serial], [desc], [dateRec], [dateRem], [dispo], [project], [AMCA], [UL], [comments])

请检查SQL保留关键字的完整列表:Reserved Keywords-Transact-SQL

+0

这是它的男人,非常感谢你!你不知道我有多久一直用头撞墙。 –

+0

现在解决了一个小问题。它只会让我添加一条记录。如果我填入文本框并添加一条记录,然后尝试重复该过程并添加另一条记录,则一旦我单击添加,它就会像运行该过程一样闪烁,但没有任何反应 - 没有添加任何记录。任何想法我能做些什么来解决这个问题? –

+0

忽略我以前的评论,这是我现在遇到的问题:现在遇到一个小问题,现在已修复。它只会让我添加一条记录。如果主表中已有记录,则不会添加记录。如果表格是空白的,然后我尝试添加一条记录,那么它就可以工作。任何想法如何我可以解决这个问题? –

相关问题