Página 1 de 3

MENSAGEM DE ERRO

Enviado: 28 Dez 2005 00:08
por Glauco Cruz Costa
Está surgindo uma mensagem de erro quando tento usar uma rotina de exclusão. Mas, o erro não é quando vou excluir, mas quando vou pesquisar o registro a excluir. O erro é o seguinte:
Workarea not in use: DBGOTOP
E, também, a linha onde aparece o problema do erro é a do Locate:
LOCATE FOR N_PRONT = PRONTUARIO
Alguém pode me ajudar nisso? Obrigado

Enviado: 28 Dez 2005 00:34
por evaldo
Workarea not in use: DBGOTOP

Vc tem que dar um SELECT, antes do DBGOTOP()...
Procure usar o SEEK ele é bem mais rápido.

OK

Enviado: 28 Dez 2005 18:51
por Glauco Cruz Costa
evaldo escreveu:Workarea not in use: DBGOTOP

Vc tem que dar um SELECT, antes do DBGOTOP()...
Procure usar o SEEK ele é bem mais rápido.

OK

NÃO ADIANTOU.
EU NEM ESTAVA USANDO O DBGOTOP E HAVIA USADO O SELECT ANTES DO LOCATE.
AGORA, TROQUEI O LOCATE PELO SEEK, E A MENSAGEM NOVA FOI:
Workarea no in use: DBSEEK. Além da solução desse erro, se possível, diga-me de que se trata os erros com os dizeres: Workarea no in use.
Obrigado.

Enviado: 28 Dez 2005 19:26
por filizola
sera que vc abriu mesmo o arquivo ???

use arquivo
dbgotop()
seek chave
travar()
delete
unlock

Enviado: 28 Dez 2005 19:30
por Glauco Cruz Costa
SIM, EU ABRI O ARQUIVO COM O SELECT. MAS COMO É UMA ROTINA DE EXCLUSÃO, EU O ABRI COM EXCLUSIVIDADE.

Re: MENSAGEM DE ERRO

Enviado: 28 Dez 2005 19:36
por Glauco Cruz Costa
AGORA, RESOLVI TROCAR O SEEK POR UMA ROTINA COM WHILE .NOT. EOF(), COM GO TOP ANTES, MAIS UM IF (IF N_PRONT = PRONTUARIO). E O ERRO VOLTOU A SER O ANTERIOR: WORKAREA NOT IN USE: DBGOTOP

Enviado: 28 Dez 2005 19:37
por filizola
teria como postar o codigo ???

Enviado: 28 Dez 2005 19:43
por Glauco Cruz Costa
//EXCLUSAO DE DADOS POR REGISTRO

PROCEDURE EXCREG // EXCLUIR
SAVE SCREEN TO EXC
SELECT 3 // USE RETORNO EXCLUSIVE
SET CONFIRM ON
GO TOP
DO WHILE .NOT. EOF()
IF LASTKEY() = 27
EXIT
ENDIF
CLS
EX = SPACE(1)
EX1 = SPACE(1)
N_PRONT=SPACE(7)
@ 07,03 CLEAR TO 17,69
@ 07,03 TO 17,69
@ 22,15 SAY "PRESSIONE ESC PARA VOLTAR AO MENU PRINCIPAL"
@ 02,26 SAY "EXCLUSAO"
@ 08,05 SAY "DIGITE O NUMERO DO PRONTUARIO:" GET N_PRONT PICT "@!"
READ
IF N_PRONT = PRONTUARIO

@ 10,05 SAY "MEDICO..........:"
@ 12,05 SAY "CLINICA.........:"
@ 14,05 SAY "DATA............:"
@ 16,05 SAY "PRONTUARIO......:"

@ 10,36 SAY MEDICO
@ 12,36 SAY CLINICA
@ 14,36 SAY DATA
@ 16,36 SAY PRONTUARIO
@ 20,10 SAY SPACE(40)
@ 22,15 SAY SPACE(6)
@ 22,20 SAY "DESEJA EXCLUIR ESTE REGISTRO? /[N]" GET EX PICT "@!"// PICT "!"; VALID EX $ "SN"
READ
IF EX # "S"
LOOP
ELSE
DELE
PACK
@ 22,20 SAY " "
@ 20,25 SAY "EXCLUIDO <ENTER>"
INKEY(0)
@ 20,25 SAY " "
ENDIF
@ 22,20 SAY "DESEJA EXCLUIR OUTRO REGISTRO? /[N]" GET EX1 PICT "@!" // PICT "!"; VALID EX1 $ "SN"
READ
IF EX1 = "S"
LOOP
SKIP
ELSE
EXIT
ENDIF
ELSE
@ 18,10 SAY "PRONTUARIO NAO CADASTRADO"
INKEY(2)
LOOP
ENDIF
ENDDO
RETURN

Enviado: 28 Dez 2005 19:51
por filizola
acho que aconteceu o que eu te disse. faltou o seguinte:

select 3
use retorno exclusive

* se bem que prefiro assim
use retorno exclusive new
* e quando for referenciar este arquvivo vc faria somente
SELECT RETORNO

ISTO AQUI NAO FUNCIONA, VC NAO ABRIU O ARQUIVO
SELECT 3 // USE RETORNO EXCLUSIVE


pode voltar com o seek e se estiver usando SET EXCLUSIVE OFF vc tem que travar o registro.

Enviado: 28 Dez 2005 20:05
por Glauco Cruz Costa
EM CIMA, NO INÍCIO DO PROGRAMA, EU JÁ HAVIA DECLARADO ASSIM:
SELECT 3
USE RETORNO EXCLUSIVE

AGORA, NA PROCEDURE, EU USEI SOMENTE SELECT 3
O // USE RETORNO EXCLUSIVE EU SÓ COLOQUEI PARA VOCÊ VER DO QUE SE TRATAVA O SELECT 3.

Enviado: 28 Dez 2005 20:09
por Glauco Cruz Costa
SERÁ QUE O ERRO NÃO PODE ESTAR NO FATO DE EU TER DECLARADO TRES SELECTS ASSIM:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2
SELECT 3
USE RETORNO EXCLUSIVE

O FATO DE EU TER DECLARADO O RETORNO DUAS VEZES PODERÁ ME DAR PROBLEMAS OU JÁ É PROBLEMA?

Enviado: 28 Dez 2005 20:22
por filizola
já é um problema, por que vc esta abrindo o arquivo duas vezes ???

por que vc abre ele shared e outra vez exclusive ???

faça assim

select 1
use retorno exclusive (se o sistema for mono usuario)
ou
use retorno shared (se o sistema for multi usuario)

select 2
use retorno2

select 1
seek chave
travar() (se for multi usuario)
delete
unlock (se for multi usuario)

Enviado: 28 Dez 2005 20:26
por Glauco Cruz Costa
já é um problema, por que vc esta abrindo o arquivo duas vezes ???

por que vc abre ele shared e outra vez exclusive ?

EU ESTOU ABRINDO SHARED NA ROTINA DE INCLUSÃO, IMPRESSÃO, PESQUISA. E EXCLUSIVE NA ROTINA DE EXCLUSÃO, POIS ELE NÃO ACEITOU EXCLUIR QUANDO EU ABRI SHARED PARA EXCLUIR.

Enviado: 28 Dez 2005 20:41
por filizola
tente da forma que te mostrei e poste aqui se deu certo

Enviado: 28 Dez 2005 20:48
por Glauco Cruz Costa
filizola escreveu:tente da forma que te mostrei e poste aqui se deu certo
APARECEU A MENSAGEM 'EXCLUSIVE REQUIRED' APONTANDO O ERRO PARA A LINHA DO PACK. EU JÁ HAVIA FEITO ASSIM ANTES, AÍ EU PESQUISEI NA NET SOBRE O TAL ERRO E ENCONTREI UM SITE QUE FALAVA QUE HÁ UM PROBLEMA NO CLIPPER, QUE NÃO ACEITA EXCLUIR REGISTROS SE NÃO SE ENTRAR COMO EXCLUSIVO NO ARQUIVO. POR ISSO ESTAVA TENTANDO DO OUTRO JEITO.
VEJA COMO FICOU AGORA:
...
RLOCK()
DELE
PACK
UNLOCK
COMMIT
...