【问题标题】:Compile error:Argument not optional编译错误:参数不是可选的
【发布时间】:2009-07-13 15:14:52
【问题描述】:

编译错误:参数不是可选的

执行以下查询时出现上述错误:

DoCmd.RunSQL = "insert into tblContract (Empid,testid,Start1,Finish1,Store1,Start2,Finish2,Store2 )values ('" & Me.txtEmpNo.Value & "','" & Me.txtAutoNumber.Value & "','" & Me.txtContSunStart1.Value & "', '" & Me.txtContSunFinish1.Value & "','" & Me.txtContSunStore1.Value & "','" & Me.txtContSunStart2.Value & "', '" & Me.txtContSunFinish2.Value & "','" & Me.txtContSunStore2.Value & "')"

请帮忙

【问题讨论】:

  • 这看起来很眼熟。和以前一样,你能告诉我们你的表的数据类型吗?另外,您能否发布一个带有 确实 工作的文字值的 INSERT 语句。

标签: sql ms-access vba


【解决方案1】:
  1. DoCmd.RunSQL 是一种方法而非属性。您不执行“DoCmd.RunSQL = SomeSQL”您执行“DoCmd.RunSQL someSQL”(无等号)。
  2. DoCmd.RunSQL 的错误处理能力很差,并且返回的错误消息信息量不大。您会发现使用 CurrentDB.Execute 更容易调试或捕获错误

【讨论】:

  • 另一种选择是我的SQLRun函数,它可以透明地替换DoCmd.RunSQL,如果用作函数也返回RecordsAffected:stackoverflow.com/questions/343396/…
  • NOI 但这有点像重新发明轮子。我不确定每个电话都需要包装。我想在某些情况下可能有意义。
【解决方案2】:

你真的有DoCmd.RunSQL = someString 吗?那里有=?不会这样……

【讨论】:

    【解决方案3】:

    假设您的语法正确,您很可能有一个需要值的字段,但您已从目标字段列表中省略。这是表格设计器中的一个字段,在“常规”选项卡中将“必填”设置为Yes

    如果您认为不是这样,我可能需要更多有关架构或查询的信息。

    【讨论】:

      【解决方案4】:

      这可能不是问题。但是您可能希望确保您的输入不包含单引号。例如,如果 Me.txtContSunStore1 等于“Bob's Store”之类的内容,则该行会报错。虽然它可能会给你一个不同的错误。

      我通常使用基于数据类型清理数据的函数来包装所有 SQL 值。

      【讨论】:

        【解决方案5】:

        尝试在之前添加空格。

        正如 Oorang 所说,删除 = 符号

        编辑:另外请检查每个字段是否为文本类型。我猜 Empid 和 testid 字段是数字......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          相关资源
          最近更新 更多