我对我将要提出的问题进行了一些阅读,但我无法找到具体的答案。
我正在VBScript中编写一个程序,它将读取一个excel文件,然后更新一个Access数据库。
它运作良好,但我可以预见到的问题是:
excel文件在指定字段上有空白时会发生什么?我不希望脚本文件更新"空白"对于数据库,如果excel文件中有空白,我希望它在数据库中保持不变。如果没有,请照常进行。
目前,它会将此作为空白读取并将空白插入数据库中的行。
这可能吗?对于脚本基本上忽略它读取的字段(在Excel中)是空白的,而只更新(在数据库中)实际上有数据(在Excel中)的字段?
目前,它在数据库中的字段中说不。这只是一个简短的代码示例。在Excel工作表中,它在正确的列中显示“是”。
Do Until objExcel.Cells(intRow,1).Value = ""
asset_Tag = objExcel.Cells(intRow, 1).Value
ebay = objExcel.Cells(intRow, 2).Value
intRow = intRow + 1
objRecordSet.Open "UPDATE Test SET Listed_Ebay = '" & ebay & "' WHERE Asset_Tag = '" & asset_Tag & "'", _
objConnection
Loop
答案 0 :(得分:0)
如果您不愿意在代码中添加20个If
语句,那么您肯定可以使用Excel的本机COUNTA
功能来确保在更新操作之前有20个值。
With objExcel
Do Until .Cells(intRow,1).Value = ""
If .Application.CountA(.Cells(intRow, 1).Resize(1, 20)) = 20 Then
asset_Tag = .Cells(intRow, 1).Value
ebay = .Cells(intRow, 2).Value
objRecordSet.Open "UPDATE Test SET Listed_Ebay = '" & ebay & "' WHERE Asset_Tag = '" & asset_Tag & "'", objConnection
End if
intRow = intRow + 1
Loop
End With
我猜了一下哪些 20个值是要填充的,但我想你可以理解。
EDITNOTE¹:根据循环重新排序代码行以维护 intRow 。
编辑注意事项²:如果新值的UPDATE
为零,您可能需要有条件地将原始值传回LEN
查询。
Dim qry as String
qry = "UPDATE Test SET " & _
"Listed_Ebay = Iif(CBool(Len('" & ebay & "')), '" & ebay & "', Listed_Ebay), " & _
"Listed_Amazon = Iif(CBool(Len('" & amzon& "')), '" & amzon & "', Listed_Amazon), " & _
"Listed_POS = Iif(CBool(Len('" & pos& "')), '" & pos & "', Listed_POS) " & _
"WHERE Asset_Tag = '" & asset_Tag & "'"
objRecordSet.Open qry, objConnection
我只是通过你提供的原始一个字段示例制作东西,但你应该能够为你自己的8个字段转录它。我在这里使用LEN
文字值,但将数字与零(甚至是LEN
进行比较也是合适的。