Загрузка из Excel vba на сервер SQL - файл generi c excel не работает - PullRequest
0 голосов
/ 02 февраля 2020

Я хочу создать «общий» 1010 * способ загрузки данных в серверную базу данных SQL с помощью загрузки в Excel. В моем файле Excel у меня есть два листа - один с данными (WS_data) и один с дизайном таблицы базы данных (WS_Table_Design) (например, строки имен столбцов).

Прошло много времени с тех пор, как я закодированный VBA, но это работало (я так думаю?) - что я тут не так думаю?

Ошибки возникают, когда я хочу "разместить" значения в базе данных через .Fields([Column]).Value

Function NullCheck(x)

On Error Resume Next
If x = "" Then
    NullCheck = Null
    Else
    NullCheck = x
End If

End Function

Sub Upload_To_DB()

Dim WS_Data, WS_Table_Design As Worksheet

Dim Curent_Row, Curren_Column, Max_Datarows, i, j As Integer
Dim Array_Table_Design()


Set WS_Data = Worksheets("Data")
Set WS_Table_Design = Worksheets("DB_Table_Design")

'List Columns from Table design in array

ReDim Array_Table_Design(0 To 0)
Current_Row = 1
i = 0
    Do While WS_Table_Design.Cells(Current_Row, 1).Value <> ""

        If WS_Table_Design.Cells(Current_Row, 1).Value > 0 Then
            ReDim Preserve Array_Table_Design(0 To i)
            Array_Table_Design(i) = WS_Table_Design.Cells(Current_Row, 1).Value
            i = i + 1
        End If

    Current_Row = Current_Row + 1
    Loop

'End List Columns

'Find number of rows to upload
Current_Row = 2 'Row where data starts
Max_Datarows = 0
Do While WS_Data.Cells(Current_Row, 1).Value <> ""
    Max_Datarows = Max_Datarows + 1

Current_Row = Current_Row + 1
Loop
'End find number of rows to upload

'Upload data according to Table design and Data sheet

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sqlstring As String

Set con = New ADODB.Connection
con.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Datawarehouse;Data Source=server3"
Set rs = New ADODB.Recordset

rs.Open "select * from FactGL", con, adOpenStatic, adLockOptimistic

Current_Row = 2
Current_Column = 1
i = 0
j = 0
For j = 0 To 5 'Max_Datarows

    rs.AddNew
    For i = 0 To UBound(Array_Table_Design)

'Error comes here - why can't I add data to the database Table column defined in "Array_Table_Design?
            rs.Fields("Array_Table_Design(i)").Value = NullCheck(WS_Data.Cells(Current_Row, i + 1).Value)
            i = i + 1
        Next i
        rs.Update
        Current_Row = Current_Row + 1
    Next j

    End Sub

1 Ответ

2 голосов
/ 03 февраля 2020
rs.Fields("Array_Table_Design(i)").Value

должно быть

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