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]Em nome de Leandro Neves
Enviada em: s�bado, 14 de maio de 2005 07:51
Para: [email protected]
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)
==============================================

Responder a