• 0
Sign in to follow this  
claudyo

Valor de precisao invalido

Question

Bom pessoal é o seguinte, to com um problema com inserçao de dados em uma tabela access uso um dataset uma query e um connection todos components ADO, um formulario com um campo opcional me retorna o erro 'valor de preciaso invalido' qd esse campo ta em branco, eu passava diretamente os campos e dava erro na instruçao insert into agora passo parametros e só muda o nome do erro.

Segue o codigo

procedure Tfrmcadastro.gravadados;
begin
   dm.qryClientes.sql.text:= 'Insert into WorldPizza (Nome, Endereco, bairro, tel, telopt)'+
  ' Values (:PNome, :PEndereco,:Pbairro, :PTel, :PTelopt)';
   dm.qryclientes.Parameters.parambyname('PNOme').Value:=edtNome.text;
   dm.qryclientes.Parameters.Parambyname('PEndereco').Value:=edtEnd.text;
   dm.qryclientes.Parameters.Parambyname('PBairro').Value:=edtBairro.text;
   dm.qryclientes.Parameters.Parambyname('PTel').Value:=edtTel.text;
   dm.qryclientes.Parameters.Parambyname('PTelopt').Value:=edtTelopt.text;
   dm.qryclientes.Prepared:= True;
   dm.qryclientes.ExecSQL();

end;
e no envento onclick o seguinte
procedure Tfrmcadastro.btnOkClick(Sender: TObject);
var i:integer;
begin
    for i:=0 to frmcadastro.ComponentCount -1 do
    begin
        if frmcadastro.components[i] is TEdit then
         begin
           if (Tedit(components[i]).tag = 1) and (TEdit(components[i]).text = '') then
            begin
             application.MessageBox('Todos os Campos Devem Ser Preenchidos','Aviso',mb_iconinformation+mb_okcancel);
             Tedit(components[i]).setfocus;
             exit;
             end;
         end;
    end;
     if length (trim(edttel.Text))<>8 then
     begin
      Application.MessageBox('Telefone Invalido','Aviso',mb_iconinformation+mb_okcancel);
              edttel.SetFocus;
              edttel.selectAll;
              exit;
     end;
    gravadados;
    self.Close;

end;

alguém poderia me ajudar

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
um formulario com um campo opcional me retorna o erro 'valor de preciaso invalido' qd esse campo ta em branco, eu passava diretamente os campos e dava erro na instruçao insert into agora passo parametros e só muda o nome do erro.
claudyo, seria mais conveniente que você postasse a mensagem original.

Haveria nesta tabela, algum campo numérico cujo valor devesse ser informado?

Por acaso, os numeros de telefones são campos numéricos?

Uma observação, no lugar de manipular a propriedade Prepared:

dm.qryclientes.Prepared:= True;

você deveria chamar o método Prepare:

dm.qryclientes.Prepare;

Share this post


Link to post
Share on other sites
  • 0
um formulario com um campo opcional me retorna o erro 'valor de preciaso invalido' qd esse campo ta em branco, eu passava diretamente os campos e dava erro na instruçao insert into agora passo parametros e só muda o nome do erro.
claudyo, seria mais conveniente que você postasse a mensagem original.

Haveria nesta tabela, algum campo numérico cujo valor devesse ser informado?

Por acaso, os numeros de telefones são campos numéricos?

Uma observação, no lugar de manipular a propriedade Prepared:

dm.qryclientes.Prepared:= True;

você deveria chamar o método Prepare:

dm.qryclientes.Prepare;

não entendi a q mens você se refere???A q o debugger retorna??? Qt aos campos tenho sim outro campo tel q é obrigatorio, mais qt aos campos obrigatorios não tenho problema já fiz uma funçao pra verifica-los, os dois campos tel são numericos sendo q só um é obrigatorio, todos os campos obrigatorios estao com tag 1 e o opcional tag 0.... Se puder me ajudar com isso

Vlw pela atençao

Edited by Micheus
Retirada tag QUOTE da resposta. Não a use do contrário parece que é a resposta de outro comentada. ;-)

Share this post


Link to post
Share on other sites
  • 0
Uma observação, no lugar de manipular a propriedade Prepared:

dm.qryclientes.Prepared:= True;

você deveria chamar o método Prepare:

dm.qryclientes.Prepare;

claudyo, primeiramente, ignore esta minha observação. Ela não cabe para os componentes ADO. :blush:

não entendi a q mens você se refere???
A esta: "me retorna o erro 'valor de preciaso invalido'".

Mas como uso o Access raramente, não me lembrei que há possibilidade de mensagens em português. :blush:

Bom, depois de duas "bolas fora", vamos ver se dou uma dentro. :D

os dois campos tel são numericos sendo q só um é obrigatorio,(...)
Revirei meus demos com Access e fazendo uns testes com o Access 2000 (que tenho disponível), testei três possibilidades em que pensei, mas em nenhuma delas a mensagem foi a mesma que a sua. Em todos os casos, eu pensei em três situações:

- o número digitado possuir formatação;

- o número digitado estourar a quantidade de dígitos para o tipo utilizado;

- a atribuição de '' para o campo numérico estar gerando este erro.

No caso das formatações, elas realmente não poderiam ser utilizadas na gravação, já que seu campo é numérico.

Quanto ao estouro do máximo de dígitos, considerando a gravação do código de área junto, seria necessário definir o tipo de

dados como sendo Simples ou Double.

Já quanto a última opção, neste seu caso (um campo não texto), experimente testar se o campo (Edit) não está vazio antes de atribuir ao parâmetro. Caso esteja, não atribua o valor de da propriedade Text que é '', mas sim NULL. Ou seja, se não há valor a atribuir, passe null na cláusula VALUES do seu INSERT. É o procedimento padrão para a instrução, quando você informa o nome do campo mas não informa um valor.

Seria assim:

if Trim(edtTel.text) = '' then
  dm.qryclientes.Parameters.Parambyname('PTel').Value:=Null
else
  dm.qryclientes.Parameters.Parambyname('PTel').Value:=edtTel.text;
o Null é declarado na unit Variants. Teste deste modo e caso resolva seu problema, eu sugiro que você crie uma procedure genérica para isto:
procedure InitParam(Param :TParameter; Value :Variant);
begin
  if Trim(Value) = '' then
    Param.Value := Null
  else
    Param.Value := Value;
end;
ela pode ser colocada em uma unit de utilidades para ser utilizada em outras telas que você precisar. No seu código, faria a alteração que segue e eu já vou utilizar o WITH ... DO para minimizar a escrita:
procedure Tfrmcadastro.gravadados;
begin
  with dm.qryClientes do
  begin
    sql.text:= 'Insert into WorldPizza (Nome, Endereco, bairro, tel, telopt)'+
                ' Values (:PNome, :PEndereco,:Pbairro, :PTel, :PTelopt)';
    InitParam(Parameters.parambyname('PNome'), edtNome.text);
    InitParam(Parameters.Parambyname('PEndereco'), edtEnd.text);
    InitParam(Parameters.Parambyname('PBairro'), edtBairro.text);
    InitParam(Parameters.Parambyname('PTel'), edtTel.text);
    InitParam(Parameters.Parambyname('PTelopt'), edtTelopt.text);
    Prepared:= True;
    ExecSQL;
  end;
end;

Abraços

Share this post


Link to post
Share on other sites
  • 0

procedure Tfrmcadastro.gravadados;
begin
  with dm.qryClientes do
  begin
    sql.text:= 'Insert into WorldPizza (Nome, Endereco, bairro, tel, telopt)'+
                ' Values (:PNome, :PEndereco,:Pbairro, :PTel, :PTelopt)';
    InitParam(Parameters.parambyname('PNome'), edtNome.text);
    InitParam(Parameters.Parambyname('PEndereco'), edtEnd.text);
    InitParam(Parameters.Parambyname('PBairro'), edtBairro.text);
    InitParam(Parameters.Parambyname('PTel'), edtTel.text);
    InitParam(Parameters.Parambyname('PTelopt'), edtTelopt.text);
    Prepared:= True;
    ExecSQL;
  end;
end;

uma pergunta se eu coloca dessa forma eu não teria problemas já q os outros campos são obrigatorios??? Tentei chamar essa funçao só pro campo opcional mais não deu certo tive problemas com essa expressao 'null'.

Mas meu maior problema agora é q me mudei e to sem net então ta dificil postar, qd eu liga minha net de novo volto a postar de maneira mais clara. Agradeço a atenaçao e continuo contando com sua ajuda

Abraços

Edited by Micheus
Retirada tag QUOTE da resposta. Não a use do contrário parece que é a resposta de outro comentada. ;-)

Share this post


Link to post
Share on other sites
  • 0
se eu coloca dessa forma eu não teria problemas já q os outros campos são obrigatorios???
Não deveria, já que sendo obrigatórios, eles teriam algum valor.

Tentei chamar essa funçao só pro campo opcional mais não deu certo tive problemas com essa expressao 'null'.
que tipo de problemas?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this