- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda para deletar registros
×
Linguagem de Programação ADVPL
Perguntas Ajuda para deletar registros
- clistenis
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 97
- Obrigados Recebidos: 0
11 anos 7 meses atrás #13004
por clistenis
Ajuda para deletar registros foi criado por clistenis
Galera boa tarde preciso da ajuda de todos....
Tenho um trecho de um fonte utilizado para cancelar registros de uma OP, a tabela SZ1, guardam registros amarrados a OP, porém há necessidades que tenho que cancelar estes registros e o fonte abaixo desenvolvido pela TOTVS apaga apenas o primeiro registro (se tenho 5 registros ele apaga apenas o primeiro).
DbSelectArea("SZ1")
SZ1->(DbSetOrder(3)) //Filial+Ordem Producao
if SZ1->(DbSeek(xFilial("SZ1")+cGet1)) //cGet1 = Numero da Ordem de Produção
While SZ1->(!EoF()) .AND. SZ1->Z1_ORDPROD == cGet1
SZ1->(RecLock("SZ1",.F.))
SZ1->(DbDelete())
SZ1->(MsUnLock())
SZ1->(DbSkip(1))
EndDo
EndIf
Alguém poderia dar uma força ai.
Obrigado
Tenho um trecho de um fonte utilizado para cancelar registros de uma OP, a tabela SZ1, guardam registros amarrados a OP, porém há necessidades que tenho que cancelar estes registros e o fonte abaixo desenvolvido pela TOTVS apaga apenas o primeiro registro (se tenho 5 registros ele apaga apenas o primeiro).
DbSelectArea("SZ1")
SZ1->(DbSetOrder(3)) //Filial+Ordem Producao
if SZ1->(DbSeek(xFilial("SZ1")+cGet1)) //cGet1 = Numero da Ordem de Produção
While SZ1->(!EoF()) .AND. SZ1->Z1_ORDPROD == cGet1
SZ1->(RecLock("SZ1",.F.))
SZ1->(DbDelete())
SZ1->(MsUnLock())
SZ1->(DbSkip(1))
EndDo
EndIf
Alguém poderia dar uma força ai.
Obrigado
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 7 meses atrás #13005
por kanaamlrr
Respondido por kanaamlrr no tópico Ajuda para deletar registros
Cara, provavelmente, quando dá o primeiro delete ele está desposicionando o registro, tenta assim:
DbSelectArea("SZ1")
SZ1->(DbSetOrder(3)) //Filial+Ordem Producao
if SZ1->(DbSeek(xFilial("SZ1")+cGet1)) //cGet1 = Numero da Ordem de Produção
While SZ1->(DbSeek(xFilial("SZ1")+cGet1))
SZ1->(RecLock("SZ1",.F.))
SZ1->(DbDelete())
SZ1->(MsUnLock())
EndDo
EndIf
a rotina pode ficar um pouco mais lenta por conta da quantidade de buscas, mas com isso você vai conseguir deletar todos os registros.
testa ai e diz pra gente se deu certo.
Abraço!
DbSelectArea("SZ1")
SZ1->(DbSetOrder(3)) //Filial+Ordem Producao
if SZ1->(DbSeek(xFilial("SZ1")+cGet1)) //cGet1 = Numero da Ordem de Produção
While SZ1->(DbSeek(xFilial("SZ1")+cGet1))
SZ1->(RecLock("SZ1",.F.))
SZ1->(DbDelete())
SZ1->(MsUnLock())
EndDo
EndIf
a rotina pode ficar um pouco mais lenta por conta da quantidade de buscas, mas com isso você vai conseguir deletar todos os registros.
testa ai e diz pra gente se deu certo.
Abraço!
Por favor Acessar ou Registrar para participar da conversa.
- clistenis
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 97
- Obrigados Recebidos: 0
11 anos 7 meses atrás #13009
por clistenis
Respondido por clistenis no tópico Ajuda para deletar registros
Olá amigo Kanaãm boa tarde tudo bem?
Obrigado pela resposta mais vou testar a sua forma.
O problema que encontrei aqui e que funcionou é que retirei o If antes do SZ1->DBSEEK
Coloquei alguns alerts e me foi informado de forma correta e cancelou todos os registros também.
Mesmo assim obrigado.....,
Obrigado pela resposta mais vou testar a sua forma.
O problema que encontrei aqui e que funcionou é que retirei o If antes do SZ1->DBSEEK
Coloquei alguns alerts e me foi informado de forma correta e cancelou todos os registros também.
Mesmo assim obrigado.....,
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda para deletar registros
Tempo para a criação da página:0.128 segundos