GARANTIR DESCONTO

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


Douglasaltonia

Douglasaltonia

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...


Responder

Gostei + 0

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

Aceitar