Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить параметры возвращаемые хранимой процедурой???

18K
08 октября 2006 года
Sotnikovsa
5 / / 22.09.2006
Люди помогите с одним вопросом,
Необходимо сделать dll в delphi , которая с помощью хранимой процедуры должна записать передаваемые ей данные в БД и при этом вернуть параметры выполнения операции, у меня в базу все записывается, но как получить эти возвращаемые параметры понять не могу.
Делаю так

[COLOR="MediumTurquoise"]adoogk:=TADOQuery.Create(nil);
adoogk.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Password=123456;Data Source=marketingogk6;Initial Catalog=marketingogk6';

adoogk.SQL.Add('declare @msg T_infomsg, @msgType T_int, @errCode T_int, @id T_reference exec ASKUEDATA_INS '+''''+'06.08.2006'+''''+',30,1,50123,VM000000000001,GRES24, @id out,@msgType out, @msg out, @ErrCode out');

adoogk.ExecSql; [/COLOR]
Если кто знает, то помогите!!!
За ранее благодарен.
18K
08 октября 2006 года
Sotnikovsa
5 / / 22.09.2006
Господа прошу о помощи еще раз, решил переделать dll и использовать в ней TAdoStoredProc, хочу оговорить работаю с mssql 2000, при реализации этого в простом приложении все работает, если пытаюсь создать dll для выполнения этой же задачи, то вылетает ошибка EOleException 'Неправильно определен объект Parametr. Представлены несовместимые или неполные сведения'

делаю так

[color=green]
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;Password=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);[/color]

т.е. вызываю процедуру которая выглядит так

[color=green]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 и т.д.[/color]

Если делать просто то все ок, но в dll ? когда прописываешь все вручную, то ничего не получается, помогите пожалуйста, очень нужна помощь!!!

Заранее благодарен!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог