Fórum Erro ao Salvar dados no banco #419429

05/07/2012

0

Comecei a pouco tempo a trabalhar com delphi e estou com um pouco de dificuldade a trabalhar com banco de dados.

O erro é esse:

Field ID_CLIENTE is required, but not supplied


Estou usando um ZConnection e uma ZTable, estou gravando os dados manualmente dessa forma:

try

DM.TB_Cliente.Open;
DM.TB_Cliente.Insert;

DM.TB_ClienteNOME.Value:= edt_nome.Text;
DM.TB_ClienteCPF.Value:= edt_CPF.Text;
DM.TB_ClienteRG.Value:= edt_RG.Text;

DM.TB_Cliente.Post;
DM.TB_Cliente.CommitUpdates;

ShowMessage(Salvo com Sucesso!);

DM.TB_Cliente.Close;
DM.TB_Cliente.Open;

except
On E: Exception do

Application.MessageBox(Erro ao Cadastrar Cliente,Atenção,mb_TaskModal + mb_IconWarning);

 end;
end;


Como corrigir esse erro?

[]s
Vander Carlos

Vander Carlos

Responder

Posts

05/07/2012

William

Colega o seu campo ID_CLIENTE está configurado no FieldsEditor como required=true, nesse caso vc tem q informar esse valor antes de gravar.

Caso esse campo seja auto-increment então mude a opção required=false, assim os registros poderam ser gravados sem o campo ID_CLIENTE estar preenchido.
Responder

Gostei + 0

05/07/2012

Vander Carlos

Mudei a opção required para false mas está aparecendo esse erro:

SQL Error: validation error for column ID_CLIENTE, value ***null***. Error code: -625. The insert failed because a column definition includes validation constraints. the sql: insert into Cliente...
Responder

Gostei + 0

16/07/2012

Alvaro Vieira

Boa tarde Vander.

O que pode estar acontecendo seja o seguinte:
O cds (ClientDataSet) ao ter sido populado, ou seja, quando você adicionou os campos ao objeto, ele procurou as validações de cada campo da sua tabela no banco de dados e provavelmente o campo ID_CLIENTE tenha sido configurado no seu banco de dados como not null, ou seja, não aceita nulo ao ser gravado.
Se tudo isso que presumo estiver correto, não adianta você alterar a propriedade do campo no cds para required=false, pois ao tentar gravar o registro o cds fará uma nova solicitação ao banco de dados gerando o erro; isso (required=false) só funcionaria se você alterasse a propriedade do campo do seu banco de dados (o que provavelmente você não fará, visto que esse campo parece ser de um ID).
Tente colocar a intrução abaixo no evento OnNewRecord do cds. A função GetTickCount (unit Windows) vai sugerir um valor inteiro e randômico, ou seja, um valor inteiro qualquer, apenas para satisfazer a necessidade do campo, mas o tratamento de um número sequencial deverá estar no seu banco no evento Before Insert (se for Firebird).
Volte a propriedade required=true, para ficar coerente com o banco e se não for isso, poste o que rolou. Abraço.

DM.TB_ClienteID_CLIENTE.AsInteger := GetTickCount;
Responder

Gostei + 0

16/07/2012

Vander Carlos

Boa noite alvaro.

Eu refiz algumas coisas nele e deu certo, acabei passando os valores assim:


DMConexao.QCliente.FieldByName(NOME).Value:= edt_nome.Text;

Valeu pela ajuda.

[]s
Responder

Gostei + 0

17/07/2012

Alvaro Vieira

Que bom que você resolveu o problema Vander, só não entendi uma coisa: o problema não era no campo ID_CLIENTE ?
Responder

Gostei + 0

17/07/2012

Vander Carlos

Sim, era isso também :)

[]s
Responder

Gostei + 0

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

Aceitar