Добрый день! У меня такая проблема. Я должен сделать програму типа БД-Сервер-Клиент БД- мс скюл 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;
|
Вопрос:
как взять назад обьект с етого Вариант массива???? |