Fórum Como usar Generator-Firebird no Delphi #441819

03/05/2013

0

Boa noite, tenho o seguinte generator criado do Firebird:

CREATE SEQUENCE GEN_FUNCIONARIOS_ID;
ALTER SEQUENCE GEN_FUNCIONARIOS_ID RESTART WITH 0;

Como usar no delphi para incrementar no campo? Está dando erro ao salvar.

FIELD MATRICULA MUST HAVE A VALUE.

Matricula é integer e not null. Sei que precisa de valor, mas como utilizar a generator?
Frederico Brigatte***

Frederico Brigatte***

Responder

Posts

04/05/2013

Joel Rodrigues

Pesquise sobre como criar campos auto-incremento no Firebird, pois você vai precisar de um trigger na tabela. Depois que aprender como funciona no banco, verá que não é preciso chamar o generator no Delphi, apenas bastará inserir o registro e o campo em questão será automaticamente definido.
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Joel, essas duas linhas ja tenho no banco.

CREATE SEQUENCE GEN_FUNCIONARIOS_ID;
ALTER SEQUENCE GEN_FUNCIONARIOS_ID RESTART WITH 0;


Pesquisei, mas não estou entendendo. Cada site que vi diz uma coisa. Uns diz que tem que usar stored procedure, outro diz pra fazer isso:


Adicionar um componente SqldataSet e alterar sua propriedade name e na CommandText inserir:

Select gen_id(gen_idcliente,1) as novoid from codigo
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

É isso que tem que fazer?
Responder

Gostei + 0

04/05/2013

Marcos Morais

Vamos lá, Se você usar o dbExpress fica fácil, faz o seguinte, não é tão complicato crie uma tabela lá no seu banco de dados, com o nome AUTOINC, com apenas um campo, por exemplo CODIGO, coloque nela um registro, por exemplo 1, Lá no seu data module coloque um SqlDataSet com o nome sdsAutoInc devidamente configurado, e na propriedade CommandText o Seguinte, 'select GEN_ID(SEQ_USUARIOS_ID,1) from AUTOINC', feito isso vá no ClientDataSet o evento OnNewRecord e coloque o seguinte:

nota: (SEQ_USUARIOS_ID,1) é o nome do gerador.

sdsAutoInc.Active := False;
sdsAutoInc.Active := True;
ClientDataSetMATRICULA.AsInteger := dsAutoIncGEN_ID.AsInteger;
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Consegui, amém, rs. Só uma dúvida. Pra cada tabela que tenha campo auto-incremento tem que fazer isso?
Responder

Gostei + 0

04/05/2013

Marcos Morais

que bom que conseguiu, sim, tem que fazer isso para cada tabela, porem com um so SQLDataSet resolve, o que voce vai fazer é o seguinte, no OnCreate de cada formulario mude a prpriedade CammandText veja o meu exmeplo:

Socios>>>>>>>>>>>> sdsAutoInc.CommandText := 'select GEN_ID(SEQ_SOCIOS_ID,1) from AUTOINC';
Usuarios>>>>>>>>>> sdsAutoInc.CommandText := 'select GEN_ID(SEQ_USUARIOS_ID,1) from AUTOINC';

faço isso pra reaproveitar o SQLDataSet, mudando apenas o CommandText;

quanto ao banco de dados, é som uma tabela que precisa mesmo, ela é usada temporariamente pelos geradores, espero que voce consiga.

espero que voce consiga.
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Então posso usar o mesmo que criei anteriormente? No caso o sql_Codigo

Fiz assim:

procedure TDM.cds_FuncionariosNewRecord(DataSet: TDataSet);
begin
  With sql_Codigo do
  begin
    Close;
    Open;
    cds_FuncionariosMATRICULA.AsInteger:=sql_CodigoNOVOID.AsInteger;
  end;
end;
Responder

Gostei + 0

04/05/2013

Marcos Morais

Isso Mesmo, Qualquer dúvida, estamos aqui, So algums Lembretes, a tabela que voce criou la no banco de dados, ela nunca deve ser alterada, tenha em mente que o que voce vai mudar e a propriedade CommandText do SQLDataSet No OnCreate de cada formulário. Qualquer Dúvida estamos aqui...
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Ok, Marcos, muito obrigado. Abri esse tópico, pode me ajudar:

https://www.devmedia.com.br/forum/consulta-usando-sqldataset-datasetprovider-clientdataset-e-datasource/441842

Empaquei nisso agora.
Responder

Gostei + 0

04/05/2013

Marcos Morais

De nada, Sempre que precisar...Aqui estamos, Ja Respondi seu novo tópico.
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Tem msn?
Responder

Gostei + 0

04/05/2013

Marcos Morais

tenho msn, ai vai jhonpinto13@hotmail.com
Responder

Gostei + 0

04/05/2013

Frederico Brigatte***

Entra, tem como?
Responder

Gostei + 0

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

Aceitar