[firebase-br] Auto incremento FB

Alysson Gonçalves de Azevedo agalysson em gmail.com
Qua Maio 11 15:18:58 -03 2011


Paulo, sem ser chato, muito pelo contrário, quero te corrigir um pouquinho
sobre

> Usuário 1 abre a tela e não aperta Insert;
> Usuário 2 abre a mesma tela mas aperta Insert, porem, no meio do
> cadastramento toca o telefone e ele atende.
> O Usuário 1 então aperta o Insert (os dois usuários agora tem o mesmo
> valor, não tem?) e termina de preencher os dados....
>

suponha o generator genID = 10
dae o usuário 2 aperta insert: o sistema faz "Select gen_id(genID,1)from
rdb$database" e retorna 11, que será o código.

em seguida, o usuário 1 chega manda um insert: o sistema faz novamente
"Select gen_id(genID,1)from rdb$database" e o retorno será 12 (e não 11) e
assim, não terá duplicidade...

faz o teste aew para ver...
a cada "Select gen_id(genID,1)from rdb$database" que você faz, o retorno
será sempre de n+1
e se vc fizer "Select gen_id(genID,10)from rdb$database", o retorno sempre
será de n+10, obviamente...



é interessante isso porque uma professora uma vez argumentou que
"fb é ruim porque a tabela não faz auto-incremento sozinha..."
porém, é justamente o fato do generator estar isolado da tabela que podemos
mostrar a 100 usuários, que apertarem insert ao mesmo tempo, seus respectivo
códigos, sem precisar de incluir 100 registros vazios na tabela apenas para
garantir que eles serão únicos.



Alysson Gonçalves de Azevedo
(11) 8491-7730

(\(''^_^ )/)

"Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião
formada sobre tudo." [Raul Seixas]





Em 11 de maio de 2011 14:47, Paulo Portella
<pportellaa.firebase em gmail.com>escreveu:

> Não é bem isso que eu quis exemplificar...
>
> Visualize:
>
> Usuário 1 abre a tela e não aperta Insert;
> Usuário 2 abre a mesma tela mas aperta Insert, porem, no meio do
> cadastramento toca o telefone e ele atende.
> O Usuário 1 então aperta o Insert (os dois usuários agora tem o mesmo
> valor, não tem?) e termina de preencher os dados....
>
> Preciso continuar o exemplo??
>
>
> Vida de americano é assim: iPhone, iPod, iPad, iMac….
> Já a de brasileiro é assim:IPTU, IPVA, ICMS, IPI etc
>
>
> Em 11/05/2011 14:43, Reijanio Nunes Ribeiro escreveu:
>
>  so se usar travamento pessimista nesse caso relemente ficaria travado
>> creio
>> eu
>>
>> Em 11 de maio de 2011 14:36, Paulo Portella
>> <pportellaa.firebase em gmail.com>escreveu:
>>
>>  Reijanio,
>>> Isso é até legal, mas tem condições.
>>>
>>> Eu não posso dar um "Insert" e depois valorar o ID da tabela com a sua
>>> função e correr o risco de o sistema ficar pausado esperando algum
>>> comando
>>> ou digitação do usuario (Prova de que 99,99% dos BUGs estão entre o
>>> teclado
>>> e a cadeira, mas isso é assunto pra outra thread )) pra depois dar o POST
>>> na
>>> tabela... Outro usuário do sistema em outra ponta dentro da rede pode ter
>>> feito antes de você.. e ai já viu né??
>>>
>>> Então, sua função só ficaria "legal" em um evento: BeforePost na condição
>>> de estar em modo dsInsert (ele pode estar em Edit, o Post será executado
>>> mesmo assim tambem)...vlw?
>>>
>>> Continue assim, você está indo no caminho certo.
>>>
>>> Vida de americano é assim: iPhone, iPod, iPad, iMac….
>>> Já a de brasileiro é assim:IPTU, IPVA, ICMS, IPI etc
>>>
>>>
>>> Em 10/05/2011 21:34, Reijanio Nunes Ribeiro escreveu:
>>>
>>>  cara faz assim
>>>
>>>> function TF_DMM.inc_gen(generator: String): Integer;
>>>> begin
>>>> QryAtualiza.Close;
>>>> qryAtualiza.CommandText :='Select gen_id('+Generator+',1)from
>>>> rdb$database';
>>>> qryatualiza.Open;
>>>> result := qryatualiza.Fields.Fields[0].AsInteger;
>>>> qryatualiza.Close;
>>>>
>>>> end;
>>>>
>>>>
>>>> f_dmm.C_Venda.Insert;
>>>> f_dmm.C_VendaCODIGO.AsInteger := f_dmm.inc_gen('GEN_C_VENDA_ID');
>>>>
>>>> 2011/5/10 W O<sistemas2000profesional em gmail.com>
>>>>
>>>>  Hola Gilberto
>>>>
>>>>> Si entiendes castellano (español), entonces puedes descargar SQL_DEMO
>>>>> desde
>>>>> este enlace:
>>>>>
>>>>> http://www.mediafire.com/?dugbqkqt4tx6bdl
>>>>>
>>>>> Allí encontrarás los programas fuente y la documentación. El programa
>>>>> está
>>>>> hecho en Visual FoxPro pero a la Base de Datos puedes acceder desde
>>>>> cualquier otro lenguaje que te permita la conexión.
>>>>>
>>>>> Saludos.
>>>>>
>>>>> Walter.
>>>>> ______________________________________________
>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>
>>>>>  ______________________________________________
>>>>>
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>  ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>  ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista