У меня есть несколько листов, которые я должен иметь возможность загружать в базу данных MySQL одним нажатием кнопки.
Проблема 1 - Каждый лист имеет разные столбцы Заголовки Проблема 2 - Каждый лист также имеет различное количество столбцовПроблема 3 - Каждый лист также имеет различное количество строк
Я начал с того, что подумал следующее:
Private Sub Export_Click()
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Open "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=<server>;DATABASE=<db>;USER=<user>;PASSWORD=<password>;"
Dim rng As Range
s8columns = "(<28 columns>)"
s9columns = "(<40 columns>)"
s10columns = "(<10 Columns>)"
s12columns = "(<15 Columns>)"
s13columns = "(<18 Columns>)"
s14columns = "(<6 Columns>)"
Sheetcolumns = Array(s8columns, s9columns, s10columns, s12columns, s13columns, s14columns)
Datasheets = Array(Sheet8.Name, Sheet9.Name, Sheet10.Name, Sheet12.Name, Sheet13.Name, Sheet14.Name)
For i = LBound(Datasheets) To UBound(Sheetcolumns)
colnum = Worksheets(Datasheets(i)).Cells(1, Columns.Count).End(xlToLeft).Column
Sqlp1 = "INSERT INTO " & Datasheets(i) & " " & Sheetcolumns(i) & " values('"
For n = 1 To colnum
Sqlp2 = Sqlp1 & Row.Cells(n).Value
Next n
Sql = Sqlp2 & "')"
Worksheets(Sheet15.Name).Range("A1") = Sql
With Worksheets(Datasheets(i))
Set rng = .Range(.Range("A2"), .Cells(.Rows.Count, 1).End(xlUp))
For Each Row In rng.Rows
con.Execute Sql
Next Row
End With
Next i
con.Close
End Sub
Я застрял на том, как я могу добавить & Row.cells (n).Значение для каждого столбца в текущем листе для запроса Sql.Вы можете составить любые имена столбцов, которые вам нужны, я не могу их дать.
Редактировать:
Позвольте мне показать хороший оператор вставки, чтобы помочь лучше решить проблему
INSERT INTO Table1 (Column1, Column2, Column3, Column4) VALUES ('ABC', '123', '1900-01-01', 12)
Для моего текущего запроса массив для столбцов на каждом листесписок столбцовПроблема, с которой я столкнулся, заключается в том, как я могу динамически получать фрагмент VALUES () в зависимости от количества столбцов и каждого значения в этих столбцах на листе.
Редактировать 2:
For i = LBound(Datasheets) To UBound(Sheetcolumns)
With Worksheets(Datasheets(i))
Set rng = .Range(.Range("A2"), .Cells(.Rows.Count, 1).End(xlUp))
numcol = .Cells(2, Columns.Count).End(xlToLeft).Column
For Each Row In rng.Rows
valuesArray = Range("A" & rng.Row & ":" & (Col_Letter(numcol)) & rng.Row).Value
'Sql = "INSERT INTO " & Datasheets(i) & " " & Sheetcolumns(i) & " values('" & valuesArray & "')"
MsgBox (Join(valuesArray(), "','"))
'con.Execute
Next Row
End With
Next i
con.Close
Я сейчас пытаюсь заполнить массив из строки значений данных в столбце.Я все еще сталкиваюсь с проблемами, хотя.Я не могу заставить его собрать каждый столбец в строке в массив, а затем соединить его.