服务器端:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, DB, DBTables, ExtCtrls, DBCtrls, StdCtrls, Mask,
Buttons, Grids, DBGrids;type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
ListBox1: TListBox;
DBGrid1: TDBGrid;
ServerSocket1: TServerSocket;
procedure clientread(Sender: TObject;Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.ServerSocket1clientread(Sender: TObject;Socket: TCustomWinSocket);
var
data:tstringlist;
i:integer;
strrec:string;
strback:string;
begin
data:=tstringlist.Create;
strrec:=socket.receivetext;
try
data.Text:=strrec;
table1.insert;
for i:=0 to table1.fildcount-1 do
table1.fields[i].asstring:=data.values[table1.Fields[i].name];
table1compid.asinteger:=gettickcount;
table1looggedby.asstring:=socket.Remotehost;
table1.Post;
strback:=table1compid.asstring;
listbox1.items.add('pass,and return:'+strback);
socket.sendtext(strback);
finally
data.free;
end;
end;end.客户端:
我只写主要部分了:
procedure tform1.bitbtn1click(sender:tobject);
var
i:integer;
data:tstringlist;
begin
data:=tstringlist.create;
table1.first;
while not table1.eof do
begin
if table1compid.isnull or (table1compid.asinteger=0) then
listbox1.items.add('正在向服务器提交新数据');
data.clear;
for i:=0 to table1.fieldcount-1 do
data.values[table1.fielddes[i].name]:=table1.fieds[i].asstring;
clientsocket1.host:=edit1.text;
clientsocket1.active:=true;
clientsocket1.socket.sendtext(data.text);
fwaiting:=true;
while fwaiting do
application.processmessages;
table1.next;
end;
bitbtn1.enabled:=false;
end;
procedure tform1.clientsocket1read(sender:tobject;socket:tcustomwinsocket);
begin
if fwaiting then
begin
table1.edit;
table1compid.asstring:=socket.receivetext;
table1.post;
listbox1.items.add('提交成功!compid:'+table1compid.asstring);
fwaiting:=false;
end;
end;
----------
运行到table1compid老是错误,怎么回事?还有,asstring也错误。
当然还有其他小错误,但以上是两个主要的。我搞了很久啦,求教哪位大虾帮帮忙。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, DB, DBTables, ExtCtrls, DBCtrls, StdCtrls, Mask,
Buttons, Grids, DBGrids;type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
ListBox1: TListBox;
DBGrid1: TDBGrid;
ServerSocket1: TServerSocket;
procedure clientread(Sender: TObject;Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.ServerSocket1clientread(Sender: TObject;Socket: TCustomWinSocket);
var
data:tstringlist;
i:integer;
strrec:string;
strback:string;
begin
data:=tstringlist.Create;
strrec:=socket.receivetext;
try
data.Text:=strrec;
table1.insert;
for i:=0 to table1.fildcount-1 do
table1.fields[i].asstring:=data.values[table1.Fields[i].name];
table1compid.asinteger:=gettickcount;
table1looggedby.asstring:=socket.Remotehost;
table1.Post;
strback:=table1compid.asstring;
listbox1.items.add('pass,and return:'+strback);
socket.sendtext(strback);
finally
data.free;
end;
end;end.客户端:
我只写主要部分了:
procedure tform1.bitbtn1click(sender:tobject);
var
i:integer;
data:tstringlist;
begin
data:=tstringlist.create;
table1.first;
while not table1.eof do
begin
if table1compid.isnull or (table1compid.asinteger=0) then
listbox1.items.add('正在向服务器提交新数据');
data.clear;
for i:=0 to table1.fieldcount-1 do
data.values[table1.fielddes[i].name]:=table1.fieds[i].asstring;
clientsocket1.host:=edit1.text;
clientsocket1.active:=true;
clientsocket1.socket.sendtext(data.text);
fwaiting:=true;
while fwaiting do
application.processmessages;
table1.next;
end;
bitbtn1.enabled:=false;
end;
procedure tform1.clientsocket1read(sender:tobject;socket:tcustomwinsocket);
begin
if fwaiting then
begin
table1.edit;
table1compid.asstring:=socket.receivetext;
table1.post;
listbox1.items.add('提交成功!compid:'+table1compid.asstring);
fwaiting:=false;
end;
end;
----------
运行到table1compid老是错误,怎么回事?还有,asstring也错误。
当然还有其他小错误,但以上是两个主要的。我搞了很久啦,求教哪位大虾帮帮忙。
table1.fields[i].asstring:=data.values[table1.Fields[i].name];你确信上面的字段和 table1compid 不重叠?table1compid.asinteger:=gettickcount;
改为这个呢:table1.FieldByName('compid').AsInteger:=gettickcount;