Caro Carlos,

O que vc esta fazendo não eh uma gambiarra nao, apenas uma forma diferente de 
se fazer uma acao funcionar. Pois o correto é isso mesmo, atribuir um valor ao 
clientdataset quando entrar em modo de inserção, nao vejo isso como gambiarra. 
Mas, pra te salvar ver se esse metodo funciona, pois faço assim nas minhas 
aplicações. Certo?. 
Coloco um componente sqlQuery no meu form, associando o mesmo a ligacao ao 
banco e no parametro SQL, atribuo o seguinte codigo: SELECT 
gen_id(gen_vendedores,1) codven FROM RDB$DATABASE. O que isso faz?. É o 
seguinte eu ja tenho criado o generator no banco que se chama gen_vendedores, 
ai peço pra o select ir la no generator acrescentar + 1 no mesmo generator tudo 
isso usando uma tabela do banco que eh a RDB$DATABASE e atribui esse valor que 
eh inteiro em um parametro chamado CODVEN, que podia se chamar qualquer um. 
Quando saiu do tEdit e ele verifica que esta fazio, no evento onKeyDown ele 
executa o seguinte codigo:

        qryCodVend.Close;
        qryCodVend.Open;
        edtCodVend.Text := qryCodVend.FieldByName('codven').AsString;

        SDSVendedores.Close;
        CDSVendedores.Close;
        SDSVendedores.ParamByName('codven').AsInteger := 
StrToInt(edtCodVend.Text);
        CDSVendedores.Open;

        if CDSVendedores.IsEmpty then
        begin
          DM.NovoRegistro(CDSVendedores);
        end;

Esse codigo faz o seguinte, fecha a query e abre novamente, quando a abre ela 
eh executada com o select que esta nela (aquele que coloquei acima) certo ?. Ai 
atribuo o codigo que ele gerou ao edtCodVend.text, ai verifico se existe um 
codigo igual ao que ele gerou no segundo bloco e no terceiro bloco se o 
clientdataset estiver fazio ele appenda, essa funcao novoREgistro eu criei pra 
efeito de padrão de desenvolvimento de sistema. Quando vc for gravar as 
informacoes no banco ai vc coloca no evento do clientdataset onnewrecord o 
seguinte codigo:

cdsvendedorescodven.asinteger := strtoint(edtCodVend.text);

Pra quando ele gravar precisar do codigo pra informar no banco, principalmente 
se for inteiro.

Espero que tenha te ajudado, caso precise de alguma coisa eh so mandar a duvida 
que se estiver no meu alcance te ajudarei.

Valeu

Leonardo Anselmo
Desenvolvedor Borland.




  ----- Original Message ----- 
  From: Carlos 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Sunday, April 08, 2007 1:10 PM
  Subject: [delphi-br] Dúvisa - Campo AutoInc no Firebird 1.5 & DBExpress


  Boas,
  preciso de um auxílio de vcs.
  Sou novato em programação, e onde trabalho usamos ADO, mas como a MS
  irá descontinuar o ADO (permanecendo apenas com ADO.NET) estou por
  conta própria, treinando em DBExpress. O q acontece; em minha casa
  tenho D7 e Firebird 1.5, e tenho um DB com 19 tables, e comecei a
  parte de programação para um cadastro de usuários do sistema, usando
  uma das tabelas que possui um campo Auto Incremento, mas quando dou o
  post o DB chora informando que tenho que atribuir um valor ao campo
  auto incremento (isso não é certo, afinal, ele é um auto incremento),
  então usando da POG(Programação Orientada a Gambiarra), no NewRecords
  digito o código "cdsUsuarioID_USUARIO.Value := cdsUsuario.RecordCount
  + 1" então o DB aceita numa boa (mas isto não é correto). Alguém pode
  me dar uma luz sobre o que está ocorrendo?
  Agradeço antecipadamente a todos.
  Fraterno abraço.



   

  __________ Informação do NOD32 IMON 2164 (20070402) __________

  Esta mensagem foi verificada pelo NOD32 sistema antivírus
  http://www.eset.com.br


[As partes desta mensagem que não continham texto foram removidas]

Responder a