Erro ao passar parametros para uma SP
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;
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
Curtidas 0
Respostas
Nilton Souza
25/03/2011
Já experimentou isto:
ParamByName('@DATA_EDICAO').AsDateTime := Data;
GOSTEI 0
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;
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é
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