Экспорт Excel в SQL VBA: не удалось найти хранимую процедуру

Я пытаюсь автоматизировать экспорт своих данных из Excel в SQL через VBA. У меня мало знаний в 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

Run-time error '-2147217900 (80040e14)':
[Microsoft][OBDC SQL Sever Driver][SQL Server] Could not find stored procedure 'dbo.AlbertaFire_import'

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
317
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я попытался воспроизвести ошибку. Код работал нормально, пока существует таблица на сервере SQL. Если таблицы не существует, я получаю тот же код ошибки, но как описание «ошибка автоматизации».

Я предполагаю, что таблица не существует на вашем сервере. Создайте таблицу 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

Я надеюсь, что это помогает...

Спасибо ! действительно, у меня была опечатка. У меня была еще одна проблема после той, которую я поднял здесь: stackoverflow.com/questions/56939569/…. Я буду очень благодарен услышать от вас снова. Просто небольшой вопрос относительно вашего кода, куда мне его поместить? Сразу после «Приберись»?

nimavancouver 08.07.2019 19:02

строка cn.Execute между уже существующими строками cn.Open и rs.Open

Mike 08.07.2019 20:40

Добро пожаловать. Не забудьте отметить ответ как правильный, чтобы я получил баллы. нажмите на треугольник над 0 слева от ответа... ;)

Mike 09.07.2019 07:40

Конечно! я не знал об этом :D

nimavancouver 09.07.2019 23:37

Есть несколько способов сделать что-то подобное.

Sub sql_login()

    '******************************************************
    ' Connection info to log into SQL Server
    '******************************************************
    Dim ServerName As String
    Dim dbname As String
    Dim uname As String
    Dim pword As String

    ServerName = "your_server_name"
    dbname = "Northwind"
    'uname = "**************"
    'pword = "**************"

    '******************************************************
    ' Calls the SQLConnect to query batch information
    '******************************************************
    Call SQLConnect(ServerName, dbname) ', uname, pword)

End Sub


Sub SQLConnect(ServerName As String, dbname As String) ', uname As String, pword As String)
    '******************************************************
    ' Logs into SQL Server to get actual batch information
    '******************************************************
    Dim Cn As adodb.Connection
    Set Cn = New adodb.Connection

    'On Error GoTo ErrHand
        With Cn
            .ConnectionString = "your_server_name;Database=Northwind;Trusted_Connection=True;"
        End With

    '******************************************************
    ' Calls the the SQL Query
    '******************************************************
    Call sql_query(Cn)

End Sub


Sub sql_query(Cn As adodb.Connection)

    '******************************************************
    ' Performs SQL Query
    '******************************************************
    Dim RS As adodb.Recordset
    Dim sqlString As String
    Set RS = New adodb.Recordset

    sqlString = "Select * From Northwind.dbo.TBL"
    RS.Open sqlString, Cn, adOpenStatic, adLockOptimistic
    Cn.Execute (sqlString)

    Dim fld As adodb.Field

    '******************************************************
    ' Create Field Headers for Query Results
    '******************************************************
    i = 0
    With Worksheets("sheet1").Range("A1")
        For Each fld In RS.Fields
            .Offset(0, i).Value = fld.Name
            i = i + 1
        Next fld
    End With

    '******************************************************
    ' Copy Query Results into Excel
    '******************************************************
    Worksheets("sheet1").Range("A1").CopyFromRecordset RS

End Sub

Или . . .

Sub InsertInto()

'Declare some variables
Dim cnn As adodb.Connection
Dim cmd As adodb.Command
Dim strSQL As String

'Create a new Connection object
Set cnn = New adodb.Connection

'Set the connection string
cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Northwind;Data Source=your_server_name"
'cnn.ConnectionString = "DRIVER=SQL Server;SERVER=your_server_name;DATABASE=Northwind;Trusted_Connection=Yes"


'Create a new Command object
Set cmd = New adodb.Command

'Open the Connection to the database
cnn.Open

'Associate the command with the connection
cmd.ActiveConnection = cnn

'Tell the Command we are giving it a bit of SQL to run, not a stored procedure
cmd.CommandType = adCmdText

'Create the SQL
strSQL = "UPDATE TBL SET JOIN_DT = '2013-01-22' WHERE EMPID = 2"

'Pass the SQL to the Command object
cmd.CommandText = strSQL


'Execute the bit of SQL to update the database
cmd.Execute

'Close the connection again
cnn.Close

'Remove the objects
Set cmd = Nothing
Set cnn = Nothing

End Sub

Есть еще несколько вещей, которые вы можете сделать, и все они связаны с методологиями, упомянутыми выше.

Другие вопросы по теме