Fórum Auto Incremento #333891
29/11/2006
0
Abs
Felipeiw
Curtir tópico
+ 0Posts
29/11/2006
Thiago Vidal
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.
Gostei + 0
30/11/2006
Brjedi
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,
Gostei + 0
30/11/2006
Laelsonc
[url]http://forum.clubedelphi.net/viewtopic.php?t=82636[/url]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)