Firebird
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
Curtidas 0
Respostas
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.
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
24/06/2010
Deu certo amigao?
GOSTEI 0
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
24/06/2010
Alexsander, explique uma coisa: você consegue gravar pelo IBExpert?
GOSTEI 0
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
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
);
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
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
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
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.
Ex:
???.ParamByName('ID').Value := 1;
...
...
???.post
claro, gravando por meio da função post de componentes do Delphi.
GOSTEI 0
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