Fórum Erro ao Salvar dados no banco #419429
05/07/2012
0
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
Curtir tópico
+ 0Posts
05/07/2012
William
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.
Gostei + 0
05/07/2012
Vander Carlos
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...
Gostei + 0
16/07/2012
Alvaro Vieira
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;
Gostei + 0
16/07/2012
Vander Carlos
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
Gostei + 0
17/07/2012
Alvaro Vieira
Gostei + 0
17/07/2012
Vander Carlos
[]s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)