Problema com Campo Autoincremento

Firebird

20/07/2005

Pessoal, estou com dois problemas:

1- Numa tabela em que os campos são ID e NOME, em que ID é autoincremental, ao tentar inserir um registro na tabela da seguinte maneira, dá erro:
         with ADOQuery do
         begin
            Close;
            SQL.Clear;
            SQL.Text := ´Insert into TABELA (NOME) values (´´nome_teste´´)´;
            ExecSQL;
         end;

Para saber se o erro era realmente no campo autoincremental, acessei a tabela diretamente pelo IBExpert e tentei adicionar um registro, deixando o ID em branco (pois teoricamente é autoincremental). Quando fui salvar o registro, acusou erro no campo ID dizendo que o preenchimento é obrigatório.
[b:56bc7c8289]O que pode ser que está errado no campo autoincremento?[/b:56bc7c8289]

valeu
rtava


Rtava

Rtava

Curtidas 0

Respostas

Rtava

Rtava

20/07/2005

Bom... à princípio resolvi o problema usando o próprio ADOConnection para inserir o registro que preciso:

dm1.Cnt.Execute(´Insert into TABELA (NOME) values (´´nome_teste´´));

Não mudei absolutamente nada em nenhum outro lugar. Ou seja, no BD o campo autoincremental da tabela continua com o mesmo Generator e uma Trigger. No programa continuam os mesmos componentes também.

T+
rtava


GOSTEI 0
Kotho

Kotho

20/07/2005

Tem uma propriedade no fields editor chamada Required... quando o campo é not null no banco ele traz como true... mas pode ser mudada... mude para false que não irá dar mais o erro...


GOSTEI 0
Rtava

Rtava

20/07/2005

Uma coisa que percebi agora é que, se for utilizado um mesmo componente ADOQuery para acessar duas tabelas diferentes, no acesso ou inclusão de registros, na segunda tabela dá erro. Exemplo: Se eu executar um Select na tabela TAB1 e depois executar um INSERT na tabela TAB2 (usando o mesmo componente), dará erro no INSERT em TAB2, mesmo que eu tenha executado um SQL.Clear antes de adicionar a nova sentença SQL ao componente ADOQuery.

que zica....


GOSTEI 0
Rtava

Rtava

20/07/2005

apenas para ilustrar... o exemplo abaixo gera erro na segunda tentativa de INSERT (o SELECT que coloquei no meio do código é apenas para ilustrar que, quando uso o mesmo ADOQuery para acessar duas tabelas diferentes, dá erro). O primeiro INSERT funciona perfeitamente. O SELECT também funciona. Quando chega no segundo INSERT, dá problema.

   ADOQuery1.Close;
   ADOQuery1.SQL.Text := ´Insert into CONFIGURACOES (CAMPO1, ´ +
                         CAMPO2, CONFIGS) values (1, 2, :p1)´;
   ADOQuery1.Parameters.ParamByName(´P1´).Value := Txt;
   ADOQuery1.ExecSQL;

   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add(´Select * from logs where 0 = 1´);
   ADOQuery1.Open;

   ADOQuery1.Close;
   ADOQuery1.SQL.Text := ´Insert into CONFIGURACOES (CAMPO1, ´ +
                         CAMPO2, CONFIGS) values (1, 2, :p1)´;
   ADOQuery1.Parameters.ParamByName(´P1´).Value := Txt;
   ADOQuery1.ExecSQL; 


rtava


GOSTEI 0
Rtava

Rtava

20/07/2005

Resolvido mais esse problema também...
Com o perdão da expressão, mas era o FDP do MDAC que estava gerando esse problema. Atualizei há uns 6 meses, mas apareceu este problema agora. Agora atualizei novamente e tudo funcionou bem.

Bom, menos mal...

rtava


GOSTEI 0
POSTAR