[firebase-br] Erro de Conversão -303?

Kleber Caneva kdcc em terra.com.br
Qui Fev 26 13:11:51 -03 2009


Por usar parametros não deveria ser necessário, mas tente passar os tipos 
string com QuotedStr().
Ex:  ParamByName('CLIENTE').AsString   := QuotedStr( txtNome.Caption; )

Eu pessoalemnte não gosto de usar componentes proprio para executar SP.
Eu uso uma Query com 'EXECUTE PROCEDURE  SP_NOME( :PARM1, :PARAM2, etc)'

Uma sugestão:
Ao invés de usar
         ParamByName('CLIENTE').Value    := null
use
         ParamByName('CLIENTE').Clear;
Fica mais legivel na minha opinão.

[]´s

Kléber Caneva


----- Original Message ----- 
From: <cazon em tecnolab.mus.br>
To: <lista em firebase.com.br>
Sent: Wednesday, February 25, 2009 9:12 PM
Subject: [firebase-br] Erro de Conversão -303?


Ola Pessoal td bem?
Sou novato em SP e encontrei uma dificuldade em um teste que estou fazendo.
{Firebird 2.1 + Delphi 2009}
Criei esta procedure para atualizar os dados de uma Ordem de Serviços:

SET TERM ^ ;
CREATE PROCEDURE SP_UPDATE_ORDEM (
    CODIGO Integer,
    RELACAO Integer,
    CLIENTE Varchar(60),
    EQUIPO Varchar(50),
    MARCA Varchar(30),
    MODELO Varchar(30))
as
Begin
   if (EXISTS(SELECT ORD_CODIGO from ORDEM where (ORD_codigo = :codigo)) )
then
update ORDEM
    set ORD_CODIGO      = :codigo,
        ORD_RELACAO     = :relacao,
        ORD_CLIENTE     = :cliente,
        ORD_EQUIPO      = :equipo,
        ORD_MARCA       = :marca,
        ORD_MODELO      = :modelo
 WHERE (ORD_CODIGO = :codigo);
end^
SET TERM ; ^
GRANT EXECUTE ON PROCEDURE SP_UPDATE_ORDEM TO  SYSDBA;


** Codigo no delphi:

begin
          with Dm.Sp_Update_Ordem do
            begin
              ParamByName('CODIGO').AsInteger         :=
StrToInt(edtCodigo.Text);
              ParamByName('RELACAO').AsInteger        :=
StrToInt(edtCliente.Text);
              if (txtNome.Caption = '') then
              ParamByName('CLIENTE').Value            := null
              else
              ParamByName('CLIENTE').AsString         := txtNome.Caption;
              if (edtEquipo.Text = '' )then
              ParamByName('EQUIPO').Value             := null
              else
              ParamByName('EQUIPO').AsString          := edtEquipo.Text;
              if (edtMarca.Text = '' )then
              ParamByName('MARCA').Value              := null
              else
              ParamByName('MARCA').AsString           := edtMarca.Text;
              if (edtModelo.Text = '' )then
              ParamByName('MODELO').Value             := null
              else
              ParamByName('MODELO').AsString          := edtModelo.Text;
              ExecProc;
              Dm.Transaction.Commit;
 end;
end;

** quando executo recebo este erro:

First chance exception at $7C812AEB. Exception class EIBInterBaseError
with message 'Dynamic SQL Error
SQL error code = -303
conversion error from string "NOME DO CLIENTE"'. Process Tecsystem.exe (404)

Alguem ja passou por algo semelhante que possa me dar uma ajuda?

Obrigado.
Mario Cezar


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa

E-mail verificado pelo Terra Anti-Spam.
Para classificar esta mensagem como spam ou não spam, visite
http://mail.terra.com.br/cgi-bin/reportspam.cgi?+_d=SCY0NDU0NzM0I3Blcm0hdGVycmEmMSwxMjM1NjA3NzQ1LjgwNDQ3OS41MDAyLmNhYnJldG9uLnRlcnJhLmNvbSw1ODEz
Verifique periodicamente a pasta Spam para garantir que apenas mensagens
indesejadas sejam classificadas como Spam.






Mais detalhes sobre a lista de discussão lista