线程里面的query,需要有独立的session。以下为解决的一个方法
procedure createqry(Qry:Tquery);
begin
qry:=Tquery.create(nil);
try
Session.SessionName := Format('%s%x', [Session.Name, UniqueNumber]);
Database.DriverName := FdriverName;
Database.Params.Values['SERVER NAME'] :=FServerName;
Database.Params.Values['USER NAME'] := FUserName;
Database.Params.Values['PASSWORD'] :=FPassword;
Database.SessionName := Session.SessionName;
Database.DatabaseName := Format('%s%x', [Database.Name, UniqueNumber]);
Qry.SessionName := Database.SessionName;
Qry.DatabaseName := Database.DatabaseName;
//以下处理要做的事情,释放也可以在其它函数中进行
fianlly
qry.free;
end;
end;
其中GetUniqueNumber是为了保持唯一性,可以这么写
var
Guard: Integer;
Numbers: Integer;
function GetUniqueNumber: Integer;
asm
@@1: MOV EDX,1
XCHG Guard,EDX
OR EDX,EDX
JNZ @@2
MOV EAX,Numbers
INC EAX
MOV Numbers,EAX
MOV Guard,EDX
RET
@@2: PUSH 0
CALL Sleep
JMP @@1
end;