【问题标题】:Microsoft Access VBA INSERT SQL statementMicrosoft Access VBA INSERT SQL 语句
【发布时间】:2017-09-02 22:10:20
【问题描述】:

我在 Microsoft access 中创建了一个数据库,并使用它创建了一个表单。
我在表单上附加了一个按钮,当单击它时,我想在表中插入一条新记录 customerHeader
该表中有四个字段,其中一个是自动编号。在我的 SQL 语句中,我没有包含 orderNumber,因为它是一个自动字段。
当我尝试单击按钮并执行 on click 事件时,我收到一条错误消息,指出 Microsoft Access 无法在追加查询中追加记录。

任何想法,我到处寻找,但我无法找到解决方案。

Private Sub addOrder_Click()
    Dim mySql As String
    Dim rowNum As Integer
    Dim recCount As Long
    Dim orderNumber As Long
    Dim myBool As Boolean


    Dim todayDate As Date

    todayDate = CDate(Date)

    myBool = False


    MsgBox todayDate

    rowNum = Form.CurrentRecord
    rowNum = CInt(rowNum - 1)



    'DoCmd.GoToRecord , , acNewRec
    mySql = "INSERT INTO orderHeader (orderDate,custNumber,printed) VALUES (" & todayDate & "," & rowNum & "," & myBool & ")"

    DoCmd.RunSQL mySql

    Me!orderNum.Requery

【问题讨论】:

  • SQL 本身就可以工作,尽管您可能希望在日期周围添加 # - (#" & todayDate & "#,"(您可能还需要根据您所在的地区调整日期格式 - 我Access 中的讨厌日期)。它给出的确切信息是什么?通常它会说 - MS Access set x field(s) to Null due to a type conversion failure, and it didn't add x record(s).....
  • 它明确表示“由于类型转换失败,Microsoft 访问将 0 字段设置为 Null,并且由于键违规,它没有向表中添加 1 条记录,0 条记录(s) 由于锁定违规,以及由于验证规则违规导致的 0 条记录”。我会尝试在日期中添加#

标签: ms-access


【解决方案1】:

您不需要太多 - 只需使用 ISO 序列作为日期值的字符串表达式格式:

mySql = "INSERT INTO orderHeader (orderDate,custNumber,printed) VALUES (#" & Format(todayDate, "yyyy\/mm\/dd") & "#," & rowNum & "," & myBool & ")"

但是,它是今天,只需使用:

mySql = "INSERT INTO orderHeader (orderDate,custNumber,printed) VALUES (Date()," & rowNum & "," & myBool & ")"

【讨论】:

  • 我刚刚尝试过,不幸的是,我遇到了与以前相同的错误。
  • 然后发生了其他事情。尝试手动插入值并找到有问题的值。
  • “键违规”表示您尝试在具有唯一索引的字段中插入重复值。
  • 由于某种原因,我的“myBool”变量处理不正确,所以我摆脱了该变量并使用“false”,它开始工作。感谢您的建议和帮助解决这个问题!
  • 太棒了!周末愉快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多