Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Erro na atualização...
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Titre:
Erro na atualização...
Divers
Thread ID:
00766198
Message ID:
00766198
Vues:
77
A seguir tenho um código de uma store procedure, que fica dentro do DBC, gerando chaves primárias para minhas tabelas. Funciona muito bem quando dentro do VFP, com mono usuário.

Tive observando que quando esta em rede, ele tem um problema : Quando o campo pesquisado não esta na tabela g2_gera_id, ele da um append blank ( que troquei para insert into ), nesta tabela. Quando faz isto é gerado um erro no segundo usuário dizendo que o arquivo esta sendo utilizado por outro usuário.

Já acompanhei este códgio no DEBUG,e na janela do DataSession ele fecha o arquivo. Mas mesmo assim ele diz para o outro usuário que o arquivo esta sendo usado.


Utilizando componentes COM, ele gera o mesmo erro.


Esta Procedure esta no Default Value do campo que quero cherar um ID Automático : _st_gw_geraId( "id_produto" )

Sera que existe algum erro neste código que eu não estou vendo ?

A tabela GW_GERA_ID Tem a seguinte estrutura :

pk C 20 ( Chave Primária )
nextval I ( Default Value = 1 )
Tabela C 20
FUNCTION _st_Gw_GeraId (tcCampo)
	LOCAL lnId,lcArq,lcTabela,lnRepro,llBuff

	lcTabela = ALIAS()
	lcArq    = "gw_gera_id"
	lnId     = -1
	tcCampo  = UPPER(tcCampo)
	lnRepro  = SET("Reprocess")
	
	SET REPROCESS TO 5 SECONDS && espera no máximo por 5 segundos para travar um registro.
	
	IF !USED(lcArq)
	    USE (lcArq) IN 0 SHARED  
	ENDIF 


	SELECT (lcArq)
	GO TOP IN (lcArq) 

	LOCATE FOR ALLTRIM(&lcArq..pk) == ALLTRIM(tcCampo)
	
	IF NOT FOUND()
		INSERT INTO (lcArq) (pk,tabela) VALUES (tcCampo,lcTabela)   && este insert gera o erro.
		LOCATE FOR ALLTRIM(&lcArq..pk) == ALLTRIM(tcCampo)
	ENDIF
	IF !RLOCK(lcArq)		
		ERROR [Registro travado por outro usuário, não permitindo a geração da Chave primária],[Informe a controplan]
		SET REPROCESS TO lnRepro
		RETURN -1
	ENDIF

	lnId = &lcArq..nextval
	REPLACE &lcArq..nextval WITH &lcArq..nextval + 1
	UNLOCK IN (lcArq)  && libero o registro
	USE IN (lcArq)     && fecho o arquivo.
	SELECT (lcTabela)
	SET REPROCESS TO lnRepro


	RETURN lnId
ENDFUNC 
Paulo Cesar Carneiro
desenvolvimento@controplan.com.br


"My God, what have we done?"
-- Capt. Robert Lewis, co-pilot of the Enola Gay, recalling the moment the atomic bomb exploded over Hiroshima

At 8:15 a.m. on August 6 1945
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform