所以,上周我将一些代码汇总到一起,将我的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
DataID(int)具有身份规范,增量1. ArtistID,salemonth / year和value都是int,saleroom是char,上传的是datetime。
非常感谢!
答案 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 - 我不知道你用的是什么)。