0

将 csv 导入 MYSQL 数据库以更新现有数据时遇到问题。导入新数据工作正常,只是更新错误。

`CSVSerial = arrServiceList(0)
CSVAssetTag = arrServiceList(1)
CSVLocation = arrServiceList(2)
CSVRoom = arrServiceList(3)
CSVCheckedOutTo = arrServiceList(4)

commandText = "Update Inventory Set Room = CSVRoom, Location = CSVLocation, AssetTag = CSVAssetTag, CheckedOutTo = CSVCheckedOutTo where SerialNumber = CSVSerial"`

我试过做 $CSVSerial, '$CSVSerial', 'CSVSerial',他们似乎不认识他们中的任何一个。如果我做一个

Msgbox (CSVSerial & "," & CSVRoom & "," & CSVLocation & "," & CSVAssettag & "," & CSVCheckedOutTo) 

那里的所有数据都是正确的。我敢肯定这很简单,只是没有很多 MySQL 经验。

谢谢

4

1 回答 1

1

您的查询仅使用文字字符串CSVRoom,CSVLocation等,而不是它们的值。这$CSVSerial在 VB 中不起作用——那是 PHP 的事情(加上一些其他语言)。此外,如果这些是字符串值,则需要用单引号括起来。尝试这样的事情:

commandText = "Update Inventory Set Room = '" & CSVRoom & "', " & _
    "Location = '" & CSVLocation & "', " & _
    "AssetTag = '" & CSVAssetTag & "', " & _
    "CheckedOutTo = '" & CSVCheckedOutTo & "' where SerialNumber = '" & CSVSerial & "'"

我假设所有的列都是字符串。如果有数字,您不需要在它们周围加上单引号,但它们也不应该受到伤害。


附录:后续问题是如何仅在列为空或不为空时更新列。

要测试空白或空值,您可以使用如下条件:

Room IS NULL OR Room = ''

...或像这样:

COALESCE(Room, '') = ''

第二个较短,因此我将继续使用它,因为命令行变得很长。基本的 MySQL 命令如下所示:

UPDATE Inventory SET
  Room = CASE WHEN COALESCE(Room, '') = '' THEN Room ELSE 'new value' END,
  ...

因此,如果 Room 是''NULL它被设置为现有的''NULL值。如果不是,则将其设置为新值。

这是它在 VBScript 中的外观。这是未经测试的,因为我没有可用的 VBScript。

commandText = "UPDATE Inventory SET " & _
  "Room = CASE WHEN COALESCE(Room, '') = '' THEN Room ELSE '" & CSVRoom & "' END, " & _
  "Location = CASE WHEN COALESCE(Location, '') = '' THEN Location ELSE '" & CSVLocation & "' END, " & _
  "AssetTag = CASE WHEN COALESCE(AssetTag, '') = '' THEN AssetTag ELSE '" & CSVAssetTag & "' END, " & _
  "CheckedOutTo = CASE WHEN COALESCE(CheckedOutTo, '') = '' THEN CheckedOutTo ELSE '" & CSVCheckedOutTo & "' END " & _
  "WHERE SerialNumber = '" & CSVSerial & "'"
于 2013-06-05T19:49:27.120 回答