Clipper On Line • Ver Tópico - Apagar registros pai e filho banco de dados dbf

Apagar registros pai e filho banco de dados dbf

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Apagar registros pai e filho banco de dados dbf

Mensagempor Fabricio Fagundes » 20 Jan 2022 13:12

Boa tarde! Gostaria de uma ajuda de como apagar os registros de duas tabelas sendo pai e filho. A tabelas tem a seguintes estrutura;
Tabela Venda
NUMFICHA, COD_CLI, OPERACAO, DATAOP, NFISCAL, VALORTOTAL, VENCIMENTO, SITUACAO.

Tabela ItemVenda
NUMFICHA, PROCOD, DATAOPE, COD_CLI, PRECOMP, QUANT, DESC, PREVENDA

Gostaria de apagar os registros nas duas tabelas que tenham a situacao "quitada".

Desde já, agradeço atenção.
Fabricio Fagundes
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 2
Data de registro: 19 Jan 2022 11:25
Cidade/Estado: JUIZ DE FORA
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Apagar registros pai e filho banco de dados dbf

Mensagempor alxsts » 20 Jan 2022 17:41

Olá!

Seja bem-vindo ao Fórum, Fabrício!

Faltou uma informação que muda completamente a forma de fazer o que quer:

Estas tabelas tem índices? Se sim, quais?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Apagar registros pai e filho banco de dados dbf

Mensagempor Fabricio Fagundes » 20 Jan 2022 21:01

Boa noite!

Alexandre, NTX.

Grato pela atenção.
Fabricio Fagundes
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 2
Data de registro: 19 Jan 2022 11:25
Cidade/Estado: JUIZ DE FORA
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Apagar registros pai e filho banco de dados dbf

Mensagempor alxsts » 20 Jan 2022 21:35

Olá!
alxsts escreveu:Se sim, quais?

Me refiro às chaves. Quais campos formam as chaves de índice?

O importante é ter índices. Se NTX ou CDX pouco importa neste caso.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Apagar registros pai e filho banco de dados dbf

Mensagempor rochinha » 05 Mar 2022 13:16

Amiguinhos,

Algo assim:

function EliminaPaisEFilhos( sCodigoPai )

use pai new shared index codigopai
use filhos new shared index codigopai // campo unificador dos filhos do pai

select pai
seek sCodigoPai // Se tiver indices pelo sCodigoPai senão usa-se LOCATE sCodigoPai
if found()
   sRegistroPai := recno()
   select filho
   do while .not. eof()
        if filho->codigopai = sCodigoPai
           rlock()
           dbDelete()
           unlock()
        endif
        dbskip
   enddo
   select pai
   go sRegistroPai
   if pai->codigopai = sCodigoPai
      rlock()
      dbDelete()
      unlock()
   endif
endif
...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Apagar registros pai e filho banco de dados dbf

Mensagempor JoséQuintas » 05 Mar 2022 23:19

Acho que o Rochinha complicou à toa.

Como já foi falado, falta saber o índice disponível, e principalmente qual o relacionamento entre elas.

SELECT principal
GOTO TOP
DO WHILE ! Eof()
   IF principal->Situacao == "quitada"
      SELECT filha
      SEEK principal->Chave
      DO WHILE filha->Chave == principal->Chave .AND. ! Eof()
           DELETE
          SKIP
     ENDDO
     SELECT principal
   ENDIF
   SKIP
ENDDO


Se preferir:

SELECT principal
GOTO TOP
DO WHILE ! Eof()
   IF principal->Situacao == "quitada"
      ApagaFilha( principal->Chave )
   ENDIF
   SKIP
ENDDO
RETURN

FUNCTION ApagaFilha( cChave )
   LOCAL nSelect := Select()
      SELECT filha
      SEEK cChave
      DO WHILE filha->Chave == cChave .AND. ! Eof()
           DELETE
          SKIP
     ENDDO
     SELECT   (nSelect)
   RETURN Nil


Neste segundo é até interessante, é a velha história de dividir o problemão em problemas menores.
1. processar e identificar o que está quitado
2. apagar os registros referentes ao que está quitado

De adicional, se processar o arquivo principal sem índice, pode criar um gráfico de processamento até com estimativa de tempo.
GrafTempo( RecNo(), LastRec() )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Apagar registros pai e filho banco de dados dbf

Mensagempor rochinha » 08 Mar 2022 11:51

Amiguinhos,

Acho que o Rochinha complicou à toa.
. kkkkkkkkk e eu achei que tinha simplificado.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro