Как экспортировать данные Excel из разных листов в базу данных SQL-SERVER? - PullRequest
0 голосов
/ 05 сентября 2018

Я новичок в EXCEL-VBA и SQL. Мне удалось создать кнопку Marco и отправить данные ячейки Excel в таблицы сервера SQL. Однако я немного озадачен:
В. Как я могу взять данные ячейки Excel с разных листов и затем отправить их в разные таблицы в базе данных SQL Server? ( В настоящее время у меня есть 3 листа {Клиенты, Тест, Информация} в одном файле Excel )

Текущий рабочий код:

Sub Button1_Click()

Dim conn As New ADODB.Connection
Dim iRowNo As Integer
Dim sCustomerId, sFirstName, sLastName As String

With Sheets("Customers")

    'Open a connection to SQL Server
    conn.Open "Provider=SQLOLEDB;Data Source=TESTpc\SQLEXPRESS;Initial Catalog=ExcelSQLServerDemo;Trusted_connection=yes"

   'Skip the header row
    iRowNo = 2

    'Loop until empty cell in CustomerId
    Do Until .Cells(iRowNo, 1) = ""
        sCustomerId = .Cells(iRowNo, 1)
        sFirstName = .Cells(iRowNo, 2)
        sLastName = .Cells(iRowNo, 3)

        'Generate and execute sql statement to import the excel rows to SQL Server table
        conn.Execute "INSERT into dbo.Customers (CustomerId, FirstName, LastName) values ('" & sCustomerId & "', '" & sFirstName & "', '" & sLastName & "')"

        iRowNo = iRowNo + 1
    Loop

    MsgBox "Customers Exported To Database"

    conn.Close
    Set conn = Nothing

    End With
End Sub

Q. Нужно ли хранить данные в массивах, а затем отправлять их в базу данных?

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы не должны использовать запросы вставки для каждой строки, которую хотите экспортировать. Вместо этого, если вы хотите сделать это вручную, откройте набор записей:

Sub Button1_Click()

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim iRowNo As Integer
Dim sCustomerId, sFirstName, sLastName As String

With Sheets("Customers")

    'Open a connection to SQL Server
    conn.Open "Provider=SQLOLEDB;Data Source=TESTpc\SQLEXPRESS;Initial Catalog=ExcelSQLServerDemo;Trusted_connection=yes"
    conn.CursorLocation = adUseClient 'Use a client-side cursor
    rs.Open "SELECT * FROM dbo.Customers", conn, adOpenDynamic, adLockOptimistic 'Open the table into a recordset

   'Skip the header row
    iRowNo = 2

    'Loop until empty cell in CustomerId
    Do Until .Cells(iRowNo, 1) = ""
        rs.AddNew 'Add a new row
        rs!CustomerId = .Cells(iRowNo, 1) 'Set row values
        rs!FirstName = .Cells(iRowNo, 2)
        rs!LastName = .Cells(iRowNo, 3)
        rs.Update 'Commit changes to database, you can try running this once, or once every X rows
        iRowNo = iRowNo + 1
    Loop

    MsgBox "Customers Exported To Database"

    conn.Close
    Set conn = Nothing

    End With
End Sub

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

0 голосов
/ 05 сентября 2018

Использование Sql Server Импорт и экспорт данных 64-битные или 32-битные

ШАГ 1: screenshot1

ШАГ 2: Screenshot2

ШАГ 3: Screenshot3

ШАГ 4: Screenshot4

Шаг 5: Screenshot5

Выполните следующие шаги

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...