Ajuda - Busca - Membros - Calendário
Versão Completa: Erro somente no desenvolvimento da aplicação
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
nsouza
Colegas,
o codigo abaixo apresenta o seguinte erro: " 'sqlExec: Parameter 'DATAFERIADO' not found'.
o problema é que na tabela existe este campo, quando eu a linha de comando SQL:
INSERT INTO FERIADOS (DATAFERIADO, DESCRICAO) VALUES (:DATAFERIADO,:DESCRICAO)
ni IBEXPERT funcionou, mas na aplicação retorna este erro.
alguém poderia de dar uma ajuda?
Obrigado!

CODE
function TfrmFeriadoEd.Incluir: Boolean;
begin
  try
      sqlExec.Close;
      sqlExec.SQLConnection := FoSQLConn;
      sqlExec.sql.clear;
      sqlExec.sql.add('INSERT INTO FERIADOS        ');
      sqlExec.sql.add(' ( DATAFERIADO, DESCRICAO)  ');
      sqlExec.sql.add(' VALUES                     ');
      sqlExec.sql.add(' (:DATAFERIADO, :DESCRICAO)');
      sqlExec.ParamByName('DATAFERIADO').AsDateTime := edtData.Date;
      sqlExec.ParamByName('DESCRICAO').AsString := edtDescricao.Text;
      //Se o registro for gravado a função retorna 1
      Result := sqlExec.ExecSQL() = 1;
  except
    on e: exception do
   begin
      result := false;
      showmessage(e.Message + ' na rotina Incluir')
   end;
  end;
  end;
flavioavilela
pode ser que a sintaxe esteja errada... você já verificou?
nsouza
Eu fiz o texte no ibexpert usando a sintaxe e funcionou! Senão daria erro la tb.
flavioavilela
você experimentou colocar nessa ordem:
CODE
sqlExec.SQLConnection := FoSQLConn;
sqlExec.Close;


e no fim colocar
CODE
sqlExec.Execsql;
nsouza
QUOTE(flavioavilela @ 27/01/2010 - 17:18) *
você experimentou colocar nessa ordem:
CODE
sqlExec.SQLConnection := FoSQLConn;
sqlExec.Close;


e no fim colocar
CODE
sqlExec.Execsql;


Não deu certo, não é isso.
A mensagem de erro agora é sql conection property requred for this operation
Jhonas
QUOTE
codigo abaixo apresenta o seguinte erro: " 'sqlExec: Parameter 'DATAFERIADO' not found'.
QUOTE
o problema é que na tabela existe este campo, quando eu a linha de comando SQL:
INSERT INTO FERIADOS (DATAFERIADO, DESCRICAO) VALUES (:DATAFERIADO,:DESCRICAO)



sqlExce: O Parametro DATAFERIADO não foi encontrado e não o campo da tabela chamado DATAFERIADO


sqlExec.ParamByName('DATAFERIADO').AsDate := edtData.Date;


experimente mudar o nome do parametro e veja se o erro permanece

abraço
nsouza
Jonas,
estou fazendo um teste e criei um stored procedure, veja:


CREATE PROCEDURE SP_INSERT (
pcodigo integer,
pdescricao varchar(50))
as
begin
insert into teste (codigo, descricao) values (:pcodigo, :pDescricao);
suspend;
end

// Do jeito que esta se eu executar pelo IBExpert funciona normalmente


Agora na aplicação fiz assim:

function TfromCadastro.incluir: Boolean;
var
loSp : TSQLStoredProc;
begin
try
try
loSp := TSQLStoredProc.Create(nil);
loSp.SQLConnection := Conn;
loSp.StoredProcName:= 'SP_INSERT';
loSp.ParamByName('PCODIGO' ).AsInteger := StrToInt(edtCodigo.Text);
loSp.ParamByName('PDESCRICAO' ).AsString := edtDescricao.Text;
loSp.ExecProc
except
on e: exception do
begin
result := false;
showmessage(e.Message + ' na rotina Incluir')
end;
end;
finally
FreeAndNil(loSp);
end;
end;

Nesta condição esta me retornando o mesmo erro:
Paramentro PCodigo não encontrado

Não entendi esse erro uma vez que o paramentro esta com o mesmo nome na stored procedure
Jhonas
exemplo da sintaxe

CODE
INSERT INTO CLIENTE(C1, C2, C3) VALUES ( :par0, :par1, :par2);"

    ParamByName('par0').AsInteger := 10;
    ParamByName('par1').AsString   := 'par1';
    ParamByName('par2').AsString   := 'par2';


ou seu código

CODE
insert into teste (codigo, descricao) values (:pcodigo, :pDescricao);

loSp.ParamByName('PCODIGO' ).AsInteger := StrToInt(edtCodigo.Text);
loSp.ParamByName('PDESCRICAO' ).AsString := edtDescricao.Text;


Nesta condição esta me retornando o mesmo erro:
Paramentro PCodigo não encontrado

procure ver se o motivo não é a colocação de caracteres maiusculos e minusculos .... não me recordo agora

abraço




nsouza
fiz a alteração, coloquei como minuscula as letras e deu o mesmo erro!
Jhonas
insert into teste (codigo, descricao) values (:pcodigo, :pDescricao);

loSp.ParamByName('PCODIGO' ).AsInteger := StrToInt(edtCodigo.Text);
loSp.ParamByName('PDESCRICAO' ).AsString := edtDescricao.Text;

me referi a isso .. do mesmo jeito que colocar na clausula insert colocar tambem no ParamByName

mas se ainda assim estiver dando erro, acompanhe a execução das linhas de comando com o debugger do delphi

abraço
nsouza
Foi isso que eu fiz, não não quer dar certo de forma alguma.

function TfromCadastro.incluir: Boolean;
var
loSp : TSQLStoredProc;
begin
try
try
loSp := TSQLStoredProc.Create(nil);
loSp.SQLConnection := Conn;
loSp.StoredProcName:= 'SP_INSERT';
loSp.ParamByName('pcodigo' ).AsInteger := StrToInt(edtCodigo.Text);
loSp.ParamByName('pdescricao' ).AsString := edtDescricao.Text;
loSp.ExecProc
except
on e: exception do
begin
result := false;
showmessage(e.Message + ' na rotina Incluir')
end;
end;
finally
FreeAndNil(loSp);
end;
end;
Jhonas
QUOTE
Foi isso que eu fiz, não não quer dar certo de forma alguma.


experimente trocar a function por procedure e veja o que acontece

abraço
nsouza
mudei para procedure e nada aconteceu, continuou com o mesmo erro!
Jhonas
QUOTE
mudei para procedure e nada aconteceu, continuou com o mesmo erro!


Fiz um teste simples aqui e funcionou ... sugiro a voce fazer o mesmo em uma outra aplicação para ver onde está errando

artigo sobre como usar uma stored procedure

http://www.oficinadanet.com.br/artigo/177/...ored_procedures

http://msdn.microsoft.com/en-us/library/ms189915.aspx

abraço
nsouza
Será que isso é um bug do meu delphi 2007? porque se você fez igual eu fiz e não deu pau, o erro não é de sintaxe concorda?
Jhonas
QUOTE
Será que isso é um bug do meu delphi 2007? porque se você fez igual eu fiz e não deu pau, o erro não é de sintaxe concorda?


pode ser, mas como eu disse, para tirar a dúvida faça uma outra aplicação somente para testar o comando sql

estou usando delphi 5 e delphi 7 com interbase e o stored procedure está funcionando nos dois.

abraço
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.