Создание цикла для загрузки Excel в базу данных SQL - PullRequest
0 голосов
/ 11 июня 2019

поэтому у меня есть некоторый код ниже, который должен циклически проходить по строкам и столбцам и загружать записи в базу данных SQL (с Ado).Связь и все работает, я просто пытаюсь понять, почему строка не создается должным образом.Я наблюдал за этим с открытыми Locals, и кажется, что strValues ​​сбрасывается при каждой итерации, что делает его бесполезным.

Sub generic_lookup()

 Dim lngRow As Long, lngCol As Long, strSQL As String, strValues As String
   lngRow = Sheets("Upload").Cells(Rows.Count, 1).End(xlUp).Row + 1
   lngCol = Sheets("Upload").Cells(6, Columns.Count).End(xlToLeft).Column + 1

  strSQL = "INSERT INTO mytable (value1, value2, value3)" & vbNewLine
       For i = 6 To lngRow
            strValues = strValues & "select " & ""
            For X = 1 To lngCol
            strValues = Sheets("Upload").Cells(lngRow, lngCol)
            Next X
            strValues = Left(strValues, Len(strValues)) & vbNewLine
            strValues = strValues & " from dual union all" & vbNewLine
       Next i

       If strValues <> "" Then
           strValues = Left(strValues, Len(strValues) - 11)
           strSQL = strSQL & strValues

            conn.Execute (strSQL)

           strValues = ""
           strSQL = ""
       End If

conn.Close
Set conn = Nothing
End Sub

Я не совсем уверен, как решить эту проблему и сохранить значения в strValues.Любая помощь очень ценится!

1 Ответ

0 голосов
/ 11 июня 2019

Я думаю, проблема в том, что вы на самом деле не выбираете значения в цикле.

Вам необходимо добавить .Value.Вот скорректированный код:

Sub generic_lookup()

Dim lngRow As Long, lngCol As Long, strSQL As String, strValues As String
lngRow = Sheets("Upload").Cells(Rows.Count, 1).End(xlUp).Row + 1
lngCol = Sheets("Upload").Cells(6, Columns.Count).End(xlToLeft).Column + 1

strSQL = "INSERT INTO mytable (value1, value2, value3)" & vbNewLine
   For i = 6 To lngRow

        strValues = strValues & "select " & ""

        Dim addedAValue As Boolean
        blnAddedAValue = False

        For x = 1 To lngCol

            Dim strCellValue As String
            strCellValue = Sheets("Upload").Cells(lngRow, lngCol).Value

            If Not StrComp(strCellValue, "") Then
                If Not blnAddedAValue Then
                    strValues = strValues & strCellValue
                    blnAddedAValue = True
                Else:
                    strValues = strValues & strCellValue & ", "
                End If
            End If

        Next x

            strValues = Left(strValues, Len(strValues)) & vbNewLine
            strValues = strValues & " from dual union all" & vbNewLine

   Next i

   If strValues <> "" Then
       strValues = Left(strValues, Len(strValues) - 11)
       strSQL = strSQL & strValues

        conn.Execute (strSQL)

       strValues = ""
       strSQL = ""
   End If

conn.Close
Set conn = Nothing

End Sub

Обратите внимание, что вы все еще перезаписываете strValues несколько раз в цикле X - вы уверены, что хотите это сделать?

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

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