Fórum Auto Incremento #333891

29/11/2006

0

Estou utilizando D7 com Fb1.53, criei no FB uma Trigger e um generators, onde estou incrementando o codigo de cliente, ate ai blz, faço cadastro pelo IBExperts e funciona direitinho, mas como eu implemento isso no DBExpress SqlDataset+Provider+ClientDataset?

Abs


Felipeiw

Felipeiw

Responder

Posts

29/11/2006

Thiago Vidal

normalmente eu nao gosto de utilizar triggers, pois o seu sistema fica sem saber qual numero foi associado ao seu ultimo registro no banco.

uso apenas o generator, e para saber o proximo valor, eu deixo um TSQLDataSet apenas para isso no data module principal, com o código:

Sendo SQLGenerator o nome do meu TSQLDataSet especifico pra isso:

function Tdm.GenID(GeneratorName: string): Integer;
begin
  with SQLGenerator do
  try
    CommandText := Format(´select gen_id(¬s, 1) from rdb$database´, [GeneratorName]);
    Open;
    Result := Fields[0].AsInteger;
  finally
    Close;
  end;
end;


e faço uma chamada à esta função no evento OnNewRecord ou AfterInsert do ClientDataSet, assim, caso eu precise cadastrar Detalhes para este registro, eu já sei qual valor de chave primária será atribuído ao meu registro recém-criado.

acredito que para programar 3 camadas vc deva chamar a função em algum lugar do seu servidor de aplicações, e não no seu ClientDataSet.


Responder

Gostei + 0

30/11/2006

Brjedi

Oi Thiago,

Esse seu problema é muito fácil de resolver. Você deve indicar que o campo é chave primária e que não deve ser atualizado pela aplicação.
Dê um duplo clique no componente, clique no campo da chave primária e altere as seguintes propriedades:

AutoGenerateValue = arAutoInc
Required = False
ProviderFlags: pfInUpdate = False; pfInWhere = True

Deste modo vc indica que o campo é chave primária, não é requerido e não é atualizado pela aplicação.

Nos outros campos:
ProviderFlags: pfInUpdate = True; pfInWhre = False

Assim esses campos não serão utilizados na cláusula WHERE para atualização (UPDATE e DELETE).

Faça isso primeiro no SQLDataSet e depois no ClientDataSet.

Se vc precisar do próximo código, dê uma olhada na ClubeDelphi deste mês. Tem um artigo meu com uma solução para isso.


[]s,


Responder

Gostei + 0

30/11/2006

Laelsonc

Acho que vcs estão inteirados...comentem aq por favor.

[url]http://forum.clubedelphi.net/viewtopic.php?t=82636[/url]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar