Я хочу создать «общий» 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