Вниз
Скачать: CL | DM;

TMemoryStream TidTCPClient..server   Найти похожие ветки 

← →
Fl@sh ©   (2006-03-29 19:00) [0]

На сервере обработчик:
procedure TForm1.ITCPSTIdCommandLoadFromDBKlientCommand(
 ASender: TIdCommand);
var
 DataModule: TDataModule1;
 i: integer;
 SL: TStringList;
 ipRR: string;
 ms: TMemoryStream;
begin
 DataModule := TDataModule1.Create(nil);
 try
   ipRR := ASender.Params[0];

   with DataModule.IBQuery do
   begin
     Close;
     SQL.Clear;
     SQL.Text := "SELECT * FROM KLIENT WHERE "RR"=" + ipRR;
     Open;
   end;

   SL := TStringList.Create;
   ms := TMemoryStream.Create;
   try
     try

       for i := 0 to DataModule.IBQuery.FieldCount - 1 do
         SL.Add(DataModule.IBQuery.Fields[i].AsString);
         SL.Add("asdf");
         SL.SaveToStream(ms);
         ASender.Thread.Connection.WriteStream(ms, True, False);
     except
       on E: Exception do
         Writeln("Error:" + e.Message);
     end;
   finally
     SL.Free;
     ms.Free;
   end;
 finally
   DataModule.Free;
 end;
end;



На клиенте:
procedure TfmServer.Button5Click(Sender: TObject);
var
 i : Integer;
 ms: TMemoryStream;
 SL: TStringList;
begin
 fmServer.IdTCPClient.Connect;
 fmServer.IdTCPClient.SendCmd("select 2345");
 ms := TMemoryStream.Create;
 try
//    ms.Position := 0;
   fmServer.IdTCPClient.ReadStream(ms);

   SL.LoadFromStream(ms);
   //Memo1.Lines.LoadFromStream(ms);
 finally
   SL.Free;
   ms.Free;
 end;
end;


Вискакивает error на строчке    SL.LoadFromStream(ms);
..excepion with message "Out of memory while expanding memory stream". Use step..
Как лечить?


← →
antonn ©   (2006-03-29 19:48) [1]

комментарий убрать
  fmServer.IdTCPClient.ReadStream(ms);
  ms.Position := 0;
  SL.LoadFromStream(ms);


← →
Fl@sh ©   (2006-03-29 20:02) [2]

Вот так:
procedure TfmServer.Button5Click(Sender: TObject);
var
 i : Integer;
 ms: TMemoryStream;
 SL: TStringList;
begin
 fmServer.IdTCPClient.Connect;
 fmServer.IdTCPClient.SendCmd("select 2345");
 ms := TMemoryStream.Create;
 try
   fmServer.IdTCPClient.ReadStream(ms); //Ошибка та же что и в [0]
   ms.Position := 0;
   SL.LoadFromStream(ms);
 finally
   SL.Free;
   ms.Free;
 end;
end;

Не помогло :)


← →
antonn_   (2006-03-29 20:24) [3]

кстати, SL создается?

по проблеме - не знаю, я с ТЦП не работал...


← →
Fl@sh ©   (2006-03-29 20:44) [4]


> кстати, SL создается?

Уже да, я забыл про него, хотя суть не в этом, я еще даже к SL не обращался.


← →
tesseract ©   (2006-03-29 21:50) [5]

Пример из help по TCPClient по indy 9


     if bSizeKnown then
     // read known data size
     AConnection.ReadStream(AStream, ABytes, False)
     else
     // read all data until disconnected
     AConnection.ReadStream(AStream, -1, True);


← →
Fl@sh ©   (2006-03-29 22:37) [6]


> tesseract ©   (29.03.06 21:50) [5]

Спасибо большое за пример
Кому интересно, вот как надо:

...
try
 fmServer.IdTCPClient.ReadStream(ms, ms.Size, False);    
 ms.Position := 0;
 SL.LoadFromStream(ms);
finally
...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
2-1143709295
dera
2006-03-30 13:01
2006.04.16
Как "угадать" разрешение экрана пользователя


15-1143012272
Alex_Delphi
2006-03-22 10:24
2006.04.16
Oracl открывается только для чтения


2-1143702326
thvfrjd
2006-03-30 11:05
2006.04.16
проблем с параметрами


4-1138731906
Pit
2006-01-31 21:25
2006.04.16
Пропадает Task bar,tray,start.


4-1137151923
Dimon777
2006-01-13 14:32
2006.04.16
Переключение принтера в режим двусторонней печати




   Наверх