Apagar Registro do DBF
Moderador: Moderadores
Apagar Registro do DBF
Ola, gostaria de uma dica para apagar um certo dado do meu DBF aki, fiz o seguinte codigo:
sele nf
seek xnumnf
rlock()
deleTE
PACK
commit
unlock
mas da erro dizendo: Exclusive Required, queria saber como processodo pra conseguir apagar o registro... VLW
sele nf
seek xnumnf
rlock()
deleTE
PACK
commit
unlock
mas da erro dizendo: Exclusive Required, queria saber como processodo pra conseguir apagar o registro... VLW
Olá JuniorVaz,
Em um ambiente de rede local, o comando PACK é inutilizável... a não ser... que o DBF seja aberto em modo EXCLUSIVE. Para isso, seu código deveria ficar assim:
Um abraço,
Janio
Em um ambiente de rede local, o comando PACK é inutilizável... a não ser... que o DBF seja aberto em modo EXCLUSIVE. Para isso, seu código deveria ficar assim:
Código: Selecionar todos
SELECT 1
USE SEUDBF EXCLUSIVE
IF NETERR()
ALERT("ARQUIVO EM USO")
ELSE
SEEK xnumnf
DELETE
PACK
commit
ENDIFJanio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
OLÁ. ESTOU ME INTROMETENDO. MAS, FAZ PARTE DO MESMO TÓPICO.janio escreveu:Olá JuniorVaz,
Em um ambiente de rede local, o comando PACK é inutilizável... a não ser... que o DBF seja aberto em modo EXCLUSIVE. Para isso, seu código deveria ficar assim:
Um abraço,Código: Selecionar todos
SELECT 1 USE SEUDBF EXCLUSIVE IF NETERR() ALERT("ARQUIVO EM USO") ELSE SEEK xnumnf DELETE PACK commit ENDIF
Janio
ESTOU COM UM PROBLEMA.
COMO EU PODERIA USAR AO MESMO TEMPO UM DBF, ABRINDO-O SHARED PARA INCLUIR, PESQUISAR, IMPRIMIR...; E EXCLUSIVE PARA EXCLUIR.
EU JÁ TENTEI ASSIM:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO EXCLUSIVE NEW
MAS, NÃO ADIANTOU.
HÁ OUTRO JEITO? OBRIGADO
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Olá,
Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE.
Eu pelo menos faço assim...
Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE.
Eu pelo menos faço assim...
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
Obrigado, mas...Stanis Luksys escreveu:Olá,
Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE.
Eu pelo menos faço assim...
Agumas perguntas.
Precisa ser o dbdelete()?
Pode ser o delete normal?
E o que eu marquei com delete fica considerado dias como marcado pelo programa. Como é isso?...
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
- Precisa ser o dbdelete()? Pode ser o delete normal?
Mesma coisa, mas aconselho usar o dbDelete() por que pode ser util dentro de um code block e tal... É bom se acostumar acho...
- E o que eu marquei com delete fica considerado dias como marcado pelo programa. Como é isso?...
Pode ficar meses e anos até, se você usar o SET DELETED ON no inicio do programa principal, o sistema não processará estes registros. É útil porque você pode até criar algo como uma "lixeira" no seu sistema, onde o usuário pode recuperar registros excluídos... Este registors são processados apenas em comando especiais como o de indexação por exemplo e é justamente por isso que é bom dar um pack de vez em qdo.
Deu pra enteder?
Mesma coisa, mas aconselho usar o dbDelete() por que pode ser util dentro de um code block e tal... É bom se acostumar acho...
- E o que eu marquei com delete fica considerado dias como marcado pelo programa. Como é isso?...
Pode ficar meses e anos até, se você usar o SET DELETED ON no inicio do programa principal, o sistema não processará estes registros. É útil porque você pode até criar algo como uma "lixeira" no seu sistema, onde o usuário pode recuperar registros excluídos... Este registors são processados apenas em comando especiais como o de indexação por exemplo e é justamente por isso que é bom dar um pack de vez em qdo.
Deu pra enteder?
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
OBRIGADÃO.Stanis Luksys escreveu:- Precisa ser o dbdelete()? Pode ser o delete normal?
Mesma coisa, mas aconselho usar o dbDelete() por que pode ser util dentro de um code block e tal... É bom se acostumar acho...
- E o que eu marquei com delete fica considerado dias como marcado pelo programa. Como é isso?...
Pode ficar meses e anos até, se você usar o SET DELETED ON no inicio do programa principal, o sistema não processará estes registros. É útil porque você pode até criar algo como uma "lixeira" no seu sistema, onde o usuário pode recuperar registros excluídos... Este registors são processados apenas em comando especiais como o de indexação por exemplo e é justamente por isso que é bom dar um pack de vez em qdo.
Deu pra enteder?
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Aproveitando a deixa.
Voce pode abrir o mesmo .DBF varias vezes, bastando para isto utilizar o parametro ALIAS, exemplo:
USE clientes NEW SHARED
USE clientes NEW SHARED ALIAS teste
USE clientes NEW SHARED ALIAS outro
...
SELECT clientes
browse()
SELECT teste
browse()
SELECT outro
browse()
Outro exemplo:
USE clientes NEW SHARED
USE clientes NEW SHARED ALIAS DeSP
SET FILTER TO clientes->estado="SP"
GO TOP
USE clientes NEW SHARED ALIAS DeRJ
SET FILTER TO clientes->estado="RJ"
GO TOP
...
SELECT clientes
browse()
SELECT DeSP
browse()
SELECT DeRJ
browse()
Veja que usei o parametro NEW pois o Clipper assume a proxima área vazia para abrir o .DBF e não é necessário especificar numeros e voce pode selecionar pelo proprio nome ou alias do arquivo.
USE clientes NEW SHARED
USE fornec NEW SHARED
...
SELECT clientes
SELECT fornec
Fica mais visivel até para voce saber que área esta aberta ou sendo selecionada.
@braços :?)
Aproveitando a deixa.
Voce pode abrir o mesmo .DBF varias vezes, bastando para isto utilizar o parametro ALIAS, exemplo:
USE clientes NEW SHARED
USE clientes NEW SHARED ALIAS teste
USE clientes NEW SHARED ALIAS outro
...
SELECT clientes
browse()
SELECT teste
browse()
SELECT outro
browse()
Outro exemplo:
USE clientes NEW SHARED
USE clientes NEW SHARED ALIAS DeSP
SET FILTER TO clientes->estado="SP"
GO TOP
USE clientes NEW SHARED ALIAS DeRJ
SET FILTER TO clientes->estado="RJ"
GO TOP
...
SELECT clientes
browse()
SELECT DeSP
browse()
SELECT DeRJ
browse()
Veja que usei o parametro NEW pois o Clipper assume a proxima área vazia para abrir o .DBF e não é necessário especificar numeros e voce pode selecionar pelo proprio nome ou alias do arquivo.
USE clientes NEW SHARED
USE fornec NEW SHARED
...
SELECT clientes
SELECT fornec
Fica mais visivel até para voce saber que área esta aberta ou sendo selecionada.
@braços :?)
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Prezado Rochinha,
Pode ser que eu tenha então falado bobagem, mas você saberia me dizer se é possível abrir o mesmo arquivo no modo SHARED e em outra área como EXCLUSIVE...
Eu nunca tentei , mas foi isso que eu falei que acho que não dá...
Pode ser que eu tenha então falado bobagem, mas você saberia me dizer se é possível abrir o mesmo arquivo no modo SHARED e em outra área como EXCLUSIVE...
Eu nunca tentei , mas foi isso que eu falei que acho que não dá...
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Quando idealizei o tópico anterior eu iria complementar dizendo que a abertura de um mesmo .DBF em áreas diferentes e modos diferentes é impossivel pelo mesmo aplicativo.
Ou seja numa mesma rotina, voce não consegue abrir o mesmo .DBF em modos exclusivos e compartilhados ao mesmo tempo nem mesmo usando alias.
@braços :?)
Quando idealizei o tópico anterior eu iria complementar dizendo que a abertura de um mesmo .DBF em áreas diferentes e modos diferentes é impossivel pelo mesmo aplicativo.
Ou seja numa mesma rotina, voce não consegue abrir o mesmo .DBF em modos exclusivos e compartilhados ao mesmo tempo nem mesmo usando alias.
@braços :?)
- clodoaldomonteiro
- Usuário Nível 4

- Mensagens: 821
- Registrado em: 30 Dez 2006 13:17
- Localização: Teresina-PI
- Contato:
Apagar Registro do DBF
Boas,
Só uma dica para este tópico, depois de muito tempo.
Uso a seguinte rotina:
Pois acho que assim, uma hora pode acontecer de que a tabela esteja livre para ser aberta em modo Shared e seja executado o comando Pack.
Só uma dica para este tópico, depois de muito tempo.
Uso a seguinte rotina:
Código: Selecionar todos
Try
PACK
Catch
End
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar Registro do DBF
Também aproveitando a deixa.... rs
Sugestão: Crie suas próprias funções de rede/bloqueio, exemplo:
É que vai acabar querendo colocar tentativas de bloqueio, e comandos adicionais no desbloqueio, e assim já ajusta num lugar só.
Quanto ao PACK, deve ser eventual e não a cada exclusão. Imagine um pack demorado... vai ser problema.
Nada de usar COMMIT nisso, não tem nada a ver.
Sugestão: Crie suas próprias funções de rede/bloqueio, exemplo:
Código: Selecionar todos
RecLock()
DELETE
RecUnlock()
...
FUNCTION RecLock()
DO WHILE ! RLock()
Inkey(0.5)
ENDDO
RETURN NIL
FUNCTION RecUnlock()
SKIP 0
UNLOCK
RETURN NIL
É que vai acabar querendo colocar tentativas de bloqueio, e comandos adicionais no desbloqueio, e assim já ajusta num lugar só.
Quanto ao PACK, deve ser eventual e não a cada exclusão. Imagine um pack demorado... vai ser problema.
Nada de usar COMMIT nisso, não tem nada a ver.
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/