Fórum firebird não gera codigo novo com trigger e generator #472420
08/03/2014
0
Eu estou aprendendo SQL no firebird, e tenho problemas com um trigger para autoincremente.
CREATE TABLE CLIENTES (
CODIGO INTEGER NOT NULL,
NOME CHAR(35) NOT NULL,
ENDERECO CHAR(40),
BAIRRO CHAR(35),
CIDADE CHAR(35),
ESTADO CHAR(20),
TELEFONE NUMERIC(16, 0) NOT NULL,
EMAIL CHAR(40),
SITE CHAR(50));
ALTER TABLE CLIENTES ADD PRIMARY KEY (CODIGO);
CREATE UNIQUE INDEX IND_ ON CLIENTES(CODIGO);
CREATE GENERATOR CLIENTES_CODIGO_GEN;
SET GENERATOR CLIENTES_CODIGO_GEN TO 1;
CREATE TRIGGER BI_CLIENTES_CODIGO_GEN FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.CODIGO = GEN_ID(CLIENTES_CODIGO_GEN,1);
END
-- Bom alem de não colocar um novo número de codigo no campo codigo
no ato de inserte ainda retorna uma mensagem "The inserte failed because a column defination includes validation constraints".
a propósito eu uso a interface SQK manager Lite for Interbase and Firebird(5.2.3.2). SE É QUE ISSO TEM ALGUMA IMPORTANCIA!
Tudo o que eu quero é poder fazer um autoimcremento no campo CODIGO que funcione.
Fabiano Pereira
Curtir tópico
+ 0Posts
11/03/2014
Fabiano Pereira
Eu até ia comprar uma conta paga deste site, mas pelo jeito não é o que eu esperava.
Ninguém responde o que eu preciso no forum.
Gostei + 0
13/03/2014
Fabiano Pereira
Queria que tivessem a hombridade de me responder. Pelo menos o moderador.
Gostei + 0
13/03/2014
Eduardo Silva.
não tem a obrigação de faze-lo. Reveja os seus conceitos.
De toda a forma dou aqui a minha contribuição a sua dúvida.
Segue o Script na sequencia correta:
CREATE GENERATOR CLIENTES_CODIGO_GEN;
SET GENERATOR CLIENTES_CODIGO_GEN TO 0;
CREATE TABLE CLIENTES (
CODIGO INTEGER NOT NULL,
NOME VARCHAR(30) NOT NULL,
ENDERECO VARCHAR(40),
BAIRRO VARCHAR(35),
CIDADE VARCHAR(35),
ESTADO VARCHAR(20),
TELEFONE VARCHAR(16),
EMAIL VARCHAR(40),
SITE VARCHAR(50)
);
ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODIGO);
SET TERM ^ ;
CREATE TRIGGER BI_CLIENTES_CODIGO_GEN FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.CODIGO IS NULL) THEN
NEW.CODIGO = GEN_ID(CLIENTES_CODIGO_GEN,1);
END
^
SET TERM ; ^
Uma dica:
Só utilize campo do tipo CHAR para campo com tamanho fixo como por exemplo sigla de estado, SP, RJ, etc
para tamanho variados utilize o VARCHAR.
Se você está aprendendo Firebird, visite o site www.firebase.com.br/fb/ onde tem bastante material sobre o assunto.
Eduardo Belo
Gostei + 0
13/03/2014
Deivison Melo
A sugestão do colaborador acima solucionaram os problemas mencionados?
Gostei + 0
13/03/2014
Fabiano Pereira
Revi meus conceitos e percebi que realmente estava errado.
Entretanto gostaria de explicar o que acontece com meu firebird.
usei o comando acima descrito e na verdade, não funciona.
Alias é bom dizer que eu uso a interface "SQL Conection Lite for Interbase and Firebird".
Cuja a qual, quando eu insiro um novo registro na aba "DATA" não apresenta um novo codigo.
Claro se eu colocar o Codigo e nome e os demais dados grava muito bem.
Insiro todos os registros que quero, mas na mão.
Como eu faço para quando o cliente acionar o incluir(insert) no DBgrid do delphi, já apareça o novo número do CODIGO , ali certinho ao lado do nome.
Vendo que na tabela do firebird esse número não foi gerado?
Gostei + 0
16/03/2014
Fabiano Pereira
"No Fields Editor do SQLDataset selecione o campo código do cliente e no object Inspector
altere a propriedade Required para False, repita a operação para o clientDataset. "
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)