Erro ao passar parametros para uma SP

Delphi

25/03/2011

Quando tento chamar uma SP no banco(Ela dá insert na tabela) me dá o seguinte erro: Erro ao tentar converter varchar em DateTime Mas eu sei de onde vem esse erro. Abaixo meus códigos. Stored Procedure CREATE PROCEDURE [dbo].[sp_INS_LOG_INDEX_JUS]( @TIPO_EDICAO VARCHAR(20), @NUM_EDICAO VARCHAR(10), @DATA_EDICAO DATETIME, @NUM_PAGINA VARCHAR(10), @JUSTIFICATIVA TEXT, @id bigint output ) as begin insert into INDEX_LOG_JUS(TIPO_EDICAO,NUM_EDICAO,DATA_EDICAO, NUM_PAGINA,JUSTIFICATIVA) values (@TIPO_EDICAO,@NUM_EDICAO,@DATA_EDICAO, @NUM_PAGINA,@JUSTIFICATIVA); select @id = @@identity end Minha Função para chamar a SP   function TGeneralFiles.InsereJus(Tipo_Edicao, Num_Edicao: String;Data: TDateTime; Num_Pagina, Justificativa: String;
   ObjConn: TAdoConnection;ObjSp: TADOStoredProc): int64;
begin
  with ObjSp, Parameters do
  begin
    ParamByName('@TIPO_EDICAO').Value := Tipo_Edicao;
    ParamByName('@NUM_EDICAO').Value := Num_Edicao;
    ParamByName('@DATA_EDICAO').Value := Data;
    ParamByName('@NUM_PAGINA').Value := Num_Pagina;
    ParamByName('@JUSTIFICATIVA').Value := Just;
    try
      ExecProc;
      Result := ParamByName('@id').Value;
      Commit(ObjConn);
    except
      Rollback(ObjConn);
      raise;
    end;
  end;
end;   e minha passagem de parâmetros para a função e chamada da SP   procedure TfrmMain.BitBtn1Click(Sender: TObject);
begin
  if PodeInserir then
    FGeneralFiles.InsereJus(edtTipoEdicao.Text,edtNumEdicao.Text,edtData.DateTime,edtNumPagina.Text,FGeneralFiles.Just,ADOConn,spJus)
  else
    ShowMessage('Alguns campos não foram preenchidos.'+#13+#10+'Favor corrigir o problema e tentar novamente');
end;  
Pjava

Pjava

Curtidas 0

Respostas

Nilton Souza

Nilton Souza

25/03/2011


Já experimentou isto: 
 ParamByName('@DATA_EDICAO').AsDateTime := Data; 

GOSTEI 0
Pjava

Pjava

25/03/2011

Em realidade o erro dá no campo NUM_EDICAO e não no campo Data. Estranho isso, pois eu passo uma String para ele e não um Data e ele é do tipo String e não date. Quando eu comento ele, me dá outro erro:   CONFLITO NO TIPO DE OPERANDO: TEXT É INCOMPATÍVEL COM BEGINT   Não sei o que pode ser isso. O retorno da SP é BEGINT e no Delphi eu coloco INT64 o result da funcão. Abaixo minha SP: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_INS_LOG_INDEX_JUS]( @TIPO_EDICAO VARCHAR(20), @NUM_EDICAO VARCHAR(10), @DATA_EDICAO DATETIME, @NUM_PAGINA VARCHAR(10), @JUSTIFICATIVA TEXT, @id bigint output ) as begin insert into INDEX_LOG_JUS(TIPO_EDICAO,NUM_EDICAO,DATA_EDICAO, NUM_PAGINA,JUSTIFICATIVA) values (@TIPO_EDICAO,@NUM_EDICAO,@DATA_EDICAO, @NUM_PAGINA,@JUSTIFICATIVA); select @id = @@identity end No delphi minha passagem de parametros   function TGeneralFiles.InsereJus(Tipo_Edicao, Num_Edicao: String;Data: TDateTime; Num_Pagina, Justificativa: String;
   ObjConn: TAdoConnection;ObjSp: TADOStoredProc): int64;
begin
  with ObjSp, Parameters do
  begin
    ParamByName('@TIPO_EDICAO').Value := Tipo_Edicao;
    //ParamByName('@NUM_EDICAO').Value := Num_Edicao;
    ParamByName('@DATA_EDICAO').Value := Data;
    ParamByName('@NUM_PAGINA').Value := Num_Pagina;
    ParamByName('@JUSTIFICATIVA').Value := Just;
    try
      ExecProc;
      Result := ParamByName('@id').Value;
      Commit(ObjConn);
    except
      Rollback(ObjConn);
      raise;
    end;
  end;
end;
GOSTEI 0
José

José

25/03/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR