Fórum Sequence #368867
06/03/2009
0
Bom dia, eu não estou conseguindo fazer minha aplicação gerar o sequence no banco de dados, fiz desta forma:
Olá eu criei uma procedure assim:
begin
if (exists(select id_bairro from tbbairro where (id_bairro = :id_bairro))) then
update tbbairro
set nome_bairro = :nome_bairro
where (id_bairro = :id_bairro);
else
insert into tbbairro (
id_bairro,
nome_bairro)
values (
NEXT VALUE FOR seq_bairro_id,
:nome_bairro);
end
e criei a tringger assm:
CREATE TRIGGER SEQ_BAIRRO_BI FOR TBBAIRRO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID_BAIRRO IS NULL) THEN
NEW.ID_BAIRRO = GEN_ID(SEQ_BAIRRO_ID,1);
END
^
Bom, fazendo o teste no banco de dados de inserção pelo ibexpert, funciona direitinho, o autoincremento gera os códigos corretamente, porém na aplicação delphi quando clico no botão novo e tento incluir, na primeira inclusão funciona, mas se tentar incluir um segundo registro dá o erro violação de chave, sendo que para o campo código no formulario coloquei um zero, para o campo não ficar em branco, pois ficando em branco quando vou gravar da a mensagem de erro ´Valor no campo
Requerido). Então o meu problema é o seguinte, como fazer para minha aplicação gravar corretamente usando o auto incremento pelo banco de dados. Estou usando os componentes: sqlconnection, sqldataset, clientdataset, datasetprovider e um sqlstoredprocedure.
Hospedei as fontes nesse link: http://www.easy-share.com/1903905569/Tecinfo.rar
Olá eu criei uma procedure assim:
begin
if (exists(select id_bairro from tbbairro where (id_bairro = :id_bairro))) then
update tbbairro
set nome_bairro = :nome_bairro
where (id_bairro = :id_bairro);
else
insert into tbbairro (
id_bairro,
nome_bairro)
values (
NEXT VALUE FOR seq_bairro_id,
:nome_bairro);
end
e criei a tringger assm:
CREATE TRIGGER SEQ_BAIRRO_BI FOR TBBAIRRO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID_BAIRRO IS NULL) THEN
NEW.ID_BAIRRO = GEN_ID(SEQ_BAIRRO_ID,1);
END
^
Bom, fazendo o teste no banco de dados de inserção pelo ibexpert, funciona direitinho, o autoincremento gera os códigos corretamente, porém na aplicação delphi quando clico no botão novo e tento incluir, na primeira inclusão funciona, mas se tentar incluir um segundo registro dá o erro violação de chave, sendo que para o campo código no formulario coloquei um zero, para o campo não ficar em branco, pois ficando em branco quando vou gravar da a mensagem de erro ´Valor no campo
Requerido). Então o meu problema é o seguinte, como fazer para minha aplicação gravar corretamente usando o auto incremento pelo banco de dados. Estou usando os componentes: sqlconnection, sqldataset, clientdataset, datasetprovider e um sqlstoredprocedure.
Hospedei as fontes nesse link: http://www.easy-share.com/1903905569/Tecinfo.rar
Vandeir
Curtir tópico
+ 0
Responder
Posts
06/03/2009
Vmlima
Caro colega...
tente isso
begin
if (exists(select id_bairro from tbbairro where (id_bairro = :id_bairro))) then
update tbbairro
set nome_bairro = :nome_bairro
where (id_bairro = :id_bairro);
else
insert into tbbairro ( nome_bairro)
values ( :nome_bairro);
end
é o seguinte, pode retirar o ID_Bairro, pois a trigger colocará o valor para vc...
Tente e me de retorno se funcionou
tente isso
begin
if (exists(select id_bairro from tbbairro where (id_bairro = :id_bairro))) then
update tbbairro
set nome_bairro = :nome_bairro
where (id_bairro = :id_bairro);
else
insert into tbbairro ( nome_bairro)
values ( :nome_bairro);
end
é o seguinte, pode retirar o ID_Bairro, pois a trigger colocará o valor para vc...
Tente e me de retorno se funcionou
Responder
Gostei + 0
06/03/2009
Vandeir
Amigo Vmlima, fiz a alteração, porém ainda não funcionou, quando incluo o primeiro registro dá certo, mas quando vou incluir o segundo da o erro ´Key violation´. Estou usando no evento OnNewRecord do ClientDataSet da tabela tbbairro o código: cdsBairroID_BAIRRO.AsInteger := 0;, Será que pode ser esse o erro?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)