سلام
من در برنامه ای مرتباً در حال اینسرت کردن دیتا در دیتابیس هستم. از SQL Server استفاده میکنم. در زمان اینسرت های پیاپی UI فریز میشود (یا در بهترین شرایط مرتب نشانگر ماوس ساعت شنی میشود!). می خواهم برای جلوگیری از این مشکل روتینی که در دیتابیس INSERT میکند را به ترد جداگانه منتقل کنم.
اگر با استفاده از Synchronize این کار را انجام بدهم که عملا هیچ سودی ندارد. به فکرم رسید که TADOQuery را به صورت داینامیک در ترد ایجاد کنم اما با مشکل مواجه شدم
procedure MThread.Execute;
var
ADOQInsert:TADOQuery;
EQuery:String;
begin
while SQLQueue.Count<1 do sleep(1);
EQuery:=SQLQueue.Strings[0];
SQLQueue.Delete(0);
try
ADOQInsert.Create(Self);
ADOQInsert.Coection:=Form1.ADOCoection1;
ADOQInsert.Close;
ADOQInsert.SQL.Clear;
ADOQInsert.SQL.Add(EQuery);
ADOQInsert.ExecSQL;
ADOQInsert.Free;
except
end;
end;
در این خط خطا می دهد ADOQInsert.Create(Self); چونکه Self در تِرٍد وجود ندارد!!!!
چه کار می توانم انجام دهم؟
برچسب:
نویسنده: محمد رضا جوادیان