PDA

View Full Version : حرفه ای: تشخیص عدم انجام تراکنش بعد از مدت زمان مشخص



masoode
دوشنبه 12 دی 1401, 10:20 صبح
سلام بر دوستان و همکاران گرامی
من در پروژه ای از یک FDConnection برای برقراری ارتباط با دیتابیس استفاده میکنم. همچنین در فرمهای مختلف تعداد زیادی FDQuery و FDTable دارم و بعضا FDQuery و FDTable هایی را هم داینامیک میسازم.
آیا از Event های FDConnection و یک تایمر میتوانم تشخیص دهم که کاربر چه مدتی از برنامه استفاده نکرده است؟ می خواهم اگر مثلا نیم ساعت برنامه باز بود بدون آنکه استفاده کند، برنامه کلا بسته شود! البته نمیخواهم فقط کانکشن قطع شود.

masoode
یک شنبه 18 دی 1401, 08:27 صبح
یعنی هیچ راهی نداره؟

ابوالفضل عباسی
چهارشنبه 24 آبان 1402, 11:13 صبح
می‌توانید از تابع GetTickCount در دلفی برای اندازه‌گیری زمان استفاده کنید. این تابع زمان اجرای برنامه را به میلی‌ثانیه برمی‌گرداند. در زمان مناسب (برای مثال هر 10 دقیقه)، زمان فعلی را ذخیره کنید و در هر تراکنش، زمان اجرای آن را مقایسه کنید. اگر زمان گذشته از 10 دقیقه باشد و هیچ تراکنشی انجام نشده باشد، اتصال را قطع کنید.

var LastTransactionTime, CurrentTime: Cardinal;
begin
// در زمان مناسب (هر 10 دقیقه) زمان فعلی را ذخیره کنید:
LastTransactionTime := GetTickCount;


// در هر تراکنش:
// ...


// در زمان مناسب، زمان فعلی را دوباره گرفته و با زمان آخرین تراکنش مقایسه کنید:
CurrentTime := GetTickCount;
if (CurrentTime - LastTransactionTime > 600000) then // 600000 معادل 10 دقیقه در میلی‌ثانیه است
begin
// هیچ تراکنشی انجام نشده است، اتصال را قطع کنید:
FDConnection1.Connected := False;
end;
end;

در Delphi و با استفاده از FDConnection، می‌توانید از رویداد AfterConnect برای اطلاع از برقراری اتصال به دیتابیس استفاده کنید. این رویداد هنگامی اجرا می‌شود که اتصال به دیتابیس با موفقیت برقرار شود. در این رویداد می‌توانید زمان برقراری اتصال را ثبت کرده و از آن برای محاسبه زمان گذشته از آخرین تراکنش استفاده کنید.

procedure TForm1.FDConnection1AfterConnect(Sender: TObject);begin
// زمان برقراری اتصال را ثبت کنید
LastTransactionTime := GetTickCount;
end;

سپس در قسمتی از برنامه که یک تراکنش انجام می‌دهید، می‌توانید زمان جاری را ذخیره کرده و برای محاسبه زمان گذشته از آخرین تراکنش استفاده کنید، همانند مثال قبلی.