【问题标题】:Missing comma error error inserting sql through access 2010 vba通过访问 2010 vba 插入 sql 时缺少逗号错误错误
【发布时间】:2015-11-20 14:47:55
【问题描述】:

遇到了有史以来最奇怪的问题。我确实有一个 sql insert 语句,它可以在 sql 中正常工作。当我将该 sql 放入 vba 时,它在我的电脑上运行良好。但是,它不起作用并显示 sql 错误:缺少逗号。哪里有问题???我使用 Access 2010 plus,其他人使用相同的 Access 版本并具有相同的 ODB 连接(DSN 服务器)。一些代码示例:

   sql = "Driver={Microsoft ODBC for Oracle}; " & _
        "CONNECTSTRING=(DESCRIPTION=" & _
        "(ADDRESS=(PROTOCOL=TCP)" & _
        "(HOST= ODB)(PORT=1520))" & _
        "(CONNECT_DATA=(SERVICE_NAME=ABTL))); uid=IN; pwd=XXX;"

  Set con = New ADODB.Connection
  Set rec = New ADODB.Recordset
  Set cmd = New ADODB.Command
  con.Open sql

        Set db = CurrentDb()
        Set rst = db.OpenRecordset(strSQL)

Do While Not rst.EOF

insetSQL = con.Execute(" INSERT INTO STOCK (PNM_AUTO_KEY, PN, DESCRIPTION, HISTORICAL_FLAG, qty_oh, qty_adj, qty_available, CTRL_NUMBER, CTRL_ID, receiver_number, rec_date, serial_number,pcc_auto_key, cnc_auto_key, loc_auto_key, whs_auto_key, unit_cost, adj_cost, stc_auto_key, visible_mkt, remarks, ifc_auto_key, exp_date, unit_price, tagged_by, tag_date, owner, PART_CERT_NUMBER,ORIGINAL_PO_NUMBER, SHELF_LIFE, CTS_AUTO_KEY, MFG_LOT_NUM, AIRWAY_BILL )" & _
                                    "  VALUES ( " & rst![minimumas] & ", '" & rst![pn] & "', '" & "FROM_SCRIPT" & "', '" & "F" & "'," & rst![qty_oh] & "," & rst![qty_oh] & "," & rst![qty_oh] & "," & "G_STM_CTRL_NUMBER.nextval" & "," & "1" & ", '" & rst![receiver_number] & "', " & " TO_DATE('" & rst![rec_date] & "','YYYY-MM-DD'), '" & rst![serial_number] & "'," & rst![pcc_auto_key] & "," & rst![cnc_auto_key] & "," & rst![loc_auto_key] & "," & rst![whs_auto_key] & "," & rst![unit_cost] & "," & rst![unit_cost] & "," & "1" & ",'" & "T" & "', '" & rst![remarks] & "'," & _
                                      "1" & ", " & " TO_DATE('" & rst![exp_date] & "','YYYY-MM-DD'), " & "0" & ",'" & rst![TAGGED_BY] & "', " & " TO_DATE('" & rst![tag_date] & "','YYYY-MM-DD'), '" & "" & "', '" & rst![PART_CERT_NUMBER] & "', '" & rst![ORIGINAL_PO_NUMBER] & "', '" & rst![SHELF_LIFE] & "', " & rst![CERT_SOURCE] & ", '" & rst![MFG_LOT_NUM] & "', '" & rst![AIRWAY_BILL] & "'" & " )")

Loop 

【问题讨论】:

  • 你说它在 VBA 中工作得很好,但是有一个错误。它是否“除非”你做某事?
  • 你能把它看起来像一个字符串。所以我们可以看看是否有任何变量添加了导致问题的东西?
  • 看起来很长。我认为您应该尝试添加换行符/续行符。
  • 您好,vba 代码在我的机器上运行良好,但在其他计算机上无法运行,导致 oracle 错误缺少逗号。所以如果这里的值是错误的,它也不会在我的机器上工作。甚至尝试更改计算机区域设置但它不起作用

标签: sql vba ms-access oracle11g ms-access-2007


【解决方案1】:

可能是字符串数据类型的记录集字段之一具有包含逗号但您没有将其视为字符串的值。

例如

VALUES ( " & rst![minimumas] & ",

以上代码不能包含任何逗号。

您确定记录集中的所有字符串字段都已附加到 SQL 字符串中,并带有 ' 。

我们需要查看是否创建了导致错误的 sql 字符串。请按要求提供。

================================================ ==========

PART 2 查看导致错误的 SQL

替换

 insetSQL = con.Execute(

与 错误继续下一步 strMySQl = 执行语句中当前使用的字符串 insetSQL = con.Execute(strMySQl) 如果 err.number 0 那么 停止 debug.print err.number, err.description debug.print strMySQl 结束如果

然后将打印在即时窗口中的 sql 字符串发布到该站点。

我还建议您将您机器上生成的 SQL 字符串与其他机器进行比较 - 以防万一发生了奇怪的事情。

【讨论】:

  • 您好,vba 代码在我的机器上运行良好,但在其他计算机上无法运行,导致 oracle 错误缺少逗号。所以如果这里的值是错误的,它也不会在我的机器上工作。甚至尝试更改计算机区域设置但它不起作用
  • 其他机器是否引用了相同的 ADO 库?另一台机器是否使用saem oracle帐户? oracle设置是否相同?生成的 SQL 文本是否相同? (你能发布创建的 SQl 文本吗。)
  • SQL 文本发布在顶部,我用来插入额外的列,机器具有相同的 ADO 库并且使用相同的 oracle 帐户。难道是因为访问版本?尽管我们确实安装了 Office 2010 plus,但是当我打开访问权限时,它会在我的电脑上显示 Access 2007-2010,而其他人则显示 Access 2010
  • 访问版本可能是问题,但在进一步考虑之前,我认为可以进行进一步调查 - 请参阅我的答案的第 2 部分
  • 发现问题!!!在 DSN 选项中还有区域设置,应在哪里确定浮点数的十进制符号。由于每台电脑的区域设置可能不同,因此更改 dsn 中的区域设置可以解决问题;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多