从Excel上传到SQL的VBA停止工作?

时间:2016-03-14 15:30:16

标签: sql excel vba

所以,上周我将一些代码汇总到一起,将我的Excel工作表中的数据上传到我的数据库。它工作得很好。我今天回来了,现在它还没有工作......我一直收到错误信息:

"将varchar数据类型转换为日期时间数据类型会导致超出范围的值。"

我认为它工作的事实让我有点盲目地发现问题......所以如果有新眼睛的人可以看一眼,我会非常感激,看看他们是否可以看到问题!

Sub Button1_Click()

    If MsgBox("Are you sure you want to upload this data?", vbYesNo) = vbNo Then Exit Sub

    Dim conn As New ADODB.Connection
    Dim iRowNo, sArtistID, sSaleMonth, sSaleYear As Integer
    Dim sValue As Long
    Dim sSaleroom As String
    Dim sUploaded As Date

    sUploaded = Now()

    With Sheets("DataUpload")

        'Open a connection to SQL Server

        'Skip the header row
        iRowNo = 2

        'Loop until empty cell in CustomerId
        Do Until .Cells(iRowNo, 1) = ""
            sArtistID = .Cells(iRowNo, 1)
            sSaleMonth = .Cells(iRowNo, 2)
            sSaleYear = .Cells(iRowNo, 3)
            sSaleroom = .Cells(iRowNo, 4)
            sValue = .Cells(iRowNo, 5)

            'Generate and execute sql statement to import the excel rows to SQL Server table
            conn.Execute "insert into dbo.Data (ArtistID, SaleMonth, SaleYear, SaleRoom, Value, Uploaded) values ('" & sArtistID & "', '" & sSaleMonth & "', '" & sSaleYear & "', '" & sSaleroom & "', '" & sValue & "', '" & sUploaded & "')"

            iRowNo = iRowNo + 1
        Loop

        MsgBox "Data imported."

        conn.Close
        Set conn = Nothing

    End With


End Sub

My Database:

DataID(int)具有身份规范,增量1. ArtistID,salemonth / year和value都是int,saleroom是char,上传的是datetime。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我们应该在描述中寻找问题。

“将varchar数据类型转换为日期时间数据类型会导致超出范围的值。”

例如,您可能正在使用欧洲日期约定dd / mm / yyyy,SQL服务器期望美国mm / dd / yyyy。今天我们有三月十四日。在那个星期五的情况下,我们在3月11日可以解释为11月3日。没有第14个月,所以今天你收到错误,3天前一切都很好。

在上传之前我做了

o_adodb_connection.Execute(“set dateformat dmy”)

这样SQL就知道会发生什么(在我的情况下是SQL Server - 我不知道你用的是什么)。