【发布时间】:2017-08-31 09:30:56
【问题描述】:
我正在尝试按下 excel 工作表中的按钮,它应该将数据从工作表发送到 sql 表。但是这个 vba 代码不会将数据从 excel 上传到数据库。我有类似的其他表,它工作正常。对此的任何建议或想法都会很棒。
Sub Send2SQL()
Dim cmd As New ADODB.Command
Dim rst As ADODB.Recordset
Dim UploadTime, SubmissionNumber, WorkbookSection, DataDescription1, DataDescription2, DataDescription3
Dim iValue, sValue, fValue, bValue, dValue, Omit
Dim UploadRow As Integer
Dim LastRow As Integer
'Establish Error Handler
On Error GoTo ErrorHandler
'Determine UploadTime
UploadTime = Format(Now, "mm\/dd\/yyyy hh\:mm\:ss")
'Loop Through Upload
For UploadRow = 2 To LastRow
With Sheets("DataCapture")
WorkbookSection = .Cells(UploadRow, WorkbookSectionColumn).Value
DataDescription1 = .Cells(UploadRow, DataDescription1Column).Value
DataDescription2 = .Cells(UploadRow, DataDescription2Column).Value
DataDescription3 = .Cells(UploadRow, DataDescription3Column).Value
iValue = .Cells(UploadRow, iValueColumn).Value
sValue = Left(.Cells(UploadRow, sValueColumn).Value, 400)
If sValue = "" Then sValue = Empty
fValue = .Cells(UploadRow, fValueColumn).Value
bValue = .Cells(UploadRow, bValueColumn).Value
dValue = .Cells(UploadRow, dValueColumn).Value
End With
With cmd
.ActiveConnection = conn
.CommandType = adCmdStoredProc
.CommandText = "[DataUpload]"
.Parameters.Append .CreateParameter("@TimeOfUpload", adDBTimeStamp, adParamInput, , UploadTime)
.Parameters.Append .CreateParameter("@WorkbookSection", adVarChar, adParamInput, 60, WorkbookSection)
.Parameters.Append .CreateParameter("@DataDescription1", adVarChar, adParamInput, 255, DataDescription1)
.Parameters.Append .CreateParameter("@DataDescription2", adVarChar, adParamInput, 60, DataDescription2)
.Parameters.Append .CreateParameter("@DataDescription3", adVarChar, adParamInput, 60, DataDescription3)
.Parameters.Append .CreateParameter("@iValue", adBigInt, adParamInput, , iValue)
.Parameters.Append .CreateParameter("@sValue", adVarChar, adParamInput, 400, sValue)
.Parameters.Append .CreateParameter("@fValue", adDouble, adParamInput, , fValue)
.Parameters.Append .CreateParameter("@bValue", adBoolean, adParamInput, , bValue)
.Parameters.Append .CreateParameter("@dValue", adDate, adParamInput, , dValue)
.Parameters.Append .CreateParameter("@FileID", adBigInt, adParamInput, , rstOut)
Set rst = .Execute
End With
Set cmd = New ADODB.Command
Next UploadRow
'Turn off ErrorHandler & Exit Sub
On Error GoTo 0
Exit Sub
ErrorHandler:
MsgBox "There was an Error Uploading your data" & vbNewLine & vbNewLine & "An Automated Email has been sent to Sai Latha Suresh from Acturaial"
On Error GoTo 0
End
End Sub
【问题讨论】:
-
取消你的错误处理,这样你就可以看到错误的位置和内容。您实际上并没有将变量定义为任何类型,例如
bValue是一个参数,因此需要一个布尔值,因此可能会导致问题 -
我同意你在不知道错误是什么的情况下不能做很多事情
标签: sql-server excel vba