Clipper On Line • Ver Tópico - DBPack()???

DBPack()???

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

DBPack()???

Mensagempor rcb2002 » 20 Ago 2013 15:04

Pessoal, boa tarde.

Mais uma dúvida meio básica, de antemão peço desculpas mas quando pergunto é porque esgotei todas as fontes de pesquisa:
Gostaria de limpar (com PACK) um DBF que estou usando pra registrar o acesso. Pela lógica, deveria existir um comando DBPack() - pra 'purgar' somente aquele arquivo - mas não o encontrei. O resultado é que quando executo a rotina abaixo dá erro de "uso exclusivo do arquivo" (provavelmente está tentando o PACK num monte de gente lá...)

Alguém se habilita?

Function Exit()
  CHK -> (OrdSetFocus(2))
  If CHK -> (DBSeek(cUser))
      If BloqueiaRegistroNaRede("CHK")
         CHK -> (DBDelete())
         Pack
      EndIf
      Main.Release
Return Nil



Mais uma vez, muitíssimo obrigado!
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

DBPack()???

Mensagempor Toledo » 20 Ago 2013 15:12

Amigo, para usar o comando PACK em um ambiente de rede (multiusuário) o banco de dados tem que ser aberto em modo exclusivo (EXCLUSIVE). Caso contrário, é gerado um erro de execução.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3063
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 242 vezes
Mens.Curtidas: 240 vezes

DBPack()???

Mensagempor alxsts » 20 Ago 2013 18:24

Olá!

Conforme o Toledo informou, o arquivo que vai sofrer a ação tem que estar aberto em modo exclusivo.
rcb2002 escreveu:Pela lógica, deveria existir um comando DBPack() - pra 'purgar' somente aquele arquivo

Realmente existe a tal função por você imaginada. Chama-se __DbPack() e pode ser usada em expressões com o operador alias (->), como mostrado abaixo:
Use temp EXCLUSIVE NEW
USE cust  EXCLUSIVE NEW

temp->( __DbPack() )   // O mesmo que emitir o comando PACK

Cust->(  DbEval( { || temp->( DbAppend() ), temp->custId := cust->custId }, { || ! Deleted() } ) )

...

DbCloseAll()
Existe também a função __dbZap(), o mesmo que emitir o comando ZAP. É possível ver que o compilador pré processa estes comandos nas respectivas funções, configurando-se a compilação para gerar o arquivo .ppo (pre processed output).

Lembre-se:
- rotinas de reorganização e indexação de tabelas devem ser executadas em momentos específicos, com o sistema bloqueado para acesso de usuários.
- não faz sentido fazer pack a cada vez que se deleta um registro, a não ser em condições muito específicas.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

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




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Google Adsense [Bot] e 3 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