firebird não gera codigo novo com trigger e generator

Firebird

08/03/2014

olá

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

Fabiano Pereira

Curtidas 0

Respostas

Fabiano Pereira

Fabiano Pereira

08/03/2014

Bom

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
Fabiano Pereira

Fabiano Pereira

08/03/2014

Ainda sem resposta?

Queria que tivessem a hombridade de me responder. Pelo menos o moderador.
GOSTEI 0
Eduardo Silva.

Eduardo Silva.

08/03/2014

Meu caro, aqui é um fórum de discussão livre, onde contamos com a AJUDA daqueles que se dispõem a AJUDAR. Nenhum usuário, isso inclui você ou até mesmo o Moderador
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
Deivison Melo

Deivison Melo

08/03/2014

Bom dia!

A sugestão do colaborador acima solucionaram os problemas mencionados?
GOSTEI 0
Fabiano Pereira

Fabiano Pereira

08/03/2014

Bom desde de já peço desculpas pelas minhas atitudes.

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
Fabiano Pereira

Fabiano Pereira

08/03/2014

bOM ACHEI A SOLUÇÃO EM OUTRO FORUM :

"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
POSTAR