Página 1 de 2

É preciso dar um DBUNLOCK após um DBAPPEND() ??

Enviado: 17 Ago 2007 10:32
por janio
Olá a todos,

É preciso dar um DBUNLOCK() após um DBAPPEND() ???


Jânio

Enviado: 17 Ago 2007 10:37
por Maligno
O bloqueio se mantém. Portanto, desbloqueie o registro caso não precise mais dele. Até porque, alguém poderá precisar alterá-lo em seguida, num ambiente de rede.

Re: É preciso dar um DBUNLOCK após um DBAPPEND() ??

Enviado: 17 Ago 2007 10:40
por sygecom
janio escreveu:Olá a todos,

É preciso dar um DBUNLOCK() após um DBAPPEND() ???


Jânio
Tche, o DBAPPEND() cria um registro novo e Bloqueia o mesmo, eu uso DBUNLOCK() sempre depois de gravar um novo registro....até hj funcionou legal, em mono e multiusuario...

Enviado: 17 Ago 2007 10:43
por janio
Só um DBUNLOCK é necessário para que os outros da rede vejam o registro adicionado??? Ou é necessário um DBCOMMIT() tbém??

Jânio

Enviado: 17 Ago 2007 10:45
por Maligno
dbCommit() é necessário para que os buffers internos sejam descarregados para o arquivo.

Enviado: 17 Ago 2007 10:45
por sygecom
DBAPPEND()
repl campo with variavel
DBCOMMIT()
DBUNLOCK()

Enviado: 17 Ago 2007 10:48
por Maligno
Acho que o problema não está em saber usar as funções em si. Mas a necessidade ou não da dbCommit, o que eu já expliquei.

Enviado: 17 Ago 2007 10:49
por sygecom
Foi, duas resposta juntas, se eu tivese visto antes não teria postado...de uma olhada no horario dos post !!!

Enviado: 17 Ago 2007 10:51
por Maligno
Ou é necessário um DBCOMMIT() tbém??
Não esquecendo, claro, de um aspecto muito importante. Caso não tenha visto a discussão que houve há algum tempo sobre o assunto: não use dbCommit() em excesso. Isso causa uma lentidão no sistema. Se for incluir/alterar vários registros em lote (numa malha WHILE ou FOR/NEXT, por exemplo), use dbCommit() apenas após a gravação do último registro.

Enviado: 17 Ago 2007 11:04
por juniorcamilo
c nao ultilizar o dbcommit, tem algum problema e qual o problema??

Enviado: 17 Ago 2007 11:05
por janio
Ok amigos,

Estou com alguns problemas numa rede e acho que era esse o detalhe que ainda não tinha me dado conta.

Valeu a todos,

Jânio

Enviado: 17 Ago 2007 11:06
por Maligno
juniorcamilo escreveu:c nao ultilizar o dbcommit, tem algum problema e qual o problema??
Sem a execução de dbCommit() as alterações não serão imediatamente vistas pelos demais usuários da rede.

Enviado: 17 Ago 2007 11:21
por Ademir
Uma duvida...


abrindo o arquivo EXCL NEW depois do dbappend() eu preciso dar dbunlock() tambem ?

Enviado: 17 Ago 2007 11:40
por Maligno
Nem adianta tentar isso porque o arquivo já foi aberto para uso exclusivo. A execução de dbUnLock() ficaria sem efeito. Neste caso, para desbloquear, só fechando e abrindo de novo, em modo SHARED.

Enviado: 14 Set 2007 09:41
por janio
Maligno escreveu:Não esquecendo, claro, de um aspecto muito importante. Caso não tenha visto a discussão que houve há algum tempo sobre o assunto: não use dbCommit() em excesso. Isso causa uma lentidão no sistema. Se for incluir/alterar vários registros em lote (numa malha WHILE ou FOR/NEXT, por exemplo), use dbCommit() apenas após a gravação do último registro.
Olá a todos,

Voltando ao tópico... considerando que é recomedável usar o DbCommit() somente após a malha While... For... pergunto: Causaria algum dano grave em um ambiente de rede DESBLOQUEAR o registro antes do DbCommit(), como faço no código abaixo??

Código: Selecionar todos

SELECT DESDO
DBSETORDER(1)
GOTO TOP
DBSEEK(vPEDIDO)
DO WHILE CODPED = vPEDIDO
   TRAVA()
   DBDELETE()
   DBUNLOCK()
   DBSKIP()
ENDDO

DbCommitAll()
Jânio