Excel VBA从单元格插入日期到SQL表 - 默认为1900-01-01

时间:2015-03-24 15:00:38

标签: sql-server excel vba excel-vba

美好的一天,

我正在用这个敲打桌子。 我可以通过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格式是日期时间。

有人可以放任何光吗?

亲切的问候 恐龙

3 个答案:

答案 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 & "')"