Добавление данных из Excel в Mysql через VBA

ОБНОВЛЕНО ВОПРОС … ВИДЕТЬ НИЖЕ

У меня есть лист excel, который обращается к MySQL db как к бэкэнду ….

Я вставляю новые записи в MySql следующим образом, но я не уверен, что это лучший способ.

For rowline = 1 To 50 strSQL = myquerystring (INSERT 5 columns per excel row) rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic Next rowline 

В основном строка запроса проходит через каждую строку в листе excel (от 1 до 50), а данные о некоторых ячейках добавляются в sql-запрос, а затем вставляются с помощью rs.Open …. (каждая строка содержит несколько столбцов, которые вставлены как запись)

Все работает хорошо, но я просто хочу знать, есть ли более быстрый способ (только один запрос INSERT), вставляя все 50 (и 5 столбцов на каждый) из строки 1 в 50, все сразу.

На данный момент он выполняет 50 индивидуальных запросов INSERT, поэтому я пытаюсь уменьшить это до 1, но я не знаю, возможно ли это.

НОВАЯ ИНФОРМАЦИЯ:

Привет, следуя вашим советам и ссылкам (спасибо!) И некоторым Googling, я получил следующий код … Он отлично работает, ОЧЕНЬ ВСТАВИТЬ 100 строк занимает около 15 секунд …. это слишком много. Я надеюсь, что смогу получить некоторый код / ​​идеи о том, как выполнить запрос один раз (вставляя все 100 строк за один удар). Пожалуйста, обратите внимание, что я новичок в этом, поэтому, если вы можете помешать мне в некоторых образцах, как это должно быть сделано, это будет очень признательно.

 Public Sub INSERT_to_MySQL() Dim conn As ADODB.Connection Dim cmd As ADODB.Command Dim strSQL As String app_enable_false On Error GoTo no_DB_connection_error resume_after_connecting: Set cmd = New ADODB.Command cmd.ActiveConnection = oConn ' LOOP and INSERT the data ' 100 rows take approx 15 seconds to INSERT For rowcursor= 1 To 100 the_table = "`global`.`filesaved` " strSQL = "INSERT INTO " & the_table & " (Client_Name, OriginCity, DestinationCity, ValidFrom, ValidTo, Quote_Number, Cost1, Cost2, Cost3) " strSQL = strSQL & " VALUES ('" & esc(Range("BB" & rowcursor)) & "','" & esc(Range("BC" & rowcursor)) & "','" & esc(Range("BD" & rowcursor)) & "','" & Format(Range("BE" & rowcursor), "yyyy-mm-dd") & "','" & Format(Range("BF" & rowcursor), "yyyy-mm-dd") strSQL = strSQL & "','" & esc(Range("BH" & rowcursor)) & "','" & esc(Range("BJ" & rowcursor)) & "','" & esc(Range("BK" & rowcursor)) & "','" & esc(Range("BJ" & rowcursor)) & "')" cmd.CommandText = strSQL cmd.Execute Next rowcursor app_enable_true Exit Sub no_DB_connection_error: ConnectDB GoTo resume_after_connecting End Sub 

Найдите ниже процесс, который работает, в случае, если кто-то другой в будущем будет такой же проблемой. Возможно, это не лучшее решение, но 100 записей сохраняются за один раз менее чем за секунду, и это то, чем я был. Также выполняется только один запрос INSERT (вместо 100 разных для каждой строки.

Спасибо всем за ваше руководство.

  Dim conn As ADODB.Connection Dim cmd As ADODB.Command Dim rst_recordset As ADODB.Recordset Dim strSQL As String Dim strSQL2 as string On Error GoTo no_DB_connection_error resume_after_connecting: Set cmd = New ADODB.Command cmd.ActiveConnection = oConn ' LOOP and INSERT the data lastrow = Range("BB65536").End(xlUp).Row the_table = "`global`.`filesaved` " strSQL = "INSERT INTO `global`.`filesaved` " & " (Client_Name, OriginCity, DestCity, ValidFrom, ValidTo, Quote_Number, Cost1, Cost2, Cost3) VALUES " strSQL2 = "" For excel_row = 1 To lastrow strSQL2 = strSQL2 & " ('" & cells(excel_row,1) & "','" & cells(excel_row,2) & "','" & cells(excel_row,3) & "','" & cells(excel_row,4) & "','" & cells(excel_row,5) & "','" & cells(excel_row,6) & "','" & cells(excel_row,7) & "','" & cells(excel_row,8) & "','" & cells(excel_row,9) & "') ," next excel_row strSQL = strSQL & strSQL2 Mid(strSQL, Len(strSQL), 1) = ";" ' gets rid of the last comma cmd.CommandText = strSQL cmd.Execute 

Если я запустил оператор и не ожидаю ответа, я обычно перехожу к объекту Command в VBA.

Я бы переместил команду open за цикл, а затем использовал метод Execute для выполнения вставок в цикле. Вы не хотите каждый раз открывать в базе данных.

Вот хорошая страница методов ADO .

Вот вопрос по пакетной вставке (и обновлению).

EDIT: Глядя на ссылку Remou в своем комментарии, я понял, что вам, вероятно, даже не нужно открывать. Просто используйте метод Execute для вложений.

Этот код работал для меня

  Sub insertdata() Dim year As String Set rs = CreateObject("ADODB.Recordset") Database_Name = Range("b3").Value ' Name of database User_ID = Range("b4").Value 'id user or username Password = Range("b5").Value 'Password Server_Name =Range("b2").Value ' Query for fetching Maximum Date ' LOOP and INSERT the data lastrow = Range("BB65536").End(xlUp).Row the_table = "`admin`.`test` " strSQL = "INSERT INTO `drawing`.`test` " & " (tests,test2) VALUES " strSQL2 = "" For excel_row = 1 To 100 strSQL2 = strSQL2 & " ('" & Cells(excel_row, 1) & "','" & Cells(excel_row, 2) & "') ," Next excel_row strSQL = strSQL & strSQL2 Mid(strSQL, Len(strSQL), 1) = ";" ' ' ADODB connection Set Cn = CreateObject("ADODB.Connection") 'NEW STATEMENT Cn.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & Server_Name & ";Database=" & Database_Name & _ ";Uid=" & User_ID & ";Pwd=" & Password & ";" rs.Open strSQL, Cn, adOpenStatic Dim myArray() End Sub 
  • Экспорт из Excel в MySQL
  • mysql пытается импортировать нечетный формат csv
  • Ошибка синтаксиса (отсутствующий оператор) в запросе mysql
  • удалить дублирующее кубик только одного столбца, все значения из всех доступных из повторяющихся столбцов в запросе sql
  • Экспорт таблицы Excel в таблицы отношений MySQL
  • PHP взорвать цикл функций, который будет использоваться в заголовках столбцов, чтобы вернуть желаемые значения в файл excel
  • Недопустимое количество столбцов в CSV-входе в строке 1 Ошибка
  • Дата от изменений excel при загрузке в mysql
  • Excel, удалить дубликаты, переместив уникальные значения на другой лист
  • Mysql Импорт новых кодов из excel
  • C # Winforms: экспорт базы данных Mysql в Excel
  • Interesting Posts

    Как вытащить данные JIRA, которые перемещаются из одного проекта в другой

    Ошибки «Duplicate name» при перемещении макроса из XLS в Personal.xlsb

    Excel-2013 – Не удается открыть файлы из URL-адреса

    Получить ширину столбца файла excel с помощью SaxParser

    Ограничение движения автошины в Excel

    определить параметры из ячейки Excel для CASE КОГДА в SQL

    Как заставить селен ждать полной загрузки страницы в Selenium-wrapper для Excel VBA?

    Изменение столбцов в нескольких файлах Excel

    Скопируйте данные ячейки из excel в слово VBA

    Как искать значение в таблице, а затем возвращать несколько значений, когда условие истинно?

    VBA – PasteSpecial не работает после использования SpecialCells.Copy

    fputcsv Вставка HTML-кода в файл csv

    Создать (математическую) функцию из набора предопределенных значений

    Таблица Excel Динамическая раскраска ячеек с использованием XML и XSLT

    Найдите значения на листе с двумя критериями соответствия, скопируйте их и вставьте их на другой лист с помощью VBA

    Давайте будем гением компьютера.