Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido) erro ao tentar salvar cadastro
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Ronaldo Lanhellas
Bom , ao tentar salvar um cadastro aparece um erro dizendo que o chaveid (uma tabela do meu banco de dados firebird com PK) deve ter um valor, com se não estivesse gerando automaticamente seu ID, porém eu criei o GENERATOR e a TRIGGER dele normal. qual pode ser o problema então ?

fui até o banco de dados para testar se o generator ta funcionando, e ele gerou o ID do chaveid automaticamente ao criar um novo campo, creiu eu que o problema esteja no delphi, porém não tenho certeza, aguardo a ajuda de vocês;
Jhonas
Seria mais facil te dar uma resposta se voce colocasse o seu código

abraço
Ronaldo Lanhellas
aqui segue o código que é executado quando o usuário clica em salvar:

procedure TfrmModelo.ac_salvarExecute(Sender: TObject);
begin
TClientDataSet(Ds.DataSet).ApplyUpdates(0);
Pagecontrol1.ActivePage := tbConsulta;
end;
Jhonas
QUOTE
fui até o banco de dados para testar se o generator ta funcionando, e ele gerou o ID do chaveid automaticamente ao criar um novo campo, creio eu que o problema esteja no delphi, porém não tenho certeza, aguardo a ajuda de vocês;


CODE
procedure TfrmModelo.ac_salvarExecute(Sender: TObject);
begin
   TClientDataSet(Ds.DataSet).Post;
   TClientDataSet(Ds.DataSet).ApplyUpdates(-1);
   Pagecontrol1.ActivePage := tbConsulta;
end;


O problema não é quando voce salva, mas quando da o insert

abraço

Ronaldo Lanhellas
poderia porfavor me explciar a função do POST e do -1 no ApplyUpdates ?

gostaria de saber o porque do problema esta no insert
Jhonas
QUOTE
poderia porfavor me explicar a função do POST e do -1 no ApplyUpdates ?
CODE
TClientDataSet(Ds.DataSet).Post;


O comando Post é usado para escrever ( salvar ) um registro modificado no banco de dados.

CODE
TClientDataSet(Ds.DataSet).ApplyUpdates(-1);


Envia todos os updates ( registros ) atualizados, inseridos e deletados do dataset cliente para o provedor para atualizar ao banco de dados.

Porque o -1 ?

Veja a função:

CODE
function ApplyUpdates(MaxErrors: Integer); Integer; virtual;


o -1 é o numero colocado para o numero maximo de erros, é usado para ignorar os erros e continuar sem parar a execução do programa ... entretanto existem outros procedimentos para tratar esses erros.

QUOTE
gostaria de saber o porque do problema esta no insert


quando voce tem um campo autoincremento e dá o comando insert, automaticamente o campo usado como autoincremento recebe o proximo numero da lista, então neste caso não é necessario voce atribuir qualquer valor a ele .... se fizer isso ele não grava valor nenhum, o que é feito pelo post e o applyupdates.

abraço

Ronaldo Lanhellas
bom, coloquei o código que voce me informou no Salvar porém o erro continua, veja só o erro mais detalhadamente

http://uploaddeimagens.com.br/imagem/index..._delphi2010.png

obs: eu não estou usando o campo "chavesid" que tem autoincremento no preenchimento do meu form, isto é, ele deveria estar se autoincrementando sozinho.
Jhonas
O erro reporta que o campo Chavesid deve ter um valor, ou seja, o autoincremento não esta funcionando como deveria.

sugestão: delete o campo da tabela no banco de dados e refaça o procedimento para inclui-lo novamente, definindo o generator e a trigger novamente.

abraço
Ronaldo Lanhellas
é porque assim, eu fiz o teste inserindo dados direto no banco de dados e ele gerou normalmente o ID do campo chavesid, só não funciona se for no delphi !
Jhonas
Neste caso, pode ser erro de componente .... delete os componentes de acesso a tabela do seu form e coloque-os novamente

abraço
jaumDoDelphi
Oppa Ronaldo tb tive esse mesmo erro!
no meu caso o erro era no delphi com o CAMPO! ID

No component CLIENDDATASET
adicione todos os campos
depois va na propriedade "ProviderFlags" e desmarque pfInUpdate
e na propriedade "Required" deixe em false;

dai quando você for salvar seus dados o campo ID não sera mais obrigatorio!
Isso no meu caso que o problema foi no Delphi e não no BANCO

abraço!
Ronaldo Lanhellas
nada, agora da o erro dizendo field value requerid, não diz mais sobre o chaveid mais da erro.
Ronaldo Lanhellas
bom, resolvi meu problema. Usei a sua dica jaumdoDelphi, o que estava faltando era que tinha que por não só no ClientDataset mais também no SQL DataSet estas configurações, dessa eu não sbia ! xd
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.