Fórum Generator naum funciona #392927
21/12/2010
0
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
Curtir tópico
+ 0Posts
21/12/2010
Junior Miranda
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
Gostei + 0
22/12/2010
Marcos Roberto
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.
Gostei + 0
22/12/2010
Junior Miranda
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
Gostei + 0
22/12/2010
Marcos Roberto
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
Gostei + 0
22/12/2010
Junior Miranda
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
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 !!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)