Помогите с хранимой процедурой
Господа прошу о помощи , решил сделать dll, т.е. привызове процедуры передаю ей параметры для записи в БД и получаю от нее код и описание ошибки, и использую TAdoStoredProc, хочу оговорить работаю с mssql 2000, при реализации этого в простом приложении все работает, если пытаюсь создать dll для выполнения этой же задачи, то вылетает ошибка EOleException 'Неправильно определен объект Parametr. Представлены несовместимые или неполные сведения'
делаю так
Var
i,ErrCode,MsgType:integer;
date,Msg:string;
time:Tdatetime;
begin
time:=strtodatetime(date);
adost:=TADOStoredProc.Create(nil);
adocon:=TADOConnection.Create(nil);
adocon.ConnectionString:='Provider=SQLOLEDB.1;Pass word=123456;User ID=sa;Initial Catalog=marketingogk6;Data Source=Sotnikovsa;Auto Translate=True;Workstation ID=SOTNIKOVSA;Use Encryption for Data=False';
adost.Connection:=adocon;
adost.ProcedureName:='ASKUEdata_ins';
with adost.Parameters.AddParameter do
begin
Name:= '@Return_value';
DataType:=ftInteger;
Direction:=pdReturnValue;
Attributes:=[paNullable];
Value:=(null);
end;
with adost.Parameters.AddParameter do
begin
Name:= '@period_end';
DataType:=ftDateTime;
Direction:=pdInput;
Attributes:=[paNullable];
Precision:=0;
Value:=time;
end;
with adost.Parameters.AddParameter do
begin
Name:= '@interval';
DataType:=ftInteger;
Direction:=pdInput;
Attributes:=[paNullable];
Precision:=10;
Value:=3;
end;
with adost.Parameters.AddParameter do
begin
Name:= '@code';
DataType:=ftInteger;
Direction:=pdInput;
Attributes:=[paNullable];
Precision:=10;
Value:=1;
end;
with adost.Parameters.AddParameter do
begin
Name:= '@value';
DataType:=ftfloat;
Direction:=pdInput;
Attributes:=[paNullable];
Precision:=10;
Value:=311111.01;
end;
with adost.Parameters.AddParameter do
begin
Name:= '@Capacity_exid';
DataType:=ftString;
Direction:=pdInput;
Attributes:=[paNullable];
Size:=255;
Value:='VM000000000001';
end;
with adost.Parameters.AddParameter do
begin
Name:= '@guid';
DataType:=ftString;
Direction:=pdInput;
Attributes:=[paNullable];
Value:='Gres24';
end;
with adost.Parameters.AddParameter do
begin
Name:= '@id';
DataType:=ftBCD;
Direction:=pdOutput;
Attributes:=[paNullable];
Value:=(null);
end;
with adost.Parameters.AddParameter do
begin
Name:= '@MsgType';
DataType:=ftInteger;
Direction:=pdOutput;
Attributes:=[paNullable];
Value:=(null);
end;
with adost.Parameters.AddParameter do
begin
Name:= '@Msg';
DataType:=ftString;
Direction:=pdOutput;
Attributes:=[paNullable];
Value:=(null);
end;
with adost.Parameters.AddParameter do
begin
Name:= '@ErrCode';
DataType:=ftInteger;
Direction:=pdOutput;
Attributes:=[paNullable];
Value:=(null);
end;
i:=adost.Parameters.Count;
adost.ExecProc;
ErrCode:=Adost.Parameters.ParamValues['@ErrCode'];
MsgType:= Adost.Parameters.ParamValues['@MsgType'];
msg:=Adost.Parameters.ParamValues['@msg'];
if ErrCode>0 then
Windows.MessageBox(hWnd, Pchar(Msg), 'Command Line', MB_OK);
т.е. вызываю процедуру которая выглядит так
create procedure ASKUEDATA_INS
@period_end T_datetime,
@interval T_int,
@code T_int,
@value T_float,
@capacity_exid T_sname,
@guid T_sname,
@id T_reference out,
@Msg T_infomsg out,
@MsgType T_int out,
@ErrCode T_int out
as
begin и т.д.
Если делать просто то все ок, но в dll ? когда прописываешь все вручную, то ничего не получается, помогите пожалуйста, очень нужна помощь!!!
Заранее благодарен!!!
|