每當我嘗試使用日期格式的主鍵作為“where-attribute”通過 excel-vba 更新 SQL 資料庫中的表時,執行 SQLQuery 時會出現語法錯誤;在我的示例中:“.1900”附近的語法錯誤。但是,當我使用 1900er 數字格式在 sql 中創建一個表來表示日期時(因為 excel 保存日期:1 = 01.01.1900;2 = 02.01.1900 等),請根據我的 excel 中的格式設定日期列-sheet,用于在 SQL 中更新表,并運行完全相同的代碼,沒有出現錯誤,并且 SQL 表得到更新。這是我使用的代碼的摘錄。
strWhere = "[Date] = " & strDate
SQLQuery = "update " & TableNameSql & " " & _
"set " & _
"[Column1Data] = '" & strColumn1Data & "' " & _
"Where " & strWhere
兩個選項的 SQLQuery 的 debug.print 如下所示:
更新 TableNameSql 設定 [Column1Data] = '-0,1149' 其中 [Date] = 02.01.1900 '錯誤
update TableNameSql set [Column1Data] = '-0,1149' Where [Date] = 2 '沒有錯誤
我相信這可能與日期(strWhere)中的點有關。也可能是由于 excel 和 SQL-Server 中的語言設定不同而導致問題出現。但是,創建表并將資料從 SQL 匯出到 Excel 是沒有問題的。
我發現提出了不同的類似問題,但是,沒有一個答案適合我的具體問題。
使用 1900er-Date-Format 在實踐中也沒有用,所以我想在使用常規日期時修復這個錯誤。
uj5u.com熱心網友回復:
考慮使用 ISO 日期格式YYYY-MM-DD,您可以使用 VBA 進行格式化,Format()假設strDate是 VBADate型別。此外,請務必用單引號括起來。
strWhere = "[Date] = '" & Format(strDate, "YYYY-MM-DD") & "'"
更好地考慮引數化并避免任何參考或連接,例如允許您對齊資料型別的ADO 命令:
' PREPARED STATEMENT WITH QMARKS
SQLQuery = "UPDATE " & TableNameSql & " " & _
"SET [Column1Data] = ? " & _
"WHERE [Date] = ?"
' ... LOAD ADO CONNECTION ...
Set cmd = New ADODB.Command
With cmd
.Activeconnection= conn
.CommandText = SQLQuery
.commandType = adCmdText
' BIND PARAMS
.Parameters.Append .CreateParameter("StrParam", adVarChar, adParamInput, 255, strColumn1Data)
.Parameters.Append .CreateParameter("DateParam", adDate, adParamInput, , strDate)
' RUN ACTION QUERY
.Execute()
End With
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/451405.html
下一篇:煩人的問題-WindowsApps加載Python安裝而不是用戶安裝的Python-在公司PC上無法更改環境變數-VBA
