【问题标题】:Allow for empty values in an array允许数组中的空值
【发布时间】:2019-08-01 14:45:23
【问题描述】:

我正在编写一个程序来读取条形码。我需要读取 QR 条码(带有数组)以及具有一个值的常规条码。

截至目前,该代码将不接受除 QR/Array 条形码以外的任何内容。

该程序用于接受两个条形码,但不会将任何 QR 条形码信息插入到表中,除了 Array(0)。无论我扫描的是普通条码(仅包含产品名称)还是包含多个值的 QR 条码,表格中只会显示名称。

我现在编辑了 SQL INSERT INTO 语句以插入所有 QR 条形码数组值。问题是执行扫描的表单将不再接受常规条形码(只是产品名称)。

我尝试添加“OR ''”来说明可能的空值,但表单仍然不接受这个。

这里是我定义数组的地方:

fValue = Split(Me.txtScanArea.Value, ",")
BCName = fValue(0)
LotNo = fValue(1)
Serial = fValue(2)
Exp = fValue(3)
Weight = fValue(4)
SName = fValue(5)

对应的SQL语句。

sql = "INSERT INTO dbo_ScanLog (Lot, Type, " & _
      "Serial, ScanName, ScanProcess, ScanLot, Expired, " & _
      "Weight, SPN, ScanWarning, Loc, Category, ScanCount, ScanDate) " & _
      "VALUES('" & pbl_Lot & "','" & _
      pbl_Name & "','" & Serial & "' OR '','" & _
      BCName & "',1,'" & LotNo & "' OR '','" & Exp & "' OR '','" & _
      Weight & "' OR '','" & SName & "' OR '','" & _
      msg & "','C','F'," & _
      iCount & ",#" & Now() & "#)"

InsertDB (sql)

它将接受 QR 条形码(读作:ProName,J0801-2019,SN123456,2019.12.25,5,123456,2019.08.01),但不接受常规条形码(读作:ProName)。

当我在 Access 表单中输入常规条形码的信息时,按 Enter 键甚至不会尝试将信息插入数据库。它只是位于表单条目中,而插入 QR 扫描并按 Enter 会将其添加到我们的数据库中。

【问题讨论】:

  • 测试 fValue 的 ubound 并在此基础上运行两个不同的插入 SQL 语句会更干净。
  • 所以你是说不要定义每个数组值?只保留 "fValue = Split(Me.txtScanArea.Value, ",")" 语句?我仍然不知道如何将其拆分为两个不同的插入语句。换句话说,是什么将一个与另一个区分开来。我希望这对你有意义。

标签: sql vba ms-access


【解决方案1】:

你可以这样做:

Dim SQL1 As String, SQL2 As String, fValue

SQL1 = "INSERT INTO dbo_ScanLog (Lot, Type, " & _
      "Serial, ScanName, ScanProcess, ScanLot, Expired, " & _
      "Weight, SPN, ScanWarning, Loc, Category, ScanCount, ScanDate) " & _
      "VALUES"

fValue = Split(Me.txtScanArea.Value, ",")

If UBound(fValue) = 0 Then      '2d barcode
    SQL2 = "('" & fValue(0) & "',null, null, null " 'etc etc
ElseIf UBound(fValue) = 5 Then  'QR with 6 values
    SQL2 = "('" & fValue(0) & "',' & fvalue(1) ','" & fValue(2) & "'," 'etc etc
Else
    MsgBox "Unknown scan format!"
    Exit Sub
End If

InsertDB (SQL1 & SQL2)

不过,使用参数比将 SQL 构建为字符串更可取。

【讨论】:

    【解决方案2】:

    谢谢你,蒂姆! UBound 正是我在这种情况下所需要的。不幸的是,我以前从未听说过。感谢您的快速回复!

    我确实通过使用 Len 函数的 If 语句使其工作,但在这种情况下 UBound 更准确​​。

    我最终选择了 if Else 语句。例如:“If UBound(fValue) > 1 Then”后跟一条 SQL 语句,“Else”后跟另一个带有空白值 ​​('') 的 SQL 语句。

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多