Pessoal, como que faz para relacionar dois ou mais arquivos ao mesmo tempo ?
Exemplo: Orçamento -> relacionar-se com Clientes.dbf e Contas a Receber.dbf. No NG, o comando mais próximo desse resultado que estou querendo obter seria o "set relation", mas nem tenho idéia de como se coloca esse comando em um conjunto de programaçao. O exemplo do NG achei eu muito complexo.
Para ser mais claro, explico melhor: Orçamento através do codigo busca o Cliente.dbf trazendo o codigo e o nome do mesmo, que também irá se relacionar com o Contas a Receber.dbf que somente irá rastrear se há débitos.
Gostaria de saber se os colegas poderiam me dar algumas dicas sobre esse comando e se há outras maneiras de fazer tal procedimento. Aguardo alguns exemplos no tópico. Em ocasiões passadas andei buscando alguma coisa sobre esse assunto, mas não tive sucesso.
Um abraço a todos
fuiiii
:xau
Relacionar dois ou mais bancos de dados
Moderador: Moderadores
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Re: Relacionar dois ou mais bancos de dados
O set relation funciona para o que vc quer, mas eu FORTEMENTE não usar esse comando.
Eu particularmente uso pesquisas on line para recuperar os dados de outros arquivos.
É que o set relation parece ser bem lento, amarra os arquivos e se vc esquecer de desativar, vai ter problemas com os outros arquivos.
No orçamento vc tem o código do cliente, dbseek no arquivo de clientes.
Como vc já tem o número do orçamento, dbseek no arquivo de itens e while para recuperar os itens do orçamento.
Com o código do cliente e No. do orçamento, dbseek no arquivo de parcelamento e while para recuperar as parcelas.
Se vc quer saber a divida do cliente, dbseek no arquivo de contas a pagar.
Eu particularmente uso pesquisas on line para recuperar os dados de outros arquivos.
É que o set relation parece ser bem lento, amarra os arquivos e se vc esquecer de desativar, vai ter problemas com os outros arquivos.
No orçamento vc tem o código do cliente, dbseek no arquivo de clientes.
Como vc já tem o número do orçamento, dbseek no arquivo de itens e while para recuperar os itens do orçamento.
Com o código do cliente e No. do orçamento, dbseek no arquivo de parcelamento e while para recuperar as parcelas.
Se vc quer saber a divida do cliente, dbseek no arquivo de contas a pagar.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Relacionar dois ou mais bancos de dados
Olá!
Josmar:
Sei que pouca gente usa essa técnica. Normalmente se faz no braço mesmo...
Preparei uma rotina mas não testei. Veja se consegue adaptar para o que você precisa.
Josmar:
Sei que pouca gente usa essa técnica. Normalmente se faz no braço mesmo...
Preparei uma rotina mas não testei. Veja se consegue adaptar para o que você precisa.
Código: Selecionar todos
PROCEDURE Teste()
USE CReceb NEW ALIAS CReceb
USE cliente NEW INDEX cliente
USE Orcam NEW INDEX Orcam
DBSETRELATION("Cliente", {|| Orcam->cdcli},"Orcam->cdcli") // Cliente->( DbSeek( Orcam->cdcli ) )
DBSETRELATION("CReceb", {|| Orcam->cdcli},"Orcam->cdcli") // CReceb->( DbSeek( Orcam->cdcli ) )
ORCAM->( DbGoTop() ) // já faz o seek em cliente e creceb
WHILE ! Orcam-( Eof() )
// Procemdimentos
If CReceb->( ! Eof() )
// Cliente tem título em aberto; tratar
Endif
Orcam->( DbSkip() )
ENDDO
DbCloseAll()
RETURN
//-----------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Re: Relacionar dois ou mais bancos de dados
Em primeiro lugar, você precisa ter um campo de mesma natureza,espécie e tamanho, que exista em todos os arquivos que irão se relacionar, por exemplo: código do cliente.
Depois, defina qual será o arquivo que será tratado de forma sequencial, sendo que os demais serão acessados por um campo desse arquivo, de forma aleatória/randomica, para o qual devem existir índices próprios para o campo que servirá de índice.
Aí, é só construir um "do while ! eof()" do arquivo sequencial e ir acessando os arquivos de leitura e gravando o(s) arquivos de saída. Não esqueça de usar os "aliases" corretamente. O comando SKIP ou função DBSKIP() somente se aplicará no arquivo lido de forma sequencial.
Antigamente, nos meus tempos de COBOL, chamavamos isso de "balance line".
Depois, defina qual será o arquivo que será tratado de forma sequencial, sendo que os demais serão acessados por um campo desse arquivo, de forma aleatória/randomica, para o qual devem existir índices próprios para o campo que servirá de índice.
Aí, é só construir um "do while ! eof()" do arquivo sequencial e ir acessando os arquivos de leitura e gravando o(s) arquivos de saída. Não esqueça de usar os "aliases" corretamente. O comando SKIP ou função DBSKIP() somente se aplicará no arquivo lido de forma sequencial.
Antigamente, nos meus tempos de COBOL, chamavamos isso de "balance line".
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
