У меня проблема при передаче информации из Excel в SQL с помощью макроса.Импортировать 200 000 строк в Excel в SQL с помощью макроса VBA
При запуске макроса файл начинает загружать строки, но внезапно останавливается со следующей ошибкой «Переполнение (6)», и это заставляет обрабатывать каждые 32676 строк.
Сначала я думал, что это было что-то в записях, но когда я вернусь, чтобы выполнить приговор запускается снова и снова останавливается на записи 32676,
Я пытаюсь, чтобы загрузить Excel файл с более чем 200 000 строк каждая запись состоит из 25 столбцов.
Возможно, я совершу что-то неправильно, чтобы это произошло.
Я разделяю транзакционный код.
Private Sub CommandButton1_Click()
Dim conn As New ADODB.Connection
conn.CommandTimeout = 0
Dim iRowNo As Integer
Dim PK_ID As String, CUST_ID As Long, DOC_TYPE As String, BILL_DOC As Long, REFERENCE As String, INV_CON As String, ORDER_SALER As String, INV_REF As String, DOC_NUM As Long, GL As Long, DOC_DATE As Double, DUE_DATE As Double, ECURRENCY As String, DOC_AMNT As Currency, USD_AMNT As Currency, PAY_TERM As String
With Sheets("ONREPSAP")
'Abrimos conexion con el SQL server
conn.Open "Provider=SQLOLEDB;Data Source=,1433;Initial Catalog=AmericanMovil;User ID=;Password=;Encrypt=True;"
'Omitimos la linea de encabezados
iRowNo = 2
'Loop until empty cell in CustomerId
Do Until .Cells(iRowNo, 1) = ""
PK_ID = .Cells(iRowNo, 1)
CUST_ID = .Cells(iRowNo, 2)
DOC_TYPE = .Cells(iRowNo, 3)
BILL_DOC = .Cells(iRowNo, 4)
REFERENCE = .Cells(iRowNo, 5)
INV_CON = .Cells(iRowNo, 6)
ORDER_SALES = .Cells(iRowNo, 7)
INV_REF = .Cells(iRowNo, 8)
DOC_NUM = .Cells(iRowNo, 9)
GL = .Cells(iRowNo, 10)
DOC_DATE = .Cells(iRowNo, 11)
DUE_DATE = .Cells(iRowNo, 12)
ECURRENCY = .Cells(iRowNo, 13)
DOC_AMNT = .Cells(iRowNo, 14)
USD_AMNT = .Cells(iRowNo, 15)
PAY_TERM = .Cells(iRowNo, 16)
'Generamos y ejecutamos la QUERY SQL para importar las lineas de excel a SQL
conn.Execute "insert into dbo.ONREPSAP (PK_ID, CUST_ID, DOC_TYPE, BILL_DOC, REFERENCE, INV_CON, ORDER_SALES, INV_REF, DOC_NUM, GL, DOC_DATE, DUE_DATE, ECURRENCY, DOC_AMNT, USD_AMNT, PAY_TERM) values ('" & PK_ID & "', '" & CUST_ID & "', '" & DOC_TYPE & "', '" & BILL_DOC & "', '" & REFERENCE & "', '" & INV_CON & "', '" & ORDER_SALES & "', '" & INV_REF & "', '" & DOC_NUM & "', '" & GL & "', '" & DOC_DATE & "', '" & DUE_DATE & "', '" & ECURRENCY & "', '" & DOC_AMNT & "', '" & USD_AMNT & "', '" & PAY_TERM & "')"
iRowNo = iRowNo + 1
Loop
MsgBox "Reporte Cargado Correctamente | The report has finish to Uploading"
conn.Close
Set conn = Nothing
End With
End Sub
В Debug, то VBA выберите iRowNo + 1 до "петли"
'Dim iRowNo Как Long', а не' Integer'. – Comintern
О, черт возьми ... не делай этого. Предпочтение № 1 - использование bcp. Сохраните данные в файл и дайте bcp полностью удалить все файлы. Предпочтение №2 - если вы не можете использовать bcp или упрямы, по крайней мере используйте переменные связывания (параметры) вместо 100 000 литералов. Ваш администратор базы данных будет НЕНАВИЖИТЬ НЕНАВИЖУ НЕНАВИСТЬ, если вы этого не сделаете. Если вам нужны примеры, просто спросите – Hambone