发送时是这样的: procedure TFrm_Login.Button1Click(Sender: TObject); begin if strXML<>'' then begin ClientSocket.Socket.SendText('select * from Da_user order by username'+'$'); CltDS_User.Data := XMLToDataSet(strXML).Data; CltDS_User.Active := True; SocketConnectYes := 'No'; while not CltDS_User.Eof do begin C_username.Items.Add(CltDS_User.FieldValues['username']); CltDS_User.Next; end; end; end; 接收时这样: procedure TFrm_Main.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); begin strXML:=Socket.ReceiveText; end;当第一次点击按钮时,错误。再点击结果就出来了。应该怎么处理呢?
上面写错了 发送时是这样的: procedure TFrm_Login.Button1Click(Sender: TObject); begin ClientSocket.Socket.SendText('select * from Da_user order by username'+'$'); if strXML<>'' then begin CltDS_User.Data := XMLToDataSet(strXML).Data; CltDS_User.Active := True; SocketConnectYes := 'No'; while not CltDS_User.Eof do begin C_username.Items.Add(CltDS_User.FieldValues['username']); CltDS_User.Next; end; end; end; 接收时这样: procedure TFrm_Main.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); begin strXML:=Socket.ReceiveText; end;
定义一个全局的变量; var strXML:Tstringlist; //用来存放接收到的数据 //在主程序的create中添加: strXML:=Tstringlist.Create; strXML.Sorted:=false; //在主程序的Destroy中添加: if Assigned(strXML) then begin strXML.Free; strXML:=nil; end; 发送: procedure TFrm_Login.Button1Click(Sender: TObject); begin ClientSocket.Socket.SendText('select * from Da_user order by username'+'$'); end; 接收: procedure TFrm_Main.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); var str:string; begin str:=Socket.ReceiveText; strXML.add(str); end;procedure TFrm_Login.showtimetimer(Sender: TObject);//用定时器处理收到数据显示到界面的问题 begin if strXML.Count<=0 then //接收变量中没有数据时跳出 begin exit; end; CltDS_User.Data := XMLToDataSet(strXML.Strings[0]).Data; CltDS_User.Active := True; while not CltDS_User.Eof do begin C_username.Items.Add(CltDS_User.FieldValues['username']); CltDS_User.Next; end; strXML.Delete(0); end;
执行到 CltDS_User.Active := True; 有错误! CltDS_User Missing data provider or data packet!
procedure TFrm_Login.Button1Click(Sender: TObject);
begin
if strXML<>'' then
begin
ClientSocket.Socket.SendText('select * from Da_user order by username'+'$'); CltDS_User.Data := XMLToDataSet(strXML).Data;
CltDS_User.Active := True;
SocketConnectYes := 'No';
while not CltDS_User.Eof do
begin
C_username.Items.Add(CltDS_User.FieldValues['username']);
CltDS_User.Next;
end;
end;
end;
接收时这样:
procedure TFrm_Main.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
strXML:=Socket.ReceiveText;
end;当第一次点击按钮时,错误。再点击结果就出来了。应该怎么处理呢?
发送时是这样的:
procedure TFrm_Login.Button1Click(Sender: TObject);
begin ClientSocket.Socket.SendText('select * from Da_user order by username'+'$');
if strXML<>'' then
begin
CltDS_User.Data := XMLToDataSet(strXML).Data;
CltDS_User.Active := True;
SocketConnectYes := 'No';
while not CltDS_User.Eof do
begin
C_username.Items.Add(CltDS_User.FieldValues['username']);
CltDS_User.Next;
end;
end;
end;
接收时这样:
procedure TFrm_Main.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
strXML:=Socket.ReceiveText;
end;
var
strXML:Tstringlist; //用来存放接收到的数据
//在主程序的create中添加:
strXML:=Tstringlist.Create;
strXML.Sorted:=false;
//在主程序的Destroy中添加:
if Assigned(strXML) then
begin
strXML.Free;
strXML:=nil;
end;
发送:
procedure TFrm_Login.Button1Click(Sender: TObject);
begin
ClientSocket.Socket.SendText('select * from Da_user order by username'+'$');
end;
接收:
procedure TFrm_Main.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
str:string;
begin
str:=Socket.ReceiveText;
strXML.add(str);
end;procedure TFrm_Login.showtimetimer(Sender: TObject);//用定时器处理收到数据显示到界面的问题
begin
if strXML.Count<=0 then //接收变量中没有数据时跳出
begin
exit;
end; CltDS_User.Data := XMLToDataSet(strXML.Strings[0]).Data;
CltDS_User.Active := True; while not CltDS_User.Eof do
begin
C_username.Items.Add(CltDS_User.FieldValues['username']);
CltDS_User.Next;
end;
strXML.Delete(0);
end;
CltDS_User.Active := True;
有错误!
CltDS_User Missing data provider or data packet!
CltDS_User.Active := False;