文章目录
多线程并发处理带入ADOQuery
提示:这里可以添加技术概要
核心源码
type
TTaskThread = class(TThread)
private
FTaskList: TTaskList;
FReturnList: TTaskList;
FTask: TTaskListRecord;
FADOConnection1,FADOConnection2: TADOConnection;
FADOQuery1,FADOQuery2: TADOQuery;
function DataSetToVar(ADataSet: TDataSet; Recs: Integer): olevariant;
function VarToStream(Const Data: OleVariant): TMemoryStream;
procedure myCompressStream(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel); //压缩流
procedure myUnCompressStream(const CompressedStream:TMemoryStream; var DeCompressedStream:TMemoryStream); //解压缩流
protected
procedure Execute; override;
public
constructor Create(TaskList: TTaskList; ReturnList: TTaskList);
procedure CreateADOConn(var _FADOConnection: TADOConnection; _ConnStr:string);
procedure CreateADOQuery(var _FADOQuery: TADOQuery; _FADOConnection:TADOConnection);
end;
implementation
{ TTaskThread }
procedure TTaskThread.myCompressStream(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
Try
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
CompressedStream.SaveToStream(SourceStream);
finally
SourceStream.Free;
end;
CompressedStream.Clear;
CompressedStream.WriteBuffer(Count, SizeOf(Count));
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;
procedure TTaskThread.myUnCompressStream(const CompressedStream:TMemoryStr