Generator com a perna quebrada, pode ?!
Preciso mostrar ao usuario o codigo q o cliente será cadastrado, por isso coloquei o seguinte codigo no botão inserir:
procedure TfrmCliente.btnIncluirClick(Sender: TObject);
begin
inherited;
With RadioGroup1 do
begin
If ItemIndex = 1 Then
begin
AtivaControles;
LimpaControles;
edtDtCadastro.Text:= FormatDateTime(´dd/mm/yyyy´, Now);
edtDtCadastro.Enabled:= False;
edtNome.SetFocus;
IncrCod:=0;
IBStoredProc1.ParamByName(´PAR_TIPO´).Value:=´I´;
With IBQuery1 do
begin
Close;
With SQL do
begin
Clear;
Add(´SELECT GEN_ID(GEN_CLIENTE,1) FROM CLIENTE´);
end;
IBQuery1.Open;
end;
if IBQuery1.Fields[0].AsInteger <= 0 then
IncrCod:=1
else
begin
IncrCod:= IBQuery1.Fields[0].AsInteger;
end;
edtCod.Text:= IntToStr(IncrCod);
IBStoredProc1.Prepare;
...
O problema é que quando eu dou o select na tabela clientes, o genetrator incrementa 1 no codigo e qdo eu vou salavar o registro ele salva com outro valor. Ex:
o edit mostra q o valor do codigo do cliente é 2, salvo e qdo vou olhar no bd, o cod. do cliente é outro valor.
Este problema ocorre com ou sem trigger.
Vejam o codigo da procedure:
===============================================CREATE PROCEDURE SPC_CLIENTE (
PAR_TIPO CHAR(1),
PAR_CODCLIENTE INTEGER,
PAR_CODBAIRRO INTEGER,
PAR_CODCONTATO INTEGER,
PAR_RZSOCIAL VARCHAR(100),
PAR_NMFANTASIA VARCHAR(100),
PAR_IE VARCHAR(20),
PAR_CNPJ VARCHAR(20),
PAR_NOME VARCHAR(70),
PAR_CPF VARCHAR(20),
PAR_RG VARCHAR(20),
PAR_ENDERECO VARCHAR(100),
PAR_NUMERO VARCHAR(10),
PAR_CEP VARCHAR(15),
PAR_EMAIL VARCHAR(10),
PAR_TEL1 VARCHAR(15),
PAR_TEL2 VARCHAR(15),
PAR_DATACADASTRO VARCHAR(11),
PAR_SEXO VARCHAR(11),
PAR_ESTCIVIL VARCHAR(11),
PAR_DATANASCIMENTO VARCHAR(11),
PAR_NUMFILHOS VARCHAR(4))
RETURNS (
OUT_ERRO INTEGER)
AS
DECLARE VARIABLE CODX INTEGER;
BEGIN
/* SETA VARIÁVEL DE RETORNO DE ERRO */
OUT_ERRO = 1;
/* VERIFICA O TIPO DE AÇÃO DA OPERAÇÃO */
IF (:PAR_TIPO <> ´I´ AND :PAR_TIPO <> ´A´ AND :PAR_TIPO <> ´E´) THEN
BEGIN
EXCEPTION ERR_TIPO;
END
/*********************************
* ROTINA DE INCLUSÃO DE REGISTRO
**********************************/
IF (:PAR_TIPO = ´I´) THEN
BEGIN
CODX = GEN_ID(GEN_CLIENTE,1);
INSERT INTO CLIENTE (
CODCLIENTE,
CODBAIRRO,
CODCONTATO,
RZSOCIAL,
NMFANTASIA,
IE,
CNPJ,
NOME,
CPF,
RG,
ENDERECO,
NUMERO,
CEP,
EMAIL,
TEL1,
TEL2,
DATACADASTRO,
SEXO,
ESTCIVIL,
DATANASCIMENTO,
NUMFILHOS)
VALUES (
:CODX,
:PAR_CODBAIRRO,
:PAR_CODCONTATO,
:PAR_RZSOCIAL,
:PAR_NMFANTASIA,
:PAR_IE,
:PAR_CNPJ,
:PAR_NOME,
:PAR_CPF,
:PAR_RG,
:PAR_ENDERECO,
:PAR_NUMERO,
:PAR_CEP,
:PAR_EMAIL,
:PAR_TEL1,
:PAR_TEL2,
:PAR_DATACADASTRO,
:PAR_SEXO,
:PAR_ESTCIVIL,
:PAR_DATANASCIMENTO,
:PAR_NUMFILHOS);
OUT_ERRO = 0;
SUSPEND;
END
/*********************************
* ROTINA DE ALTERAÇÃO DE REGISTRO
**********************************/
IF (:PAR_TIPO = ´A´) THEN
BEGIN
UPDATE CLIENTE SET
CODBAIRRO = :PAR_CODBAIRRO,
CODCONTATO = :PAR_CODCONTATO,
RZSOCIAL = :PAR_RZSOCIAL,
NMFANTASIA = :PAR_NMFANTASIA,
IE = :PAR_IE,
CNPJ = :PAR_CNPJ,
NOME = :PAR_NOME,
CPF = :PAR_CPF,
RG = :PAR_RG,
ENDERECO = :PAR_ENDERECO,
NUMERO = :PAR_NUMERO,
CEP = :PAR_CEP,
EMAIL = :PAR_EMAIL,
TEL1 = :PAR_TEL1,
TEL2 = :PAR_TEL2,
DATACADASTRO = :PAR_DATACADASTRO,
SEXO = :PAR_SEXO,
ESTCIVIL = :PAR_ESTCIVIL,
DATANASCIMENTO = :PAR_DATANASCIMENTO,
NUMFILHOS = :PAR_NUMFILHOS
WHERE CODCLIENTE = :PAR_CODCLIENTE;
OUT_ERRO = 0;
SUSPEND;
END
/*********************************
* ROTINA DE EXCLUSÃO DE REGISTRO
**********************************/
IF (:PAR_TIPO = ´E´) THEN
BEGIN
DELETE FROM CLIENTE WHERE CODCLIENTE = :PAR_CODCLIENTE;
OUT_ERRO = 0;
SUSPEND;
END
END
Por favor, se alguem souber onde está o meu erro me ajude.
PS.: Perna Quebrada = Problema;
procedure TfrmCliente.btnIncluirClick(Sender: TObject);
begin
inherited;
With RadioGroup1 do
begin
If ItemIndex = 1 Then
begin
AtivaControles;
LimpaControles;
edtDtCadastro.Text:= FormatDateTime(´dd/mm/yyyy´, Now);
edtDtCadastro.Enabled:= False;
edtNome.SetFocus;
IncrCod:=0;
IBStoredProc1.ParamByName(´PAR_TIPO´).Value:=´I´;
With IBQuery1 do
begin
Close;
With SQL do
begin
Clear;
Add(´SELECT GEN_ID(GEN_CLIENTE,1) FROM CLIENTE´);
end;
IBQuery1.Open;
end;
if IBQuery1.Fields[0].AsInteger <= 0 then
IncrCod:=1
else
begin
IncrCod:= IBQuery1.Fields[0].AsInteger;
end;
edtCod.Text:= IntToStr(IncrCod);
IBStoredProc1.Prepare;
...
O problema é que quando eu dou o select na tabela clientes, o genetrator incrementa 1 no codigo e qdo eu vou salavar o registro ele salva com outro valor. Ex:
o edit mostra q o valor do codigo do cliente é 2, salvo e qdo vou olhar no bd, o cod. do cliente é outro valor.
Este problema ocorre com ou sem trigger.
Vejam o codigo da procedure:
===============================================CREATE PROCEDURE SPC_CLIENTE (
PAR_TIPO CHAR(1),
PAR_CODCLIENTE INTEGER,
PAR_CODBAIRRO INTEGER,
PAR_CODCONTATO INTEGER,
PAR_RZSOCIAL VARCHAR(100),
PAR_NMFANTASIA VARCHAR(100),
PAR_IE VARCHAR(20),
PAR_CNPJ VARCHAR(20),
PAR_NOME VARCHAR(70),
PAR_CPF VARCHAR(20),
PAR_RG VARCHAR(20),
PAR_ENDERECO VARCHAR(100),
PAR_NUMERO VARCHAR(10),
PAR_CEP VARCHAR(15),
PAR_EMAIL VARCHAR(10),
PAR_TEL1 VARCHAR(15),
PAR_TEL2 VARCHAR(15),
PAR_DATACADASTRO VARCHAR(11),
PAR_SEXO VARCHAR(11),
PAR_ESTCIVIL VARCHAR(11),
PAR_DATANASCIMENTO VARCHAR(11),
PAR_NUMFILHOS VARCHAR(4))
RETURNS (
OUT_ERRO INTEGER)
AS
DECLARE VARIABLE CODX INTEGER;
BEGIN
/* SETA VARIÁVEL DE RETORNO DE ERRO */
OUT_ERRO = 1;
/* VERIFICA O TIPO DE AÇÃO DA OPERAÇÃO */
IF (:PAR_TIPO <> ´I´ AND :PAR_TIPO <> ´A´ AND :PAR_TIPO <> ´E´) THEN
BEGIN
EXCEPTION ERR_TIPO;
END
/*********************************
* ROTINA DE INCLUSÃO DE REGISTRO
**********************************/
IF (:PAR_TIPO = ´I´) THEN
BEGIN
CODX = GEN_ID(GEN_CLIENTE,1);
INSERT INTO CLIENTE (
CODCLIENTE,
CODBAIRRO,
CODCONTATO,
RZSOCIAL,
NMFANTASIA,
IE,
CNPJ,
NOME,
CPF,
RG,
ENDERECO,
NUMERO,
CEP,
EMAIL,
TEL1,
TEL2,
DATACADASTRO,
SEXO,
ESTCIVIL,
DATANASCIMENTO,
NUMFILHOS)
VALUES (
:CODX,
:PAR_CODBAIRRO,
:PAR_CODCONTATO,
:PAR_RZSOCIAL,
:PAR_NMFANTASIA,
:PAR_IE,
:PAR_CNPJ,
:PAR_NOME,
:PAR_CPF,
:PAR_RG,
:PAR_ENDERECO,
:PAR_NUMERO,
:PAR_CEP,
:PAR_EMAIL,
:PAR_TEL1,
:PAR_TEL2,
:PAR_DATACADASTRO,
:PAR_SEXO,
:PAR_ESTCIVIL,
:PAR_DATANASCIMENTO,
:PAR_NUMFILHOS);
OUT_ERRO = 0;
SUSPEND;
END
/*********************************
* ROTINA DE ALTERAÇÃO DE REGISTRO
**********************************/
IF (:PAR_TIPO = ´A´) THEN
BEGIN
UPDATE CLIENTE SET
CODBAIRRO = :PAR_CODBAIRRO,
CODCONTATO = :PAR_CODCONTATO,
RZSOCIAL = :PAR_RZSOCIAL,
NMFANTASIA = :PAR_NMFANTASIA,
IE = :PAR_IE,
CNPJ = :PAR_CNPJ,
NOME = :PAR_NOME,
CPF = :PAR_CPF,
RG = :PAR_RG,
ENDERECO = :PAR_ENDERECO,
NUMERO = :PAR_NUMERO,
CEP = :PAR_CEP,
EMAIL = :PAR_EMAIL,
TEL1 = :PAR_TEL1,
TEL2 = :PAR_TEL2,
DATACADASTRO = :PAR_DATACADASTRO,
SEXO = :PAR_SEXO,
ESTCIVIL = :PAR_ESTCIVIL,
DATANASCIMENTO = :PAR_DATANASCIMENTO,
NUMFILHOS = :PAR_NUMFILHOS
WHERE CODCLIENTE = :PAR_CODCLIENTE;
OUT_ERRO = 0;
SUSPEND;
END
/*********************************
* ROTINA DE EXCLUSÃO DE REGISTRO
**********************************/
IF (:PAR_TIPO = ´E´) THEN
BEGIN
DELETE FROM CLIENTE WHERE CODCLIENTE = :PAR_CODCLIENTE;
OUT_ERRO = 0;
SUSPEND;
END
END
Por favor, se alguem souber onde está o meu erro me ajude.
PS.: Perna Quebrada = Problema;
Aluiziostf
Curtidas 0