Como usar Generator-Firebird no Delphi
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?
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***
Curtidas 0
Respostas
Joel Rodrigues
03/05/2013
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.
GOSTEI 0
Frederico Brigatte***
03/05/2013
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
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
GOSTEI 0
Frederico Brigatte***
03/05/2013
É isso que tem que fazer?
GOSTEI 0
Marcos Morais
03/05/2013
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;
nota: (SEQ_USUARIOS_ID,1) é o nome do gerador.
sdsAutoInc.Active := False;
sdsAutoInc.Active := True;
ClientDataSetMATRICULA.AsInteger := dsAutoIncGEN_ID.AsInteger;
GOSTEI 0
Frederico Brigatte***
03/05/2013
GOSTEI 0
Frederico Brigatte***
03/05/2013
Consegui, amém, rs. Só uma dúvida. Pra cada tabela que tenha campo auto-incremento tem que fazer isso?
GOSTEI 0
Marcos Morais
03/05/2013
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.
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.
GOSTEI 0
Frederico Brigatte***
03/05/2013
Então posso usar o mesmo que criei anteriormente? No caso o sql_Codigo
Fiz assim:
Fiz assim:
procedure TDM.cds_FuncionariosNewRecord(DataSet: TDataSet);
begin
With sql_Codigo do
begin
Close;
Open;
cds_FuncionariosMATRICULA.AsInteger:=sql_CodigoNOVOID.AsInteger;
end;
end;
GOSTEI 0
Marcos Morais
03/05/2013
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...
GOSTEI 0
Frederico Brigatte***
03/05/2013
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.
https://www.devmedia.com.br/forum/consulta-usando-sqldataset-datasetprovider-clientdataset-e-datasource/441842
Empaquei nisso agora.
GOSTEI 0
Marcos Morais
03/05/2013
De nada, Sempre que precisar...Aqui estamos, Ja Respondi seu novo tópico.
GOSTEI 0
Frederico Brigatte***
03/05/2013
Tem msn?
GOSTEI 0
Marcos Morais
03/05/2013
tenho msn, ai vai jhonpinto13@hotmail.com
GOSTEI 0
Frederico Brigatte***
03/05/2013
Entra, tem como?
GOSTEI 0