У меня есть несколько SQL серверных таблиц, одна из которых содержит 200 000 строк, а другая 900 000 строк, каждая из которых может содержать 50 столбцов. Мне нужно загрузить их в CSV-файл и в сценарии VBA (это внутри Excel). Все строки и все столбцы должны быть экспортированы.
Предположим, у вас есть набор записей oRe c, взятый из простого запроса. Все столбцы являются varchars, большинство из них varchar (20) или varchar (200)
'SELECT * FROM TABLE'.
В приведенном ниже коде I l oop через набор записей, а затем через каждый столбец. Если я закомментирую цикл столбцов или просто получу первый столбец, это будет довольно быстро. Но каждый столбец экспоненциально усложняет прием более часа.
Есть ли лучший способ? Мне нужны все строки и столбцы, и VBA / Excel - единственный способ, поскольку это часть системы в Excel для обработки данных. Это для конечных пользователей, и поэтому у них нет sql инструментов, библиотек (только офис), и я не могу распространять приложения. Этот экспорт является лишь одной маленькой частью более крупного проекта автоматизации Excel.
While Not oRec.EOF
sLine = ""
LineCount = LineCount + 1
For Each col In oRec.Fields
If IsNull(col.value) Then
sVal = "NULL"
Else
sVal = col.value
End If
If Not bHaveHeader Then
sHeader = sHeader & CStr(col.name) & ","
sLine = sLine & "," & sVal
Else
sLine = sLine & "," & sVal
End If
colOffset = colOffset + 1
Next
colOffset = 0
If bHaveHeader Then
sLines = sLines & Right(sLine, Len(sLine) - 1) & vbCrLf
Else
If LineCount Mod EXPORT_LINE_BUFFER = 0 Then
'lines ready to be exported. last line can't have carriage return
sLines = sHeader & vbCrLf & sLines & Right(sLine, Len(sLine) - 1)
Call UpdateFile(fs, sExportFile, sLines)
sLines = ""
Else
sLines = sHeader & vbCrLf & sLines & Right(sLine, Len(sLine) - 1) & vbCrLf
End If
End If
bHaveHeader = True
oRec.MoveNext
Wend