Criei uma tabela no Sqlite e quero importar um arquivo texto para esta tabela do Sqlite, como fao isso ?
o seguinte: tem uma tabela de IBPT no formato texto quero importar para meu banco em Sqlite, como fao isso ?
Voc pode fazer de vrias maneiras. Primeiro, como est definida a sua tabela em formato texto ? Existe um separador, como Tab ou ponto e vrgula ?
Este exemplo de cdigo, da documentao, l de um arquivo texto delimitado por tab, e insere os dados em uma listBox. Voc pode usar como base, e ao invs de alimentar uma listBox, criar um record com os dados e gravar no banco:
Dim f As FolderItem
Dim textInput As TextInputStream
Dim rowFromFile, oneCell As String
Dim i As Integer
f = GetOpenFolderItem("text/plain") //defined as a FileType
If f <> Nil And f.Exists Then
Dim tab As String = ChrB(9)
textInput = TextInputStream.Open(f)
textInput.Encoding = Encodings.MacRoman //strings are MacRoman
While Not textInput.EOF
rowFromFile = textInput.ReadLine
// Set
If ListBox1.ColumnCount < CountFields(rowFromFile, tab) Then
ListBox1.ColumnCount = CountFields(rowFromFile, tab)
End If
ListBox1.AddRow("")
For i = 1 To CountFields(rowFromFile, tab)
oneCell = NthField(rowFromFile, tab, i)
ListBox1.Cell(ListBox1.ListCount-1, i-1) = oneCell
Next
Wend
textInput.Close
End If
Aqui, http://forums.realsoftware.com/viewtopic.php?f=3&t=46994, neste exemplo do frum antigo est bem detalhado a exportao e importao de dados de arquivos csv para mysql, o que praticamente a mesma coisa.
E se for apenas para uma vez, talvez valha a pena voc procurar algum programa freeware que faa isso…
O arquivo texto no tem delimitador uma tripa inteira se o campo no ocupa todo seu espao ele preenche com espacos a direita.
vou colocar um exemplo.
NCM Descricao etc…
22222222xxxxxxxxxxxxx12,80 5,78 676,78
33333333wwwwwww 5,00 13,78 12,13
Quero pegar a linha colocar dentro dos campos de uma tabela criada no Sqlite
Bom, neste caso, vai ser um pouco mais trabalhoso. Mas se voc conhece o tamanho de cada campo, sabe onde comea e termina cada um. Use o exemplo e as referncias que passei, e combine com os comandos left, mid e right, para conseguir separar os campos depois de ler a linha do arquivo.
Depois de atribuir cada parte da linha a cada campo do record, o procedimento o mesmo.
http://documentation.xojo.com/index.php/Left
http://documentation.xojo.com/index.php/Mid
http://documentation.xojo.com/index.php/Right
Blz.
Vou testar se tiver alguma zebra grito socorro.
Obrigado.
Estou com problema na rotina ele comea a executar e vem uma mensagem que o programa parou de responder.
A ideia a seguinte: tenho uma janela com um boto importar neste boto eu apago todo o contedo da tabela chamada ibpt no Sqlite e inclui o contedo do arquivo texto na mesma tabela. Notei que ele inclui uma serie de registro na tabela ibpt mas fala que o programa parou de responder.
Vou colocar o cdigo do boto importar.
If Not App.MyDb.Connect Then
MsgBox(“No existe coneco com Banco de Dados” + EndOfLine +“Favor entrar em contato com o Suporte do Sistema”)
TxtImp.SetFocus
Return
End If
Dim dl As New OpenDialog
Dim ts As TextInputStream
Dim f As FolderItem
//f =GetFolderItem(“C:\XCOMERCIO”)
dl.InitialDirectory = SpecialFolder.Desktop
dl.SuggestedFileName = “Ibptrio.txt”
dl.PromptText = “Escolha o arquivo texto”
dl.ActionButtonCaption = “Abrir”
dl.CancelButtonCaption = “Cancelar”
dl.Title = “Importao Tabela IBPT”
//dl.Filter=“txt”
f = dl.ShowModal()
If f = Nil Then
MsgBox(“Arquivo para importao obrigatorio”)
TxtImp.SetFocus
Return
End If
TxtImp.Text = f.Name
Label2.Text = “Aguarde …”
ProTempo.Visible = True // ProgressWheel
Dim sql As String
sql = “DELETE From Ibpt ;”
App.MyDb.SQLExecute(sql)
If App.MyDb.Error Then
MsgBox("Erro na Excluso Tabela IBPT " + App.MyDb.ErrorMessage)
Self.TxtImp.SetFocus
Return
End If
// ------------- aqui ele apaga o contedo da tabela certinho ------------------------------------//
Dim resultado, vdescricao, vcamp, vncm As String
Dim vfederal, vestadual, vmunicipal, vimportado, vdataini, vdatafim As String
Dim mdataini, mdatafim As Date
Dim linha As New DatabaseRecord
ts = TextInputStream.Open(f)
ts.Encoding = Encodings.MacRoman
While Not ts.EOF
resultado = ts.ReadLine
vncm = Left(resultado,8)
vdescricao = Mid(resultado,9,80)
vfederal = Mid(resultado,89,10)
vestadual = Mid(resultado,99,10)
vmunicipal = Mid(resultado,109,10)
vimportado = Mid(resultado,119,10)
vdataini = Mid(resultado,129,8)
vdataini = Right(vdataini,2) + "/" + Mid(vdataini,5,2) + "/" + Left(vdataini,4)
If Not ParseDate(vdataini,mdataini) Then
mdataini = Nil
End If
vdatafim = Mid(resultado,137,8)
vdatafim = Right(vdatafim,2) + "/" + Mid(vdatafim,5,2) + "/" + Left(vdatafim,4)
If Not ParseDate(vdatafim, mdatafim) Then
mdatafim = Nil
End If
vcamp = Right(resultado,10)
// -------- retirei o cdigo a baixo e o programa roda normal
linha.Column("ncm") = vncm
linha.Column("descricao") = vdescricao
linha.Column("federal") = vfederal
linha.Column("estadual") = vestadual
linha.Column("municipal") = vmunicipal
linha.Column("importado") = vimportado
If mdataini <> Nil Then
linha.Column("dtini") = mdataini.SQLDate
End If
If mdatafim <> Nil Then
linha.Column("dtfim") = mdatafim.SQLDate
End If
linha.Column("versao") = vcamp
App.MyDb.InsertRecord("ibpt", linha)
If App.MyDb.Error Then
MsgBox("Erro na Importao da tabela IBPT " + App.MyDb.ErrorMessage)
ts.Close
TxtImp.Text = ""
Label2.Text = ""
ProTempo.Visible = False
TxtImp.SetFocus
Exit
Return
End If
// -------------- com o codigo acima inclui registros na tabela mais o programa para de responder como entra-se em loop
Wend
MsgBox(“importao Feita com Sucesso !!!”)
ts.Close
TxtImp.Text = “”
Label2.Text = “”
ProTempo.Visible = False
TxtImp.SetFocus
Seu arquivo texto de importao muito grande ? Est na mesma mquina ou em rede ? Sinceramente, olhando seu cdigo no identifiquei nenhum motivo para este comportamento…
Se no for algo restrito / secreto, e voc puder enviar uma cpia do projeto, posso tentar depurar pra voc.
Respondi no seu email tambm…
Mandei novamente para seu email o projeto com algumas colocaes para voc analisar .
Obrigado.