[firebase-br] TClientDataSet + Generator

Fabrício Fadel Kammer ffkammer em conchalnet.com.br
Qua Out 29 09:10:35 -03 2008


Pessoal obrigado pelas dicas, estou postando uma outra mensagem com um 
problema que estou encarando com o TClientDataSet, se alguém puder me 
ajudar...

[]s

Fabrício

Eduardo Bahiense escreveu:
> Sim. Não há forma segura de se atribuir chave primária sem generator.
>
> Eduardo
>
> Ulisses escreveu:
>> Bom dia!
>>
>> Esse Trigger pode gerar problema de concorrência?
>>
>> CREATE OR ALTER TRIGGER TG_TBEMPRESA FOR TBSUATABELA
>> ACTIVE BEFORE INSERT POSITION 0
>> AS
>> begin
>> if (NEW.CHAVEPRIMARIA is Null) then
>>  begin
>>  Select Coalesce(Max(CHAVEPRIMARIA),0)+1 from TBSUATABELA
>>  into NEW.CHAVEPRIMARIA;
>>  end
>> end
>> ^
>>
>> Obrigado.
>> Ulisses
>>
>> ----- Original Message ----- From: "Sandro" <sandro_rebelo em ibest.com.br>
>> To: "FireBase" <lista em firebase.com.br>
>> Sent: Wednesday, October 29, 2008 1:09 AM
>> Subject: Re: [firebase-br] TClientDataSet + Generator
>>
>>
>> Esse exemplo usa generator. Gostaria de saber como a função do Helio
>> (HPensador) funciona.
>>
>> Mas valeu mesmo assim.
>>
>> Sandro
>>
>> ----- Original Message ----- From: "Fausto" <fausto.s.a em uol.com.br>
>> To: <lista em firebase.com.br>
>> Sent: Tuesday, October 28, 2008 11:25 PM
>> Subject: Re: [firebase-br] TClientDataSet + Generator
>>
>>
>> Fabrício Fadel Kammer escreveu:
>>> Boa tarde à todos,
>>>
>>> Estou iniciando o desenvolvimento com TClientDataSet e gostaria de 
>>> uma dica do pessoal que trabalha com esse componente.
>>>
>>> Até então só utilizei os componentes IBX para acesso ao firebird e 
>>> os cadastros todos eram feitos com componentes TIBDataSet. Nesses 
>>> componentes, para fazer a geração das chaves primárias eu utilizava 
>>> a propriedade GeneratorField, a qual incrementava um generator no 
>>> momento do Post no componente. Com TClientDataSet qual seria a 
>>> melhor forma de se fazer essa mesma operação?
>> Simples..
>> Utilize esta função aqui.. ela também vai servir para múltiplas 
>> inserções:
>> function RetunId(Tabela: string;DB:TSQLConnection): Integer;
>> Var
>>   SqlAux:TSQLDataSet;
>> begin
>>   SqlAux := TSQLDataSet.Create(nil);
>>   SqlAux.Connection := DB;
>>   SqlAux.CommandText := 'SELECT GEN_ID(GEN_' + Tabela + '_ID, 1) AS
>> CODIGO FROM RDB$DATABASE';
>>   SqlAux.Open;
>>   Result := SqlAux.FieldByName('CODIGO').asInteger;
>>   SqlAux.Close;
>>   SqlAux.Destroy;
>> end;
>> Agora você a chama no evento BeforePost do seu ClientDataSet:
>> procedure TSeuDM.SeuClientDataSetBeforePost(DataSet: TDataSet);
>> begin
>>   if SeuClientDataSet.State = dsInsert then
>>     SeuClientDataSetSEUCAMPO.AsInteger := 
>> ReturnId('SuaTable',SuaConexao);
>> end;
>>
>> Em tempo, a idéia deste código foi retirada do livro *Firebird 
>> Essencial*
>
>
> ______________________________________________
> 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
>


-- 
/*><((º>`·.¸.·´¯`·.:°`·..¸><((º>.°
Fabrício Fadel Kammer
Conchal - SP/*  ·´¯`·.><((º>
/*><((º>`·.¸.·´¯`·.,·><((º> .·°*/*/*/




Mais detalhes sobre a lista de discussão lista