****************************************** #define ARQUIVO_PK "gw_gera_id" && --> NOVO FUNCTION _st_Gw_GeraId (tcCampo) LOCAL lnId,lcArq,lcTabela,lnRepro,llBuff LOCAL loSession,lnOldSession,lnIdSession,lcOldError m.lcOldError = ON("ERROR") m.lnOldSession = SET("Datasession") m.loSession = CREATEOBJECT("Session") m.lnIdSession = loSession.DataSessionId m.lcTabela = ALIAS() ON ERROR DO _geraId_error WITH ERROR() SET DATASESSION TO m.lnIdSession && para fugir a possiveis transações que estejam pendentes. m.lnId = -1 m.tcCampo = UPPER(m.tcCampo) m.lnRepro = SET("Reprocess") SET REPROCESS TO 5 SECONDS && espera no máximo por 5 segundos para travar um registro. IF !USED(ARQUIVO_PK) && ----->>>> ALTERADO USE ARQUIVO_PK IN 0 SHARED && ------->>>> ALTERADO.. ENDIF SELECT ARQUIVO_PK && ----->>>> ALTERADO GO TOP LOCATE FOR ALLTRIM(pk) == ALLTRIM(m.tcCampo) && ----->>> ALTERADO IF NOT FOUND() INSERT INTO ARQUIVO_PK (pk,tabela) VALUES (m.tcCampo,m.lcTabela) && ----->>> ALTERADO LOCATE FOR ALLTRIM(pk) == ALLTRIM(m.tcCampo) && ----->>> ALTERADO ENDIF IF !RLOCK() && ----->>> ALTERADO ERROR [Registro travado por outro usuário, não permitindo a geração da Chave primária],[Informe ao suporte] SET REPROCESS TO lnRepro RETURN -1 ENDIF m.lnId = nextval && ----->>> ALTERADO REPLACE nextval WITH nextval + 1 && ----->>> ALTERADO UNLOCK && ----->>> ALTERADO USE && ----->>> ALTERADO SET REPROCESS TO m.lnRepro SET DATASESSION TO m.lnOldSession RELEASE loSession IF NOT EMPTY(m.lcTabela) SELECT (lcTabela) ENDIF ON ERROR &lcOldError RETURN lnId ENDFUNC PROCEDURE _geraId_error LPARAMETERS lnErro LOCAL lcMensagem m.lcMensagem = CHR(13)+[Stored Procedure _st_Gw_GeraId ] + CHR(13) +; [Erro : ] + PADL( ERROR() ,4,[0]) + CHR(13) +; [Linha : ] + PADL( LINENO(),4,[0]) + CHR(13) +; MESSAGE()+ CHR(13)+; DTOC(DATE()) + " " + TIME() + CHR(13) +; ALIAS()+ CHR(13) STRTOFILE( lcMensagem,[geraid.log],1 ) ENDPROC>Alow Paulo,