[firebase-br] Auto incremento FB

Paulo Portella pportellaa.firebase em gmail.com
Qua Maio 11 15:41:04 -03 2011


Sem crise... tambem tenho minhas "luas"
Rsssss

Vamos lá, pra mim o uso de Gen_ID é bom até certo ponto.

Não gosto da idéia de minha tabela "sofrer o risco" de ter sua sequencia 
quebrada.. Como? seguindo suas palavras, se o Usuário 2 cancelar a 
edição, o usuário 1 ficou com o ID 12..

Agora, se tu fizer algo do tipo:

BeforePost da tabela (no EXE):

if Tabela.State in dsInsert then TabelaCampoID.AsInteger:=SELECT 
MAX(ID)+1 FROM TABELA

Esse é só um exemplo, o que você acha?


Vida de americano é assim: iPhone, iPod, iPad, iMac….
Já a de brasileiro é assim:IPTU, IPVA, ICMS, IPI etc


Em 11/05/2011 15:18, Alysson Gonçalves de Azevedo escreveu:
> 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
>>
> ______________________________________________
> 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