VALIDAR RELACIONAMENTOS DE TABELAS TEXTO...???
Oi Pessoal,
Eu tenho arquivos de dados com estrutura conforme abaixo:
Cabeçalho
Dados
Rodapé
Vejam:
00000001TABE001 24.09.2009-11:51:53
0000000993218 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000883218 02.01.190002.01.1900000NNN00000NS 2SN00.00000001234
0000000553425 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000513333 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000614878 11/09/200911/09/2009000NNN00000NP 2SN00.00000001231
0000000714995 02.01.190002.01.1900000NNN00000NP 2SN00.00000001234
0000000814907 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000914491 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
.....E VEM MAIS DADOS POR AQUI......
99999999126
Eu queria abrir este vários TXTs que representam várias tabelas de bancos de dados a serem exportadas num novo modelo extraÃdo a partir de dados dum banco antigo a ser migrado, e comparar os relacionamentos, tabela1 com tabela2, tabela3 com tabela10 e assim sucessivamente conforme o modelo.
Porém se for usar um esquema para abrir TXT como banco de dados:
http://www.macoratti.net/txt_arqs.htm
ou mesmo outro com ADO (acharia melhor) , eu tenho os campos do cabeçalho e rodapé para estragar a ordem de extração de dados do TXT e jogar numa tabela temporária na memória !!!
Enfim, qual uma solução para este problema?
Teria como eu criar pelo VB um banquinho em access 97 (7.0) mesmo e jogar os dados lá para dentro e depois validar ??
Se tiver este esquema, seria muito mais sussa, só num sei seria mais rápido ......
Obrigado.
Eu tenho arquivos de dados com estrutura conforme abaixo:
Cabeçalho
Dados
Rodapé
Vejam:
00000001TABE001 24.09.2009-11:51:53
0000000993218 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000883218 02.01.190002.01.1900000NNN00000NS 2SN00.00000001234
0000000553425 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000513333 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000614878 11/09/200911/09/2009000NNN00000NP 2SN00.00000001231
0000000714995 02.01.190002.01.1900000NNN00000NP 2SN00.00000001234
0000000814907 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
0000000914491 11/09/200911/09/2009000NNN00000NS 2SN00.00000001234
.....E VEM MAIS DADOS POR AQUI......
99999999126
Eu queria abrir este vários TXTs que representam várias tabelas de bancos de dados a serem exportadas num novo modelo extraÃdo a partir de dados dum banco antigo a ser migrado, e comparar os relacionamentos, tabela1 com tabela2, tabela3 com tabela10 e assim sucessivamente conforme o modelo.
Porém se for usar um esquema para abrir TXT como banco de dados:
http://www.macoratti.net/txt_arqs.htm
ou mesmo outro com ADO (acharia melhor) , eu tenho os campos do cabeçalho e rodapé para estragar a ordem de extração de dados do TXT e jogar numa tabela temporária na memória !!!
Enfim, qual uma solução para este problema?
Teria como eu criar pelo VB um banquinho em access 97 (7.0) mesmo e jogar os dados lá para dentro e depois validar ??
Se tiver este esquema, seria muito mais sussa, só num sei seria mais rápido ......
Obrigado.
Irmãozinho, sei muito bem que não é a resposta que deseja mas no seu caso arquivos de dados XML com validação por schema XSD me parecem muito mais apropriados.
Isto pq se vc quiser mudar a validação basta vc mudar o XSD que todas verificações seriam automaticamente herdadas.
O problema que as ferramentas VB6 para gerenciar isto são precárias se comparadas com as fornecidas pela Framework do .Net.
O que estou tentando dizer é que se alguma regra de validação precisasse ser alterada vc troca o XSD no diretório e tudo começa a validar com a nova regra sem nenhuma compilação.
VS2010 beta1 pode ser baixado grátis e ajudaria muito .... apenas uma sugestão.
Isto pq se vc quiser mudar a validação basta vc mudar o XSD que todas verificações seriam automaticamente herdadas.
O problema que as ferramentas VB6 para gerenciar isto são precárias se comparadas com as fornecidas pela Framework do .Net.
O que estou tentando dizer é que se alguma regra de validação precisasse ser alterada vc troca o XSD no diretório e tudo começa a validar com a nova regra sem nenhuma compilação.
VS2010 beta1 pode ser baixado grátis e ajudaria muito .... apenas uma sugestão.
humm, blz...tô tentando bolar um outro esquema, a idéia até que um pouco parecida com a sua, mas vou usar access 7.0 (arquivo .mdb) , o qual abrirá em
qq canto que eu distribuir a aplicação, pois usamos o ado 2.5, além do mais, senão me engano, a aplicação fica num servidor
só e os usuários usarão atalho.
qdo eu estiver gerando os txts eu vou jogar só os campos chaves das tabelas geradas no access, o qual eu já terei as tabelas
criadas.
dando certo, eu dou retorno aqui.
por eqto num vou fechar o tópico até ver se deu certo mesmo.
de qq forma, outras idéias são bem-vindas.
abç
qq canto que eu distribuir a aplicação, pois usamos o ado 2.5, além do mais, senão me engano, a aplicação fica num servidor
só e os usuários usarão atalho.
qdo eu estiver gerando os txts eu vou jogar só os campos chaves das tabelas geradas no access, o qual eu já terei as tabelas
criadas.
dando certo, eu dou retorno aqui.
por eqto num vou fechar o tópico até ver se deu certo mesmo.
de qq forma, outras idéias são bem-vindas.
abç
ahhh, bolei um esquema legal de validação, junto com pessoal do trampo, segue abaixo.
grato por quem visitou o tópico.
-----
Private Sub Consistencia_t53_t52()
On Error GoTo Handle_Error
Dim objRS As ADODB.Recordset [ô]Objeto de recordset
Dim strSQL As String [ô]String com código SQL
[ô]Criar tabelas temporárias, só para esta consistência
strSQL = [Ô]select codigo into tabela_053_t from tabela_053[Ô]
Call g_objConexaoAccess.Execute(strSQL)
strSQL = [Ô]select codigo into tabela_052_t from tabela_052[Ô]
Call g_objConexaoAccess.Execute(strSQL)
[ô]Fazer a consistência
strSQL = [Ô]delete from tabela_053_t where codigo in (select codigo from tabela_052_t)[Ô]
Call g_objConexaoAccess.Execute(strSQL)
strSQL = [Ô]select codigo from tabela_053_t where codigo is not null[Ô]
Set objRS = New ADODB.Recordset
Call objRS.Open(strSQL, g_objConexaoAccess, adOpenForwardOnly, adLockReadOnly, adCmdText)
If Not objRS.EOF Then
While Not objRS.EOF
[ô]Grava o log com problemas - NOK
strSQL = [Ô]insert into log_consistencia(consistencia,campo,valor,observacao) [Ô] _
& [Ô]values([ô]TABELA053->TABELA052[ô],[ô]codigo[ô],[ô][Ô] & Val(objRS([Ô]codigo[Ô])) & [Ô][ô],[ô]Consistência NOK[ô])[Ô]
Call g_objConexaoAccess.Execute(strSQL)
objRS.MoveNext
Wend
ElseIf objRS.EOF Then
[ô]Grava o log sem problemas - OK
strSQL = [Ô]insert into log_consistencia(consistencia,campo,valor,observacao) [Ô] _
& [Ô]values([ô]TABELA053->TABELA052[ô],[ô][ô],[ô][ô],[ô]Consistência OK[ô])[Ô]
Call g_objConexaoAccess.Execute(strSQL)
End If
Set objRS = Nothing
[ô]Apagar tabelas temporárias
strSQL = [Ô]drop table tabela_053_t[Ô]
Call g_objConexaoAccess.Execute(strSQL)
strSQL = [Ô]drop table tabela_052_t[Ô]
Call g_objConexaoAccess.Execute(strSQL)
Exit Sub
Handle_Error:
If Err.Number = -2147217865 Then [ô]Table [ô]xxxxx[ô] does not exist.
Resume Next
Else
MsgBox [Ô]Erro: [Ô] & Err.Number & vbCrLf & Err.Description, vbCritical, [Ô]frmConsistencia / Consistencia_t53_t522[Ô]
End If
End Sub
grato por quem visitou o tópico.
-----
Private Sub Consistencia_t53_t52()
On Error GoTo Handle_Error
Dim objRS As ADODB.Recordset [ô]Objeto de recordset
Dim strSQL As String [ô]String com código SQL
[ô]Criar tabelas temporárias, só para esta consistência
strSQL = [Ô]select codigo into tabela_053_t from tabela_053[Ô]
Call g_objConexaoAccess.Execute(strSQL)
strSQL = [Ô]select codigo into tabela_052_t from tabela_052[Ô]
Call g_objConexaoAccess.Execute(strSQL)
[ô]Fazer a consistência
strSQL = [Ô]delete from tabela_053_t where codigo in (select codigo from tabela_052_t)[Ô]
Call g_objConexaoAccess.Execute(strSQL)
strSQL = [Ô]select codigo from tabela_053_t where codigo is not null[Ô]
Set objRS = New ADODB.Recordset
Call objRS.Open(strSQL, g_objConexaoAccess, adOpenForwardOnly, adLockReadOnly, adCmdText)
If Not objRS.EOF Then
While Not objRS.EOF
[ô]Grava o log com problemas - NOK
strSQL = [Ô]insert into log_consistencia(consistencia,campo,valor,observacao) [Ô] _
& [Ô]values([ô]TABELA053->TABELA052[ô],[ô]codigo[ô],[ô][Ô] & Val(objRS([Ô]codigo[Ô])) & [Ô][ô],[ô]Consistência NOK[ô])[Ô]
Call g_objConexaoAccess.Execute(strSQL)
objRS.MoveNext
Wend
ElseIf objRS.EOF Then
[ô]Grava o log sem problemas - OK
strSQL = [Ô]insert into log_consistencia(consistencia,campo,valor,observacao) [Ô] _
& [Ô]values([ô]TABELA053->TABELA052[ô],[ô][ô],[ô][ô],[ô]Consistência OK[ô])[Ô]
Call g_objConexaoAccess.Execute(strSQL)
End If
Set objRS = Nothing
[ô]Apagar tabelas temporárias
strSQL = [Ô]drop table tabela_053_t[Ô]
Call g_objConexaoAccess.Execute(strSQL)
strSQL = [Ô]drop table tabela_052_t[Ô]
Call g_objConexaoAccess.Execute(strSQL)
Exit Sub
Handle_Error:
If Err.Number = -2147217865 Then [ô]Table [ô]xxxxx[ô] does not exist.
Resume Next
Else
MsgBox [Ô]Erro: [Ô] & Err.Number & vbCrLf & Err.Description, vbCritical, [Ô]frmConsistencia / Consistencia_t53_t522[Ô]
End If
End Sub
Tópico encerrado , respostas não são mais permitidas