O erro é que quando dois usuários rodam o procedimento ao mesmo tempo, o sistema
gera dois registros. Era para gerar um registro para um usuário e o outro
deveria receber alguma mensagem na tela.
Acho q preciso trocar o nível de isolamento do sql server.

Citando Rodrigo Scarano <[EMAIL PROTECTED]>:

> Além da dica do Leandro, sugiro criar uma tabela para armazentar o último
> sequencial disponível pois dependendo do tamanho de sua tabela, a busca com
> select max (dentro de uma transação) pode tornar o processo lento. Outra
> opção seria utilizar o campo IDENTITY do SQLServer.
>
> Sds, Rodrigo - Target Sistemas.
>   -----Mensagem original-----
>   De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> nome de Leandro Neves
>   Enviada em: sábado, 14 de maio de 2005 07:51
>   Para: sqlwin@virtualand.net
>   Assunto: Re: [sqlwin] controle de concorrência SQL SERVER
>
>
>   Oi,
>
>   Primeiro qual o erro que esta dando !
>   Segundo econtrei uma coisa não recomenda no seu codigo.
>   Pelo que entendi vc esta pegando o valor maximo do registro na tabela e
> somando + 1.. so que vc esta fazendo isso na aplicação... tornando possivel
> que duas pessoas efetuem o selecet max ao mesmo tempo e venha o mesmo valor.
>   Assim dois clientes tentaram enviar o mesmo valor para o banco podendo da
> erro de primary key.
>
>   Espero ter ajudado.
>
>
>   Leandro Neves
>
>
>   On 5/13/05, [EMAIL PROTECTED] < [EMAIL PROTECTED]>
> wrote:
>     Amigos,
>     estou com um problema no sistema, quando dois usuários baixam um cheque
> ao mesmo
>     tempo. Estou utilizando  o banco SQL SERVER.
>     Se alguém tiver um exemplo, eu ficaria grato.
>     Vou colocar o código q estou utilizando, pois alguém pode descobrir o q
> estou
>     fazendo de errado ou se está faltando alguma coisa.
>     O código é o seguinte:
>     ######################################################################
>     Set sSql = '
>                     DECLARE C_MAXIMO CURSOR FOR
>                     SELECT  maximo
>                     FROM ' || sTabela || '  FOR UPDATE
>                     OPEN C_MAXIMO
>                     FETCH NEXT FROM C_MAXIMO '
>     Call SqlPrepareAndExecute( hSqlGeral, sSql )
>
>     Set sSql = 'Select maximo from ' || sTabela || ' into :nMax'
>     Call SqlPrepareAndExecute( hSqlGeral, sSql )
>     Call SqlFetchNext( hSqlGeral, nErro )
>
>     Set sSql = '
>                     BEGIN
>                             UPDATE ' || sTabela || '
>                             SET maximo = maximo + 1
>                     END
>
>                     CLOSE C_MAXIMO
>                     DEALLOCATE C_MAXIMO '
>     Call SqlPrepareAndExecute( hSqlGeral, sSql )
>     ################################################################
>
>     Grato.
>     ==============================================
>     Lista de Centura SQLWindows
>     Administrador : [EMAIL PROTECTED]
>     [ http://www.centuraexplorer.com ]
>     Para sair desta lista mande mensagem para:
>     [EMAIL PROTECTED] sem nada no Subject e
>     com o comando a seguir no corpo da msg:
>     "unsubscribe sqlwin" (sem as aspas)
>     ==============================================
>
>
>



==============================================
Lista de Centura SQLWindows
Administrador : [EMAIL PROTECTED]
[ http://www.centuraexplorer.com ]
Para sair desta lista mande mensagem para:
[EMAIL PROTECTED] sem nada no Subject e
com o comando a seguir no corpo da msg:
"unsubscribe sqlwin" (sem as aspas)
==============================================

Responder a