Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача массива, технология COM 
:(
    Опции темы
Neox_GeForce
Дата 9.12.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



Добрый день! У меня такая проблема. Я должен сделать програму типа БД-Сервер-Клиент
БД- мс скюл 2005 сервер и клиент на дельфи.

У меня трудность. я Не знаю как з масива COM обьектов перекодированого у  Вариант на клиенте взять СОМ обьект.
 вот код функций на сервере
Код

////////////////////////////////////////////////////////////////
function ArrayToVariant(ar: array of IUser): Variant;
var
  Min,Max, i: integer;
begin
  Min := Low(ar);
  Max := High(ar);
  result := VarArrayCreate([Min,Max], varVariant);
  for i := Min to Max do begin
    result[i] := ar[i];
  end;
end;
/////////////////////////////////////////////////////////////////


function TUserManager.GetAllUsers(out Users: OleVariant): HResult;
var
  user:IUser;
  i:integer;
  size:integer;
  UserArr:array[Word] of IUser;
begin
  dm:=TDMServer.Create(nil);
  dm.SQLconnect.open;
  size:=1;
  while dm.GetUser.Eof=false do
  begin
// записываем у поля обьекта данные
   user:=CoUser.Create;
   user.Set_PrinCipalID(dm.GetUser.Fields.Fields[0].AsInteger) ;
   user.Set_pass(dm.GetUser.Fields.Fields[1].AsString);
   user.Set_name(dm.GetUser.Fields.Fields[2].AsString);
   user.Set_surname(dm.GetUser.fields.Fields[3].AsString);
    UserArr[size]:= user;
    size:=size+1;
  end;

  dm.GetUser.Close;
  dm.SQLconnect.Close;
  Users:=ArrayToVariant(UserArr);


end;


а вот код клиента
Код


procedure TPharmacyClient.Button2Click(Sender: TObject);
var
a:OleVariant;
s:array of IUser;
user:IUser;
t:integer;
begin
userm1.GetAllUsers(a);
t:=VarType(a);


MessageDlg( VarToStr(t), mtInformation, [mbOk], 0);
 If VarIsArray(a) then
   MessageDlg( 'Переменная является массивом', mtInformation, [mbOk], 0);

//Так не работает да и не будет работать типы ж разные
s[1]:=a[1];

end;



Вопрос:

как взять назад обьект с етого Вариант массива????

Это сообщение отредактировал(а) Neox_GeForce - 9.12.2008, 20:22


--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0373 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.