Fórum Código seqüencial em Interbase/Rede via Delphi/SQL.doc #276712
11/04/2005
0
Fiquei alguns dias estudando este assunto e depois de bater muito a cabeça consegui o código abaixo gostaria, primeiro de dividir com os amigos do fórum, depois que os moderadores ou participantes dessem uma olhada e identificassem possíveis erros.
Espero ter ajudado a comunidade ClubeDelphi já que a mesma sempre me é muito útil.
Desculpe de violei alguma REGRA DE CONDUTA.
//no click do botão <<SALVAR>>
//não uso DBEdit uso Edit.
var
codigo : Integer;
begin
codigo := 0;
//se foi teclado o botão <<NOVO>>
//a variável “tiposalva” = 1
If tiposalva = 1 then
begin
With Dm1.TbControle do
begin
Transaction := Dm1.IBDatabase1.InternalTransaction;
Close;
SelectSQL.Clear;
SelectSQL.Add(´UPDATE CONTROLE SET CODCLI = CODCLI + 1´);
ExecSQL;
try
Dm1.IBDatabase1.InternalTransaction.Commit;
except
ShowMessage(´Ocorreu um erro ao gerar um novo código´);
Dm1.IBDatabase1.InternalTransaction.Rollback;
end;
Close;
SelectSQL.Clear;
SelectSQL.Add(´SELECT CODCONT, CODCLI FROM CONTROLE´);
Open;
codigo := Fieldbyname(´CODCLI´).AsInteger + 1;
Close;
end;
With Dm1.TbCliente do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´INSERT INTO CLIENTE´);
SelectSQL.Add(´(CODCLI, NOMECLI)´);
SelectSQL.Add(´ VALUES ´);
SelectSQL.Add(´(:ACODCLI, :ANOMECLI)´);
If not Dm1.IBDatabase1.InternalTransaction.InTransaction then
Dm1.IBDatabase1.InternalTransaction.StartTransaction;
Dm1.TbCliente.Prepare;
ParamByName(´ACODCLI´).AsInteger := codigo;
ParamByName(´ANOMECLI´).AsString := Edit1.Text;
ExecSQL;
try
Dm1.IBDatabase1.InternalTransaction.Commit;
ShowMessage(´Cliente Incluido com sucesso!!!´);
except
ShowMessage(´Ocorreu um erro ao Inserir um novo Cliente´);
Dm1.IBDatabase1.InternalTransaction.Rollback;
end;
end;
end;
//se foi clicado no botão <<ALTERAR>>
//a variável “tiposalva” = 2
If tiposalva = 2 then
begin
With Dm1.TbCliente do
begin
Close;
SelectSQL.Clear;
SelectSQL.Text:= ´UPDATE CLIENTE SET CODCLI =:ACODCLI,´+
´NOMECLI=:ANOMECLI,´+
´WHERE CODCLI = ´´´ + tfXPEdit6.Text + ´´´´;
ParamByName(´ACODCLI´).AsString := tfXPEdit6.Text;
ParamByName(´ANOMECLI´).AsString := Edit1.Text;
ExecSQL;
ShowMessage(´Dados Alterados com sucesso!!!´);
Close;
end;
end;
BtNovo.SetFocus;
end;
Obrigado pela atenção.
Douglas-Altonia
Espero ter ajudado a comunidade ClubeDelphi já que a mesma sempre me é muito útil.
Desculpe de violei alguma REGRA DE CONDUTA.
//no click do botão <<SALVAR>>
//não uso DBEdit uso Edit.
var
codigo : Integer;
begin
codigo := 0;
//se foi teclado o botão <<NOVO>>
//a variável “tiposalva” = 1
If tiposalva = 1 then
begin
With Dm1.TbControle do
begin
Transaction := Dm1.IBDatabase1.InternalTransaction;
Close;
SelectSQL.Clear;
SelectSQL.Add(´UPDATE CONTROLE SET CODCLI = CODCLI + 1´);
ExecSQL;
try
Dm1.IBDatabase1.InternalTransaction.Commit;
except
ShowMessage(´Ocorreu um erro ao gerar um novo código´);
Dm1.IBDatabase1.InternalTransaction.Rollback;
end;
Close;
SelectSQL.Clear;
SelectSQL.Add(´SELECT CODCONT, CODCLI FROM CONTROLE´);
Open;
codigo := Fieldbyname(´CODCLI´).AsInteger + 1;
Close;
end;
With Dm1.TbCliente do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´INSERT INTO CLIENTE´);
SelectSQL.Add(´(CODCLI, NOMECLI)´);
SelectSQL.Add(´ VALUES ´);
SelectSQL.Add(´(:ACODCLI, :ANOMECLI)´);
If not Dm1.IBDatabase1.InternalTransaction.InTransaction then
Dm1.IBDatabase1.InternalTransaction.StartTransaction;
Dm1.TbCliente.Prepare;
ParamByName(´ACODCLI´).AsInteger := codigo;
ParamByName(´ANOMECLI´).AsString := Edit1.Text;
ExecSQL;
try
Dm1.IBDatabase1.InternalTransaction.Commit;
ShowMessage(´Cliente Incluido com sucesso!!!´);
except
ShowMessage(´Ocorreu um erro ao Inserir um novo Cliente´);
Dm1.IBDatabase1.InternalTransaction.Rollback;
end;
end;
end;
//se foi clicado no botão <<ALTERAR>>
//a variável “tiposalva” = 2
If tiposalva = 2 then
begin
With Dm1.TbCliente do
begin
Close;
SelectSQL.Clear;
SelectSQL.Text:= ´UPDATE CLIENTE SET CODCLI =:ACODCLI,´+
´NOMECLI=:ANOMECLI,´+
´WHERE CODCLI = ´´´ + tfXPEdit6.Text + ´´´´;
ParamByName(´ACODCLI´).AsString := tfXPEdit6.Text;
ParamByName(´ANOMECLI´).AsString := Edit1.Text;
ExecSQL;
ShowMessage(´Dados Alterados com sucesso!!!´);
Close;
end;
end;
BtNovo.SetFocus;
end;
Obrigado pela atenção.
Douglas-Altonia
Douglasaltonia
Curtir tópico
+ 0
Responder
Posts
11/04/2005
Levisants
Eu tenho um outra forma de fazer e funciona perfeitamente
Esse exemplo é usado como trigger
set term ^ ;
create trigger minha_trigger for minha_tabela
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (new.meu_campo is null) then new.meu_campo = gen_id( Meu_gerador, 1 );
END^
Dessa forma é gerado o um autoincremento na hora que é gravado o novo registro evitando fahas de calculos na hora de gravar.
Espero que aproveitem...
Esse exemplo é usado como trigger
set term ^ ;
create trigger minha_trigger for minha_tabela
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (new.meu_campo is null) then new.meu_campo = gen_id( Meu_gerador, 1 );
END^
Dessa forma é gerado o um autoincremento na hora que é gravado o novo registro evitando fahas de calculos na hora de gravar.
Espero que aproveitem...
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)