LEITURA DE ARQUIVO TXT COMPLEXA
Meus grande amigos estou com um problema que não estou conseguindo resolver, vamos lá!
Negócio é o seguinte, tenho uma tabela (Analises_Quimicas) no SQL Server com as colunas SampleName, Zn,AlO2,Pb,SiO2,Fe, Resultado.
Existe um aplicação que gera o código automático do campo SampleName, aà existe um equipamento de análise quÃmica que faz a análise dessas amostras e no final ele gera um arquivo txt onde o cara do laboratório me manda esse arquivo pra que eu possa enviar ao banco de dados, hoje estou fazendo isso manualmente via um sistema, colocando os resultados um a um.
Então o sistema terá que fazer o seguinte, encontrar a coluna onde está as amostras depois que encontrar verificar se a amostra existe no banco de dados, se encontrar a amostra vai localizar qual a coluna que está o elemento, depois pega o valor daquele elemento e atualiza no banco de dados, aà vai fazendo até o final do arquivo texto, verificando se não tem mais amostras.
Caso tenho alguma duvida me retornem, preciso muito da ajuda de vocês!
Vou anexar o arquivo txt para que possam ver a estrutura do arquivo texto (A coluna Sample Name do arquivo texto é a a coluna CodigoAmostra no SQL Server)
Um grande abraço
Negócio é o seguinte, tenho uma tabela (Analises_Quimicas) no SQL Server com as colunas SampleName, Zn,AlO2,Pb,SiO2,Fe, Resultado.
Existe um aplicação que gera o código automático do campo SampleName, aà existe um equipamento de análise quÃmica que faz a análise dessas amostras e no final ele gera um arquivo txt onde o cara do laboratório me manda esse arquivo pra que eu possa enviar ao banco de dados, hoje estou fazendo isso manualmente via um sistema, colocando os resultados um a um.
Então o sistema terá que fazer o seguinte, encontrar a coluna onde está as amostras depois que encontrar verificar se a amostra existe no banco de dados, se encontrar a amostra vai localizar qual a coluna que está o elemento, depois pega o valor daquele elemento e atualiza no banco de dados, aà vai fazendo até o final do arquivo texto, verificando se não tem mais amostras.
Caso tenho alguma duvida me retornem, preciso muito da ajuda de vocês!
Vou anexar o arquivo txt para que possam ver a estrutura do arquivo texto (A coluna Sample Name do arquivo texto é a a coluna CodigoAmostra no SQL Server)
Um grande abraço
Não estou conseguindo anexar o arquivo texto aqui no tópico, como faço?
Arquivo
no caso e isso o que te interessa...???
66 RFC 10 50.282 Concentration 3.40 8.54 0.93 18.83 14.96 3.64
65 RFW 10 50.437 Concentration 2.80 8.36 0.92 19.33 15.82 3.21
64 TQ 10 78.105 Concentration 39.99 7.09 0.36 5.30 4.10 21.27
63 CFC 10 76.292 Concentration 38.68 6.83 0.38 5.35 3.99 21.06
cade a estrutura do Banco???que banco é, que aplicação vc usa, Vai começar do zero?
66 RFC 10 50.282 Concentration 3.40 8.54 0.93 18.83 14.96 3.64
65 RFW 10 50.437 Concentration 2.80 8.36 0.92 19.33 15.82 3.21
64 TQ 10 78.105 Concentration 39.99 7.09 0.36 5.30 4.10 21.27
63 CFC 10 76.292 Concentration 38.68 6.83 0.38 5.35 3.99 21.06
cade a estrutura do Banco???que banco é, que aplicação vc usa, Vai começar do zero?
Verifiquei o seu arquivo e tive uma idéia.
Se o cabeçalho não sobre alterações, você pode construir uma rotina que leia leia o arquivo e a partir de uma determinada linha do arquivo você pode pegar as informações que você precisa usando o comando mid. Com isso, a cada linha que você importar você carrega as variáveis e logo em seguida grava os dados no banco de dados.
Se o cabeçalho não sobre alterações, você pode construir uma rotina que leia leia o arquivo e a partir de uma determinada linha do arquivo você pode pegar as informações que você precisa usando o comando mid. Com isso, a cada linha que você importar você carrega as variáveis e logo em seguida grava os dados no banco de dados.
Isso mesmo amigo essa é a parte de interesse, só porque as vezes os elementos trocam de posição não necessariamente ele vem nessa ordem Zn, Fe, Al2O3 pode ser inverso ou ter mais elementos.
A estrutura do campo é essa que passaei acima uma tabela chamada Analise_Qumica que tem os campos Sample_Name, Zn,AlO2,Pb,SiO2,Fe, lembrando que os códigos das amostras já estão no banco então ira fazer um UPDATE nos valores de cada elemento conforme a amostra encontrado no arquivo texto.
O Banco de dados é SQL Server 2005, estou usando VB6, estou començando do zero, essa será uma aplicação separado do do sistema que está sendo usado atualmente!
A estrutura do campo é essa que passaei acima uma tabela chamada Analise_Qumica que tem os campos Sample_Name, Zn,AlO2,Pb,SiO2,Fe, lembrando que os códigos das amostras já estão no banco então ira fazer um UPDATE nos valores de cada elemento conforme a amostra encontrado no arquivo texto.
O Banco de dados é SQL Server 2005, estou usando VB6, estou començando do zero, essa será uma aplicação separado do do sistema que está sendo usado atualmente!
NETMANIA as linhas não mudam mesmo, mas a ordem dos elementos podem mudar conforme falei para o DAVERSON.
Também tenho as opções exportar para csv com delimitador de virgula ou ponto, não sei qual seria o mais fácil
Você pode construir uma lógica onde ele pegue o nome do elemento e a partir destes dados, na hora de lêr os dados, você pegue os respectivos valores e grave em uma matriz. Após carregar a matriz, você descarregaria ela no banco.
NETMANIA a lógica não está muito complicado, agora preciso de ajuda para implementar [Ô]Codigo[Ô]
com certeza a data sera nescessario...nao se esquça dela, pois sera nescessario saber quando foi feita a altera~çao... se ainda nao e nescessario, será em breve...
um rotina de importação
Private Sub btnImportar_Click()
On Error GoTo TrataErro
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim RS1 As DAO.Recordset
Dim Linha As String
If Len(Me.txtNomeArq & vbNullString) = 0 Then [ô] Testa se txtNomeArq contém alguma coisa
MsgBox [Ô]Informe o nome do arquivo a ser importado[Ô], vbExclamation + vbOKOnly, [Ô]Vazio[Ô]
Me.txtNomeArq.SetFocus
Exit Sub
End If
If Len(Dir(Me.txtNomeArq)) = 0 Then [ô] Testa a existência do arquivo
MsgBox [Ô]O arquivo não existe!!![Ô], vbCritical + vbOKOnly, [Ô]Erro[Ô]
Me.txtNomeArq.SetFocus
Exit Sub
End If
Open Me.txtNomeArq For Input As #1 [ô] Abre o arquivo a ser importado
Set DB = CurrentDb
Set RS = DB.OpenRecordset([Ô]tblParcelas[Ô])
Set RS1 = DB.OpenRecordset([Ô]tblPagamentos[Ô])
While Not EOF(1)
Line Input #1, Linha [ô] Lê uma linha do arquivo texto
If Left$(Linha, 1) = [Ô]1[Ô] Then
With RS
.AddNew
!CNPJ = Mid$(Linha, 2, 14)
!Parcela = CInt(Mid$(Linha, 16, 2))
!ValorP = CCur(Mid$(Linha, 18, 9) & [Ô],[Ô] & Mid$(Linha, 27, 2))
!Vencimento = CVDate(Mid$(Linha, 29, 2) & [Ô]/[Ô] & _
Mid$(Linha, 31, 2) & [Ô]/[Ô] & _
Mid$(Linha, 33, 4))
.Update
End With
Else
With RS1
.AddNew
!CNPJ = Mid$(Linha, 2, 14)
!Parcela = CInt(Mid$(Linha, 16, 2))
!ValorP = CCur(Mid$(Linha, 18, 9) & [Ô],[Ô] & Mid$(Linha, 27, 2))
!Pagamento = CVDate(Mid$(Linha, 29, 2) & [Ô]/[Ô] & _
Mid$(Linha, 31, 2) & [Ô]/[Ô] & _
Mid$(Linha, 33, 4))
.Update
End With
End If
Wend
Saida:
Close
Set RS = Nothing
Set RS1 = Nothing
Set DB = Nothing
Exit Sub
TrataErro:
MsgBox Err.Description, vbExclamation + vbOKOnly, [Ô]Erro: [Ô] & CStr(Err.Number)
#If DESENV Then [ô] Compilação condicional - Em desenvolvimento
Stop
Resume
#End If
Resume Saida
End Sub
um rotina de importação
Private Sub btnImportar_Click()
On Error GoTo TrataErro
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim RS1 As DAO.Recordset
Dim Linha As String
If Len(Me.txtNomeArq & vbNullString) = 0 Then [ô] Testa se txtNomeArq contém alguma coisa
MsgBox [Ô]Informe o nome do arquivo a ser importado[Ô], vbExclamation + vbOKOnly, [Ô]Vazio[Ô]
Me.txtNomeArq.SetFocus
Exit Sub
End If
If Len(Dir(Me.txtNomeArq)) = 0 Then [ô] Testa a existência do arquivo
MsgBox [Ô]O arquivo não existe!!![Ô], vbCritical + vbOKOnly, [Ô]Erro[Ô]
Me.txtNomeArq.SetFocus
Exit Sub
End If
Open Me.txtNomeArq For Input As #1 [ô] Abre o arquivo a ser importado
Set DB = CurrentDb
Set RS = DB.OpenRecordset([Ô]tblParcelas[Ô])
Set RS1 = DB.OpenRecordset([Ô]tblPagamentos[Ô])
While Not EOF(1)
Line Input #1, Linha [ô] Lê uma linha do arquivo texto
If Left$(Linha, 1) = [Ô]1[Ô] Then
With RS
.AddNew
!CNPJ = Mid$(Linha, 2, 14)
!Parcela = CInt(Mid$(Linha, 16, 2))
!ValorP = CCur(Mid$(Linha, 18, 9) & [Ô],[Ô] & Mid$(Linha, 27, 2))
!Vencimento = CVDate(Mid$(Linha, 29, 2) & [Ô]/[Ô] & _
Mid$(Linha, 31, 2) & [Ô]/[Ô] & _
Mid$(Linha, 33, 4))
.Update
End With
Else
With RS1
.AddNew
!CNPJ = Mid$(Linha, 2, 14)
!Parcela = CInt(Mid$(Linha, 16, 2))
!ValorP = CCur(Mid$(Linha, 18, 9) & [Ô],[Ô] & Mid$(Linha, 27, 2))
!Pagamento = CVDate(Mid$(Linha, 29, 2) & [Ô]/[Ô] & _
Mid$(Linha, 31, 2) & [Ô]/[Ô] & _
Mid$(Linha, 33, 4))
.Update
End With
End If
Wend
Saida:
Close
Set RS = Nothing
Set RS1 = Nothing
Set DB = Nothing
Exit Sub
TrataErro:
MsgBox Err.Description, vbExclamation + vbOKOnly, [Ô]Erro: [Ô] & CStr(Err.Number)
#If DESENV Then [ô] Compilação condicional - Em desenvolvimento
Stop
Resume
#End If
Resume Saida
End Sub
Tópico encerrado , respostas não são mais permitidas