Firebird

Firebird

24/06/2010

Olá , Pessoal     Estou com dificuldades em meu sistema, quando peço para gravar algo numa tabela ocorre o seguinte erro: Must have a value. O Id_ esta definido como Not Null e como chave Primaria. Li Alguns topicos sobre o assunto na net, mais ainda não consegui resolver o problema. Eu uso a ferramenta IBEXPERT para conectar ao banco de dados firebird versao 2.0, meu sistema esta sendo desenvolvido em delphi 7.  Por Favor preciso de ajuda.    Sempre usei estes 3 programas , e sempre deu certo. Nunca tive problema com este erro Must have a value, este problema apareceu de uma hora para outra, algguem sabe me dizer porque disto?  Grato.  Alexsander
Alexsander

Alexsander

Curtidas 0

Respostas

Maurício Zanatta

Maurício Zanatta

24/06/2010

Alexsander,

além da chave primária e da configuração de not null para o campo id, você precisa ter também um generator e uma trigger para gerar o o autoincremento se for um id do tipo código (neste artigo aqui explica isso: https://www.devmedia.com.br/articles/viewcomp.asp?comp=1070)

Se não for este o caso, essa mensagem ocorre quando se tem configurado na base de dados um campo not null, e não se está preenchendo o campo com algum valor.

E se você estiver usando os componentes DBExpress, verifique também a propriedade Required, que caso esteja True, também exigirá que o campo referido seja preenchido.

[]s.
GOSTEI 0
Carlos Mazzi

Carlos Mazzi

24/06/2010

Deu certo amigao?
GOSTEI 0
Alexsander

Alexsander

24/06/2010

Ola,      Carlos        Não deu certo , não. Criei um genereton no firebird, mais não deu certo. quando peço para gravr no delphi.
GOSTEI 0
Maurício Zanatta

Maurício Zanatta

24/06/2010

Alexsander, explique uma coisa: você consegue gravar pelo IBExpert?
GOSTEI 0
Alexsander

Alexsander

24/06/2010

Caro,     Carlos    Sim. Pelo IBExpert, consigo gravar, fazer consultas, e etc. So que eu tenho q digitar um codigo qualquer, no ibexpert para que ele possa gravar.
GOSTEI 0
Alexsander

Alexsander

24/06/2010

 Caro,  Mauricio.     O meu banco de dados estão com estes dados:     OBS: EStou usando o IBExpert para acessar o firebird       CREATE TABLE CONTATO (
    ID_CONTATO     INTEGER NOT NULL,
    CONTATO        VARCHAR(30) COLLATE WIN_PTBR,
    IDADE          CHAR(3),
    FOTO           BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    NASCIMENTO     VARCHAR(9),
    EMAIL          VARCHAR(20) COLLATE WIN_PTBR,
    SIGNO          VARCHAR(20) COLLATE WIN_PTBR,
    TIPOSANGUINIO  VARCHAR(5),
    TELEFONE       VARCHAR(14),
    CELULAR        VARCHAR(14),
    N              CHAR(7),
    CIDADE         VARCHAR(20) COLLATE WIN_PTBR,
    RUA            VARCHAR(20) COLLATE WIN_PTBR,
    CEP            VARCHAR(10),
    ESTADO         CHAR(2) COLLATE WIN_PTBR,
    BAIRRO         VARCHAR(30) COLLATE WIN_PTBR
);
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

24/06/2010

tire o NOT NULL do campo ID_CONTATO e crie um generator e uma trigger para ele. assim não será necessário preenche-lo ao criar um novo registro.

CREATE GENERATOR GEN_CONTATO_ID; -- cria o generator

CREATE TABLE CONTATO (
    ID_CONTATO     INTEGER, -- note que não tem mais o NOT NULL
    CONTATO        VARCHAR(30) COLLATE WIN_PTBR,
    IDADE          CHAR(3),
    FOTO           BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    NASCIMENTO     VARCHAR(9),
    EMAIL          VARCHAR(20) COLLATE WIN_PTBR,
    SIGNO          VARCHAR(20) COLLATE WIN_PTBR,
    TIPOSANGUINIO  VARCHAR(5),
    TELEFONE       VARCHAR(14),
    CELULAR        VARCHAR(14),
    N              CHAR(7),
    CIDADE         VARCHAR(20) COLLATE WIN_PTBR,
    RUA            VARCHAR(20) COLLATE WIN_PTBR,
    CEP            VARCHAR(10),
    ESTADO         CHAR(2) COLLATE WIN_PTBR,
    BAIRRO         VARCHAR(30) COLLATE WIN_PTBR
);

/* Trigger: CONTATO_BI */
CREATE TRIGGER CONTATO_BI FOR CONTATO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID_CONTATO IS NULL) THEN
    NEW.ID_CONTATO = GEN_ID(GEN_CONTATO_ID,1);
END


GOSTEI 0
Euclides Cunha

Euclides Cunha

24/06/2010

Alexsander , na rotina de gravação do Delphi, passe ao parametro ID antes gravar , o Valor "1";

Ex:

???.ParamByName('ID').Value := 1;

...
...

???.post


claro, gravando por meio da função post de componentes do Delphi.
GOSTEI 0
Alexsander

Alexsander

24/06/2010

 Valeu, Pessoal     Agradeço a todos que me ajudaram. Agora meu sistema esta gravndo sem problemas. Valeu Emerson.  sua ajuda foi fundamental.
GOSTEI 0
POSTAR