Передача массива+DCOM

Neox
Дата: 04.06.2009 21:53:05
так раскажу что у меня есть.
У меня есть сервер и клиент написанные на делфи. Общение между ними через DCOM.
Мне нужно получить Все записи таблицы и показать их в клиенте.
вот что я придумал

Записываю таблицу у вариант массив а потом это возвращаю клиенту а там уже все это розпаковываю и отображаю у виде таблицы.
На сервере
function TUserManager.GetAllUsers(out Users: OleVariant; out p,
  k: Integer): HResult;
var
  V:variant;
  i,min,max:integer;

   id1:integer;
   pass1:WideString;
   name1:WideString;
   surName1:WideString;
   pobat1:WideString;
   nCount, nRec:integer;
  begin
   dm:=TDMServer.Create(nil);
  dm.SQLconnect.open;
  dm.GetUser.Open;
nRec := dm.GetUser.RecNo;
dm.GetUser.DisableControls;
dm.GetUser.Last;
nCount := dm.GetUser.RecNo;
dm.GetUser.RecNo := nRec;
dm.GetUser.EnableControls;
Min:=0;
Max:=nCount;
///////////////// ВОТ ТУТ Я СОХРАНЯЮ ДАННЫЕ В ВАРИАНТ МАССИВ
 V:=VarArrayCreate([Min,Max],varVariant);
 for i:=min to max-1 do
 begin
id1:=dm.GetUser.Fields.Fields[0].AsVariant;
pass1:=dm.GetUser.Fields.Fields[1].AsVariant;
name1:=dm.GetUser.Fields.Fields[2].AsVariant;
surName1:=dm.GetUser.Fields.Fields[3].AsVariant;
pobat1:=dm.GetUser.Fields.Fields[4].AsVariant;
V[i]:=VarArrayOf([id1,pass1,name1,surname1,pobat1]);
dm.GetUser.Next;
end;
////////////////////////////////
 Users:=V; //ВОЗВРАЩАЮ 
 p:=Max-2;
 k:=5;
 dm.SQLconnect.Close;
end;

А тепер вопрос:

Скажите пожалуйста, как это делают но нормальному, професионально.
SNike
Дата: 04.06.2009 22:55:22
Посмотри на TDataSetProvider и TClientDataSet, технология DataSnap.
Хорошо описано в книге "Delphi и технология COM" (Елманова, Трепалин, Тенцер)

Можно посмотреть еще Microsof ADO.NET (обзор - в статье Borland DataSnap против Microsoft ADO.NET)
Neox
Дата: 04.06.2009 23:21:40
Круто. Мне надо на сервер сделать бизнес обьекты и все будет проходить через них. Я сделал припустим 2 класа Персоны и МенеджерПерсон. Вот више я предоставил примерчик как я это все делаю. Если я буду использовать датаснап то это тоже будет технология DCOM ? Бо мне нужно именно DCOM.
SNike
Дата: 05.06.2009 12:45:56
Да, это и будет технология COM/DCOM
И вышеуказанная книженция, кстати, именно этим вещам и посвящена. Там и подходящий тебе пример разобран.
SNike
Дата: 05.06.2009 13:11:16
вот еще ссылка: http://www.delphisources.ru/pages/faq/base/many_dm_one_connection.html
Neox
Дата: 06.06.2009 21:12:23
MIDAS i DCOM это одно и тоже???
Neox
Дата: 06.06.2009 21:21:48
И Еще. Клиент у меня не должен зависеть от конкретной стурктуры БД. Уся логика должна быть реализована у Бизнес Обьекте (БО). Мне кажется что технология DataSnap Не решает это.
DmSer
Дата: 07.06.2009 00:08:05
MIDAS i DCOM это одно и тоже???

Грубо говоря:
DCOM - технология межпроцессного взаимодействия, а Midas - инструмент, обеспечивающий работоспособность клиентских наборов данных (ClientDataSet). Это далеко не одно и то же.

автор
И Еще. Клиент у меня не должен зависеть от конкретной стурктуры БД. Уся логика должна быть реализована у Бизнес Обьекте (БО). Мне кажется что технология DataSnap Не решает это.


Клиент и не будет в этом случае зависеть от БД. Технология DataSnap позволяет снять подобную зависимость. К базе данных привязан сервер DCOM (RemoteDataModule), но не клиентское приложение. Основное, что следует учитывать: различие в типах полей для разных СУБД. Например, в InterBase есть тип поля Boolean, в FireBird такого типа нет и т.п. Это нужно заранее учитывать при разработке клиента и сервера DCOM.
Neox
Дата: 07.06.2009 11:29:00
гм... Но как мне реализовать БО . В книге очень мало по этой теме, там сразу переход идет на толстые клиенты
___void
Дата: 07.06.2009 12:53:30
Neox
MIDAS, DCOM, DataSnap


Познакомился с этим ?

А теперь "Копай" в сторону :
- kbmMW (рекомендую)
- RemObjects
- Astra
и т.д.

"Почему ?" - долго объяснять - поверь на слово...