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: 3107
- 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: 3107
- 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: 4666
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Curtiu: 1 vez
- 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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 4666
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Curtiu: 1 vez
- 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.