Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.01.2011, 20:49
com+ com+ вне форума
Прохожий
 
Регистрация: 26.11.2010
Сообщения: 7
Репутация: 10
Печаль Работа с _Recordset (COM+)

Доброго времени суток!
Помогите разобраться с такой проблемой.
Есть COM сервер,
Код:
IMyServer = interface(IAppServer)
    ['{1B3F3AA3-1DCE-40B1-BA13-9A95EEA439AB}']
    function  GetBlock(ATypeStort: Smallint): OleVariant; stdcall;
  end;
Реализация функции
Код:
  TMyServer = class(TMtsDataModule, IMyServers)
    ...
    function GetBlock(ATypeStort: Smallint): OleVariant;
  End;

uses ADOInt;
  ...

function TMyServer.GetBlock(ATypeStort: Smallint): OleVariant;
begin
  ...
  Result := CoRecordset.Create;
  ...
end;
На клиенте вызывается так:
Код:
...
  Var 
    rec: _ Recordset;
    MyServer:IMyServer; 
...
  rec := IDispatch( MyServer.GetBlock( 1 ) ) as _Recordset // Выдает ошибку
Знаю что OleVariant не годится для возврата _Recordset, перепробовал разные варианты.
При вызове из клиента вылетает access violation. Помогите вернуть клиенту _Recordset.
Ответить с цитированием
  #2  
Старый 05.01.2011, 16:29
com+ com+ вне форума
Прохожий
 
Регистрация: 26.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

Всем сапибо! Тема закрыта!!!

Решение нашел сам.
Если кто еще с таким сталкивался, можете использовать текст ниже.
Код:
//функция в COM должна быть объявлена так
HRESULT _stdcall GetBlock([in] byte ATypeStort, [out, retval] VARIANT * Value );
// где Value - будит recordset

Реализация функции
Код:
...
function TMyServer.GetBlock(ATypeStort: Smallint): OleVariant;
begin
...
Result := CreateOleObject('ADODB.Recordset');
// CDataBaseConnectionString - строка соединения
Result.Open('select * from users', CDataBaseConnectionString, adOpenDynamic, adLockReadOnly, adCmdText);
...
end;
...

на клиенте вызывается так
Код:
...
var
rec:_Recordset;
...
rec := IDispatch( Authentication.GetBlock( 1 )) as _Recordset;
...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter