IMPORTACAO DEMORA MUITO!!!!
Consigo importar uma planilha do Excel para o Access via código vb, mas essa importação demora muito,
em uma planilha com 300.000 linhas o sistema importa cerca de 3.000 linhas por minuto, eu precisava que
essa importação fosse mais rápida, alguém sabe como?
Grato.
Você está usando concatenação de query?
Se sim para as duas perguntas, concatene em lotes de 1000 em 1000 registros separando os comandos de insert por [Ô];[Ô] e execute-os.
Citação::
Você está inserindo os registros um a um?
Você está usando concatenação de query?
Se sim para as duas perguntas, concatene em lotes de 1000 em 1000 registros separando os comandos de insert por [Ô];[Ô] e execute-os.
KERPLUNK,
Estou iniciando agora em VB, não sei como concatenar os registros de 1000 em 1000, segue abaixo o código que uso para fazer essa importação.
Dim oc As New System.Data.OleDb.OleDbConnection
Dim cmd As New OleDbCommand
oc.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source= [Ô] & nomebanco & [Ô][Ô]
oc.Open()
Dim salvar As Boolean
cmd.Connection = oc
Dim str1 As String = [Ô][Ô] [ô]carrega coluna tipo
Dim str2 As String = [Ô][Ô] [ô]carrega coluna titulo
Dim str3 As String = [Ô][Ô] [ô]carrega coluna logradouro
Dim str4 As String = [Ô][Ô] [ô]carrega coluna numero
Dim str5 As String = [Ô][Ô] [ô]carrega coluna complementoquadra
Dim str6 As String = [Ô][Ô] [ô]carrega coluna numcomplementoquadra
Dim str7 As String = [Ô][Ô] [ô]carrega coluna bairro
Dim str8 As String = [Ô][Ô] [ô]carrega coluna cep
Dim lastrow As Long
Dim i As Integer
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
xlw = xl.Workbooks.Open(excel)
Dim aba As String = [Ô][Ô]
For a = 1 To xlw.Worksheets.Count
aba = xlw.Sheets(a).name
xlw.Sheets(aba).select()
[ô]variavel = xlw.application.range(TIPO).value
[ô]ListBox1.Items.Add(xlw.Application.Columns([Ô]A[Ô]).Value)
lastrow = xlw.Application.Range([Ô]A650000[Ô]).End(XlDirection.xlUp).Row
For i = 2 To lastrow
[ô]ListBox1.Items.Add(xlw.Application.Range([Ô]A[Ô] & i)).ToString()
str1 = (xlw.Application.Range([Ô]A[Ô] & i).Value) [ô]carrega coluna tipo
str2 = (xlw.Application.Range([Ô]B[Ô] & i).Value) [ô]carrega coluna titulo
str3 = (xlw.Application.Range([Ô]C[Ô] & i).Value) [ô]carrega coluna logradouro
str4 = (xlw.Application.Range([Ô]D[Ô] & i).Value) [ô]carrega coluna numero
str5 = (xlw.Application.Range([Ô]E[Ô] & i).Value) [ô]carrega coluna complementoquadra
str6 = (xlw.Application.Range([Ô]F[Ô] & i).Value) [ô]carrega coluna numcomplementoquadra
str7 = (xlw.Application.Range([Ô]I[Ô] & i).Value) [ô]carrega coluna bairro
str8 = (xlw.Application.Range([Ô]K[Ô] & i).Value) [ô]carrega coluna cep
Dim logradouro As String = str1 + [Ô] [Ô] + str2 + [Ô] [Ô] + str3
Dim newlog As String = Replace(logradouro, [Ô] [Ô], [Ô] [Ô])
cmd.CommandType = CommandType.Text
cmd.CommandText = [Ô]Insert Into IBGEDADOS(FONTEDADOS, CODIGO_IBGE, CODLOG, LOGRADOURO, NUM_LOGRADOURO, BAIRRO, CEP_DIREITO, CEP_ESQUERDO, NUM_QUADRA, LINK) values (@fontedados, @codigoibge, @codlog, @logradouro, @numlogradouro, @bairro, @cepdireito, @cepesquerdo, @numquadra, @link)[Ô]
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@fontedados[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@fontedados[Ô]).Value = [Ô]ibge[Ô]
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@codigoibge[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@codigoibge[Ô]).Value = [Ô]-[Ô]
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@codlog[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@codlog[Ô]).Value = [Ô]-[Ô]
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@logradouro[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@logradouro[Ô]).Value = newlog
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@numlogradouro[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@numlogradouro[Ô]).Value = str4
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@bairro[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@bairro[Ô]).Value = str7
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@cepdireito[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@cepdireito[Ô]).Value = str8
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@cepesquerdo[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@cepesquerdo[Ô]).Value = str8
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@numquadra[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@numquadra[Ô]).Value = [Ô];Q [Ô] + str6
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@link[Ô], OleDbType.VarChar))
cmd.Parameters([Ô]@link[Ô]).Value = [Ô]0[Ô]
Try
salvar = cmd.ExecuteNonQuery
cmd = New OleDbCommand(cmd.CommandText, oc)
Catch ex As Exception
MsgBox(ex.Message)
Finally
End Try
Next
Next
xlw.Close()
oc.Close()
Grato.
tem um topico sobre isso aqui
Citação::
Essa semana eu precisei fazer isso eu fiz assim:
converti o arquivo xls para csv e importei no banco de dados (no meu caso foi PostgreSql) e foi bem rápido(Tenho muito registro no arquivo!
Dim excelSheetToOpen As New OpenFileDialog()
Dim definicao As String = [Ô]Data1[Ô]
excelSheetToOpen.Filter = [Ô]Excel 97- 2003 WorkBook (*.xls)| *.xls | Excel 2007 WorkBook (*.xlsx) | *.xlsx | All files (*.*)|*.*[Ô]
excelSheetToOpen.FilterIndex = 3
excelSheetToOpen.Multiselect = True
If excelSheetToOpen.ShowDialog() = DialogResult.OK Then
Dim excelApplication As New Excel.Application
Dim excelWrkBook As Excel.Workbook
excelApplication.Visible = False
excelWrkBook = excelApplication.Workbooks.Open(excelSheetToOpen.FileName)
DirectCast(excelWrkBook.Sheets(1), Excel.Worksheet).SaveAs(Filename:=[Ô]C:[Ô] & definicao & [Ô].CSV[Ô], FileFormat:=Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV)
[ô]excelWrkBook.SaveAs(Filename:=[Ô]C:[Ô] & definicao & [Ô].CSV[Ô], FileFormat:=Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV)
excelWrkBook.Close()
end if
Depois eu usei essa query para importar
SET client_encoding TO [ô]iso-8859-1[ô];
COPY dados1 FROM [ô]C:.........data1.csv[ô] WITH DELIMITER [ô],[ô] CSV HEADER;
Funcionou com esse código que me passou, Grato.
Andre.