VALIDAR RELACIONAMENTOS DE TABELAS TEXTO...???

VILMARBR 24/09/2009 17:57:45
#323601
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.
EMERSONTADEU 24/09/2009 20:21:47
#323612
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.
VILMARBR 25/09/2009 11:25:50
#323629
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ç
VILMARBR 08/10/2009 17:58:14
#324841
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
Tópico encerrado , respostas não são mais permitidas