2013-06-05 54 views
0

將csv導入MYSQL數據庫以更新現有數據時出現問題。導入新數據的工作正常,只是更新錯誤。通過VBScript的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的經驗。

感謝

回答

1

你的查詢只使用文字字符串CSVRoomCSVLocation等,而不是它們的值。 $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, 
    ... 

所以如果房間''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 & "'" 
+0

謝謝,這工作完美。如果字段爲空,那麼在commandtext中有沒有更新的方法? –

+0

你是指每列?例如,更新'房間',除非它是空白的,更新'位置',除非它是空的,等等。通過「空白」,你的意思是一個零長度的列值,或者你的意思是'NULL'?或者呢? –

+0

是正確的,如果它是空白或爲空,我不想覆蓋當前的內容。 –