Fórum Generator naum funciona #392927

21/12/2010

0

Pessoal

Estou com um problema que não consigo resolver, tenho 2 forms um de Grupo de produto e o outro de
Cadastro de Usuario. Criei a tabela Grupo com  generator conforme abaixo, tudo esta ok e func 100%,
sem erros.
Mas o Cadastro de usuario não incrementa o valor da PK, o atributo ID fica nullo, segue as duas tabelas criadas
no IBEXPERt com a unica diferença: a Tabela de Grupo foi criada atraves de um programa conversor IBPump e a
tabela Usuario foi criada Manualmente.

Pergunta:
Porque o atributo chave da tabela USUARIO não está sendo incrementado, ou seja esta nulla???

Já estou cansado de testar, peço ajuda !!!!

vlw.

* uso (dataSource,ClientDataSet,SqlQuery,DataSetProvider) Delphi7/Firebird

 
*****************//////TABELA GRUPO
________________________________________________________

CREATE GENERATOR "GEN_TBGRUPO_CONTROLE";

CREATE TABLE TBGRUPO (
    CONTROLE  INTEGER,
    DESGRUPO  VARCHAR(30)
);
_______________________________________________________
*****//Trigger
CREATE OR ALTER trigger trig_tbgrupo_bi for tbgrupo
active before insert position 0
AS BEGIN
      IF(NEW."CONTROLE" IS NULL) THEN NEW."CONTROLE" = GEN_ID("GEN_TBGRUPO_CONTROLE",1);
    END
_______________________________________________________













****************//////   TABELA USUARIO

CREATE GENERATOR GEN_USUARIO_ID;

CREATE TABLE USUARIO (
    ID        INTEGER NOT NULL,
    STATUS    VARCHAR(1),
    MARCA     VARCHAR(1),
    DATA_INC  DATE,
    DATA_ALT  DATE,
    SENHA     CHAR(7),
    NOME      VARCHAR(30),
    FANTASIA  VARCHAR(15),
    DEPTO     VARCHAR(20),
    NIVEL     CHAR(1)
);
_______________________________________________________
*****//Trigger
CREATE OR ALTER trigger usuario_bi for usuario
active before insert position 0
AS
BEGIN
  IF (NEW."ID" IS NULL) THEN
    NEW."ID" = GEN_ID("GEN_USUARIO_ID",1);
END
_______________________________________________________
 
Marcos Roberto

Marcos Roberto

Responder

Posts

21/12/2010

Junior Miranda

Qual o erro que ocorre na hora de gravar o cadastro do usuário pela aplicação? Na tabela, não vi nada de anormal!
Se vc fizer um teste no próprio IBExpert, como abaixo, ele insere sem erro. Não é?

    INSERT INTO USUARIO (STATUS) VALUES ('A');
    COMMIT WORK;


[]'s
Responder

Gostei + 0

22/12/2010

Marcos Roberto

Junior

Na Aplicação quando clico no botaoGravar(ClientDataSet1.Post; ClientDataSet1.Refresh;)  dá a seguinte mensagem:  Field 'ID' must have a value.

No IBExpert fiz como vc mandou (Insert into usuario ....) e deu o seguinte erro:

Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK_USUARIO" on table "USUARIO".


Vou aguardar sua resposta.
vlw.


Responder

Gostei + 0

22/12/2010

Junior Miranda

Bom dia!

Abra o fields editor do clientdaset(Duplo clique). Selecione o field ID e no Object Inspector, altere as seguintes propriedades:

Att. Repita no TSqlQuery!

- ProviderFlags/pfInKey(Coloque como True);
- Required(Coloque como false).

No datasetprovider:

- UpdateMode = upWhereKeyOnly.


Outra coisa...  Você sabe qual é a diferença dos métodos POST e APPLYUPDATE para o clientdataset?

.Post => Memória Cache;
.ApplyUpdate(...) => Banco.

Ou seja...

      //- Seu objetivo é gravar as informações no Banco 
      //- Se não houver nenhum problemas...    
      if (ClientDataset1.ApplyUpdate(0) = 0) then
      begin
          //- Atualiza
          ClientDataset1.Refresh; 
          ...
      end;
     ...


[]'s
Responder

Gostei + 0

22/12/2010

Marcos Roberto

Junior

Fiz o que vc mandou e ainda exclui a tabela, trigger e gen e depois criei tudo de novo.

Agora a inserção pelo IBExpert está func OK. Mas na aplicação ainda da o erro : Field 'ID' must have a value.

Não sei mais o que fazer ???

vlw

Responder

Gostei + 0

22/12/2010

Junior Miranda

Junior

Fiz o que vc mandou e ainda exclui a tabela, trigger e gen e depois criei tudo de novo.

Agora a inserção pelo IBExpert está func OK. Mas na aplicação ainda da o erro : Field 'ID' must have a value.

Não sei mais o que fazer ???

vlw




Colocou a propriedade Required do campo ID como FALSE? Isto tanto no ClientDataset quando no SqlQuery?


[]'s
Responder

Gostei + 0

22/12/2010

Marcos Roberto


 Tinha feito e não tinha dado certo.

 Agora que voltei ao trabalho, reinicei a maquina e tudo deu certo. rsrsrrsrsrrsrsrsrs..

vlw junior

Feliz Natal e Ano Novo !!



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar