procedure TThreadQuery.Execute;
var
Qry:TADOQuery;
i:Integer;
ConnString:WideString;
FSQLString:string;
begin
{ Place thread code here }
FreeOnTerminate:=True;
CoInitialize(nil);
//必须调用(需Uses ActiveX)
Qry:=TADOQuery.Create(nil); try
ConnString:=frmServer.ADOConnection1.ConnectionString;
Qry.ConnectionString:=ConnString; //必须有自己的连接
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.add(sqlstring) ; try
qry.ExecSQL ;
except
exit; end; finally
Qry.Free;
end ;
CoUninitialize;
end ;
procedure TfrmServer.FServerFRecvSocket(FDIChannel: TObject;
FDIBuffer: TDIBuffer; dwIoSize: Cardinal);
var
FSendBuffer: TDIBuffer;
s:string;
i:integer;
titem:Tlistitem;
begin
with (FDIChannel as TDIClientContext) do begin
FSendBuffer := GetFreeDIBuffer(IO_WSA_SEND);
if FSendBuffer<>nil then begin
FSendBuffer.CreatePackage(FDIBuffer.GetBuffer, FDIBuffer.GetUsed);
try
titem:=listview1.Items.Add;
titem.Caption:= m_sRemoteIP;
titem.SubItems.Add(inttostr(m_RemotePort)) ;
titem.SubItems.Add(FSendBuffer.GetBufferString(true)) ;
titem.SubItems.Add(datetimetostr(FSocketConnDateTimeTime )) ;
try
ip:= m_sRemoteIP+':'+inttostr(m_RemotePort);
sleep(5);
rev_data:=FSendBuffer.GetBufferString(true);
sqlstring:='insert into tcpip_insert(ip_address,ev3_id) values('''+ip+''','''+rev_data+''' )';
finally
q1.Execute;
sleep(5);
end;
finally
FSendBuffer.InitBuffer;
SendStream(FSendBuffer); end;
end;
end;
end;数据插入的时候m_RemotePort有漏掉,应该是线程错乱所致,是不是我的线程写的有问题,求指教!
另一个线程只负责从这个列表中读取数据,然后执行SQL,不要每次都创建一个ADOQ。将执行结果通知界面。更新LISTVIEW中显示内容。