Página 1 de 1
Filtrar vários DBFS ao mesmo tempo
Enviado: 15 Mar 2006 15:03
por Josmar dos Santos
Bom dia pessoal...tudo bom ?
Tenho um cliente que presta serviços para seguradoras, ou seja, o mesmo faz guincho e também funilaria. As vezes o veículo fica num barração a espera da liberação. O que ele está querendo é o seguinte:
Filtrar o veículo pela placa sobre três arquivos de uma vez..por exemplo:
ORDEM.DBF, BARRACAO.DBF E SINISTRO.DBF...Tem como fazer isso ?
O resultado da filtragem pode ser através de um relatório ou numa Tbrowse!..Com isso ele será capaz de localizar o veículo e saber se ele está em uma dessas opções...
Grato..Obrigado
Josmar
:xau
Enviado: 15 Mar 2006 16:04
por vailton
qual versão do clipper? qual seu rdd DBFNTX ou DBFCDX?
Consulta
Enviado: 15 Mar 2006 23:10
por Josmar dos Santos
Ola Vailton ..Blz ?
Conforme sua pergunta...eis a respostas
Vesão do Clipper : Clipper5.2
DBFNTX E : BARRACAO.DBF(BARRA024.NTX), SINISTRO.DBF(SINIS030.NTX) E ORDEM.DBF(ORDEM041.NTX).
Conforme eu mencionei no tópico, ele quer consultar esses três aquivos de uma so vez para saber onde está o veículo, ou seja, sem precisar consultar um por um...ok
Quando a pergunta que vc me mandou, se não tiver certa a resposta, me corrige..sem mais
grato
Josmar
Enviado: 16 Mar 2006 08:31
por vailton
Sem conhecer o sistema, os DBFs e claro a logica do programador fica dificil dar um exemplo, mas eu gostei do desafio. Montei uma tela onde relaciona-se 3 arquivos e mostra-se informações deles ao mesmo tempo que são movimentados na tela, levando-se e mconsideração a placa do veiculo.
Uma solução real, talvez usaria o numero da ocorrencia ou outro fator, para buscar um registro único, afinal um cliente pode passar pelo mesmo guincho + de 1 vez - cara azarado, mas tudo bem.
O mais importante, é que é um exemplo simples, bem didático e q tem muitos detalhes que precisa ser ajustado ainda, especialmente nas 2 planilhas auxiliares onde os dados devem ser exibidos listando-se logicamente do ULTIMO registro para o PRIMEIRO - e neste caso um indice com DESC seria de grande ajuda.
Dentre todos os muitos modos possiveis, montei algo com DBEDIT() mesmo, utilizando um looping para exibir os dados de cada cliente contigo no arquivo PRINC.DBF. Talvez TBROWSE fosse melhor, mas a abordagem poderia ficar pesada num arquivo grande, pq iria forçar o uso de SET FILTER ou algo assim. Deste modo, escolhi fazer algo que apresente os dados rapidamente na tela e deixar uma opção com tecla de atalho para o usuario poder ter a opção de visualizar maiores informações em algo segundário.
Por favor, estou disponibilizando o codigo zipado do exemplo , no link abaixo até o final do mês:
http://www.sqllib.com.br/RELACION.ZIP
O resto é de praxe: "use-o para seu aprendizado sem nenhuma garantia de suporte, garantia de funcionamento, etc..etc.."
Fora isto, espero que seja de ajuda!
Enviado: 16 Mar 2006 09:51
por MARCELOG
Caro Josmar,
há infinidade de soluções para o seu problema dependendo da situação.
Então veja o comando SET RELATION ou função respectiva e os tópicos de tbrowse filtrada no forum.
Mas o normal para essa situação é o seguinte.
Existe um arquivo de veículos (acertei!?).
Dessa forma, você cria um tbrowse com dois campos (ou mais).
Uma coluna é a placa do veículo, a outra o local.
A coluna do veículo é fácil.
Já a coluna do local, também é (rá,rá,rá)
Crie a coluna do local assim:
x:tbcolumnew("Local",{||.T.})
...
Depois, você pega essa coluna e no seu objeto block (o que você vê na tela), faça o seguinte:
x:getcolumn(2):block:={|local|pegalocal(ArquivoVeiculo->VeiculoPlaca)}
... e aí vai o resto
Finalmente, crie a função que retorna o local.
Function pegalocal(VeiculoPlaca)
local LocalVeiculo
If ArquivoOrdem->DbSeek(VeiculoPlaca)
LocalVeiculo:="Ordem"
ElseIf ArquivoBarracao->DbSeek(VeiculoPlaca)
LocalVeiculo:="Barracao"
ElseIf ArquivoSinistro->DbSeek(VeiculoPlaca)
LocalVeiculo:="Sinistro"
Else
LocalVeiculo:="não sei"
End
Return LocalVeiculo
Espero ter ajudado.
MarceloG
de Divinópolis/MG para o mundo Uai!
dbs
Enviado: 16 Mar 2006 14:07
por Josmar dos Santos
Ok..galera....ambas as dicas que vocês me passaram vou testa-las...qualquer coisa eu corro atrás de vocês de novo...
Um abraço..
Josmar