我正在尝试通过VBA自动将数据从excel导出到SQL。我对VBA的了解不多,Excel告诉我以下错误(请参阅下文)。我应该在哪里创建该程序?在SQL中?应该如何设计?(以下代码中的xxx,我把它们放了)
Sub testexportsql()
Dim cn As ADODB.connection
Dim ServerName As String
Dim DatabaseName As String
Dim TableName As String
Dim UserID As String
Dim Password As String
Dim rs As ADODB.recordset
Dim RowCounter As Long
Dim NoOfFields As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim ColCounter As Integer
Set rs = New ADODB.recordset
ServerName = "xxx" ' Enter your server name here
DatabaseName = "DATAWAREHOUSE" ' Enter your database name here
TableName = "dbo.AlbertaFire_import" ' Enter your Table name here
UserID = "sa" ' Enter your user ID here
' (Leave ID and Password blank if using windows Authentification")
Password = "xxx" ' Enter your password here
NoOfFields = 331 ' Enter number of fields to update (eg. columns in your worksheet)
StartRow = 2 ' Enter row in sheet to start reading records
EndRow = 200 ' Enter row of last record in sheet
' CHANGES
Dim shtSheetToWork As Worksheet
Set shtSheetToWork = ActiveWorkbook.Worksheets("Sheet2")
'********
Set cn = New ADODB.connection
cn.Open "Driver={SQL Server};Server=" & ServerName & ";Database=" & DatabaseName & _
";Uid=" & UserID & ";Pwd=" & Password & ";"
rs.Open TableName, cn, adOpenKeyset, adLockOptimistic
'EndRow = shtSheetToWork.Cells(Rows.Count, 1).End(xlUp).Row
For RowCounter = StartRow To EndRow
rs.AddNew
For ColCounter = 1 To NoOfFields
'On Error Resume Next
rs(ColCounter - 1) = shtSheetToWork.Cells(RowCounter, ColCounter)
Next ColCounter
Debug.Print RowCounter
Next RowCounter
rs.UpdateBatch
' Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
rs.Open TableName, cn, adOpenKeyset, adLockOptimistic
运行时错误'-2147217900(80040e14)':
[Microsoft] [OBDC SQL服务器驱动程序] [SQL Server]找不到存储过程'dbo.AlbertaFire_import'
我试图重现该错误。只要SQL服务器上的表存在,代码就可以正常工作。如果该表不存在,则会得到相同的错误代码,但描述为“ automation-error”。
我猜该表在您的服务器上不存在。创建表AlbertaFire_import并尝试。如果可行,则可能需要在导入新数据之前删除旧记录。您可以使用“执行”一些SQL来做到这一点:
cn.Open "Driver={SQL Server};Server=" & ServerName & ";Database=" & DatabaseName & ";Uid=" & UserID & ";Pwd=" & Password & ";"
cn.Execute "delete from " + TableName
rs.Open TableName, cn, adOpenKeyset, adLockOptimistic
希望对您有帮助...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句