Ir para conteúdo
Fórum Script Brasil
  • 0

Valor de precisao invalido


claudyo

Pergunta

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

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 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;

Link para o comentário
Compartilhar em outros 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

Editado por Micheus
Retirada tag QUOTE da resposta. Não a use do contrário parece que é a resposta de outro comentada. ;-)
Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Editado por Micheus
Retirada tag QUOTE da resposta. Não a use do contrário parece que é a resposta de outro comentada. ;-)
Link para o comentário
Compartilhar em outros 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?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...