Apagar registros pai e filho banco de dados dbf
Moderador: Moderadores
-
Fabricio Fagundes
- Usuário Nível 1

- Mensagens: 2
- Registrado em: 19 Jan 2022 11:25
- Localização: JUIZ DE FORA
Apagar registros pai e filho banco de dados dbf
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.
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.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Apagar registros pai e filho banco de dados dbf
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?
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)
Alexandre Santos (AlxSts)
-
Fabricio Fagundes
- Usuário Nível 1

- Mensagens: 2
- Registrado em: 19 Jan 2022 11:25
- Localização: JUIZ DE FORA
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Apagar registros pai e filho banco de dados dbf
Olá!
O importante é ter índices. Se NTX ou CDX pouco importa neste caso.
Me refiro às chaves. Quais campos formam as chaves de índice?alxsts escreveu:Se sim, quais?
O importante é ter índices. Se NTX ou CDX pouco importa neste caso.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Apagar registros pai e filho banco de dados dbf
Amiguinhos,
Algo assim:
Algo assim:
Código: Selecionar todos
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 [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar registros pai e filho banco de dados dbf
Acho que o Rochinha complicou à toa.
Como já foi falado, falta saber o índice disponível, e principalmente qual o relacionamento entre elas.
Se preferir:
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() )
Como já foi falado, falta saber o índice disponível, e principalmente qual o relacionamento entre elas.
Código: Selecionar todos
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
Código: Selecionar todos
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
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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Apagar registros pai e filho banco de dados dbf
Amiguinhos,
. kkkkkkkkk e eu achei que tinha simplificado.Acho que o Rochinha complicou à toa.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.