美好的一天,
我正在用这个敲打桌子。 我可以通过Excel VBA更新SQL表,除非日期不能正确传递。该值始终为1900-01-01,或者在某些情况下我使用的格式为1900-01-28。
这是一个仅用于测试的简单设置。 1包含2列CellText和CellDate的表,两者都从单元格范围获取它们的值。
CellText的预期值是'Some Text' CellDate的预期价值是24/03/2015
这是我的代码:
Sub UpdateTable()
Dim cnn As ADODB.Connection
Dim uSQL As String
Dim strText As String
Dim strDate As Date
strText = ActiveSheet.Range("b4").Value
strDate = Format(ActiveSheet.Range("c4").Value, "dd/mm/yyyy")
Set cnn = New Connection
cnnstr = "Provider=SQLOLEDB; " & _
"Data Source=ServerName; " & _
"Initial Catalog=DbName;" & _
"User ID=UserName;" & _
"Trusted_Connection=Yes;"
cnn.Open cnnstr
uSQL = "INSERT INTO tbl_ExcelUpdate (CellText,CellDate) VALUES ('" & strText & "', " & strDate & ")"
Debug.Print uSQL
cnn.Execute uSQL
cnn.Close
Set cnn = Nothing
Exit Sub
End Sub
我的调试值是INSERT INTO tbl_ExcelUpdate (CellText,CellDate) VALUES ('Some Text ', 24/03/2015)
表格中的我的CellDate格式是日期时间。
有人可以放任何光吗?
亲切的问候 恐龙
答案 0 :(得分:1)
看起来你错过了日期任何一方的单引号。
INSERT INTO tbl_ExcelUpdate (CellText,CellDate) VALUES ('Some Text ', 24/03/2015)
应该是
INSERT INTO tbl_ExcelUpdate (CellText,CellDate) VALUES ('Some Text ', '24/03/2015')
答案 1 :(得分:0)
使用CDate函数将字符串格式的日期转换为日期类型
Sub UpdateTable()
Dim cnn As ADODB.Connection
Dim uSQL As String
Dim strText As String
Dim strDate As Date
strText = ActiveSheet.Range("b4").Value
strDate = Format(ActiveSheet.Range("c4").Value, "dd/mm/yyyy")
Set cnn = New Connection
cnnstr = "Provider=SQLOLEDB; " & _
"Data Source=ServerName; " & _
"Initial Catalog=DbName;" & _
"User ID=UserName;" & _
"Trusted_Connection=Yes;"
cnn.Open cnnstr uSQL = "INSERT INTO tbl_ExcelUpdate (CellText,CellDate) VALUES ('" & strText & "', " & CDate(strDate) & ")"
Debug.Print uSQL
cnn.Execute uSQL
cnn.Close
Set cnn = Nothing
Exit Sub
End Sub
答案 2 :(得分:0)
您必须将strDate = Format(ActiveSheet.Range("c4").Value, "dd/mm/yyyy")
更正为
strDate = Format(ActiveSheet.Range("c4").Value, "dd-mm-yyyy").
然后您必须加上引号:
uSQL = "INSERT INTO tbl_ExcelUpdate (CellText,CellDate) VALUES ('" & strText & "', '" & strDate & "')"