1,594
社区成员




procedure TForm1.Button1Click(Sender: TObject);
var
SqlStr:string;
Stream:TStringStream;
Size:Integer;
begin
SqlStr:=trim(edit2.Text); //sql语句
try
if not Tcpc.Connected then begin
Tcpc.Host:= '127.0.0.1';
tcpc.Port:= 11111;
Tcpc.Connect;
end;
except
end;
if not Tcpc.Connected then Exit;
Stream := TStringStream.Create('');
try
Tcpc.WriteLn('SQLO'+SqlStr);
// 读取流大小
Size:= Tcpc.ReadInteger;
if Size = 0 then Exit;
// 回应
Tcpc.WriteLn('send data');
// 接收流数据
Tcpc.ReadStream(Stream, Size);
// 接收完毕
Stream.Position:= 0;
showmessage('接收完毕'+#13#10+Stream.DataString);
finally
Stream.Free;
tcpc.Disconnect;
end;
end;
procedure TForm1.IdTCPServer1AfterCommandHandler(ASender: TIdTCPServer;
AThread: TIdPeerThread);
var
Mess:string;
SqlStr:string;
SqlData:String;
Stream:TstringStream;
AdoQ:Tadoquery;
begin
Mess:=AThread.Connection.ReadLn;
if COPY(MESS,1,4)='SQLO' THEN //SQL查询
BEGIN
SqlStr:=copy(Mess,5,Length(Mess)-4);
memo.Lines.Add(SqlStr); //正常显示发来的SQL字符
AdoQ:=Tadoquery.Create(self);
AdoQ.Connection:=Ado;
with AdoQ do
begin
close;
Sql.Clear;
Sql.Text:=SqlStr;
open;
SqlData:=RecordsetToXML(recordset); //将数据集转成字符串,正常
CLose;
free;
end;
Stream:=TstringStream.Create(SqlData); //转到流,正常
try
Stream.Position:=0; //流还原 Stream.Datastring后,数据也正常,证明流有正确数据
with AThread.Connection do begin
WriteInteger(Stream.Size);
if Stream.Size = 0 then Exit;
Mess:= ReadLn;
if Mess <> 'send data' then Exit;
WriteStream(Stream);
end;
finally
Stream.Free;
end;
END;
end;