ورود

View Full Version : پروسه یادآوری قرارهای کاری؟



hp1361
سه شنبه 18 فروردین 1388, 10:25 صبح
با سلام

من قصد نوشتن برنامه رو دارم که قرارهای کاری رو باید در زمان های مشخص شده که در بانک ذخیره شده اند را یاد آوری نماید . در حال حاضر مشکل من نحوه ی انجام پروسه ی یاد آوری است .
از دوستان کسی تا به حال نحوه ی انجام این پروسه را بررسی و انجام داده است . و اینکه دیگر دوستان چه پیشنهادی برای انجام آن دارند .

فرضا یک تایمر استفاده نمایم که هر دفعه بانک را جستجو کرده و در صورت یافتن قرار ملاقاتی در زمان جاری سیستم پیغامی نمایش دهد.
اما به نظر من بدین صورت بار زیادی بر روی سیستم وارد می شود که بخواهد در هر ثانیه چک کند که قراری وجود دارد یا خیر!

ممنون و منتظرم

shervin farzin
چهارشنبه 19 فروردین 1388, 17:18 عصر
سلام
فكر نميكنم سربار زيادي داشته باشه . از اونجايي كه دسترسي شما به اطلاعات جدول به صورت
صعودي هست ، نزديكترين گزينه به تاريخ و ساعت فعلي سيستم رو به كمك Select از Database
ميخونيد ( فقط همين يك ركورد ) ، اين مقدار داخل Dataset قرار داره و چون Dataset حافظه مورد
نيازش رو از RAM ميگيره اطلاعات مربوط به همون يك ركورد خاص ، داخل RAM قرار دارن و
دسترسي به اونها با حداقل سربار و حداكثر سرعت اتفاق ميفته .
تمام رخدادهاي بالا در دو Check Point هست كه اتفاق ميفته . يكي وقتي برنامه تازه اجراء و
راه اندازي ميشه ، يكي هم وقتي كه در يك تاريخ و ساعت مشخص به كاربر Alarm داده ميشه و
بعدش ديگه به اين تاريخ نيازي نداريم و بايد از جدول حذف بشه و تاريخ بعدي از Database خونده بشه .
موفق باشيد .

hp1361
چهارشنبه 19 فروردین 1388, 19:18 عصر
با سلام مجدد
ممنون دوست عزیز که نظرتون رو گفتین . اتفاقا من هم به همین راهکار رسیده بودم که فقط اولین رکورد رو چک کنم . حالا سوال من اینه که برنامه در طول روز در حال اجراست لذا در هر ثانیه باید رکورد اول بانک مقایسه بشه . آیا این مقایسه رکورد اول اونهم در هر ثانیه بار زیادی واسه سیستم نداره؟

ممنون و منتظرم

shervin farzin
پنج شنبه 20 فروردین 1388, 01:22 صبح
سلام

لذا در هر ثانیه باید رکورد اول بانک مقایسه بشه .
ضرورتي نداره كه در ثانيه يك بار فرايند خوندن از بانك اتفاق بيفته ، همونطور كه عرض كردم فقط
شما يك بار مثلا در زمان آغاز به كار برنامه ، نزديكترين ركورد به زمان حال رو از بانك مي خونيد و
ديگه به Database كاري نداريد ( تا زماني كه يا Alarm اتفاق بيفته يا برنامه مجدد باز بشه ) .
در طول اين مدت تايمر شما به عنوان مثال هر يك ثانيه ، ساعت سيستم رو با مقدار ركوردي كه
آلان در Dataset ( در واقع در RAM ) هست مقايسه ميكنه .
موفق باشيد .

hp1361
پنج شنبه 20 فروردین 1388, 14:35 عصر
سلام

ممنون از راهنمایی .

پس اینطور در نظر میگیریم که برنامه در زمان اجرا میره و اولین رکوردی رو که هنوز منقضی نشده در حافظه نگهدای میکنه تا آلارمش رو بده . بعد از اینکه آلارم داده شد دوباره رکورد بعدی رو لود میکنه و این فرآیند ادامه داره تا زمانی که برنامه در حال اجراست و بانک هم خالی نشده .

موفق باشیم:چشمک:

vcldeveloper
پنج شنبه 20 فروردین 1388, 16:28 عصر
بستگی داره بانک اطلاعاتی توسط چه کسانی و به چه شکلی در دسترس هست. اگر بانک اطلاعاتی مربوطه فقط توسط برنامه شما استفاده میشه، یا فقط برنامه شما آن را آپدیت میکنه، شما می تونید یک بار کل محتوای مورد نیازتان را از بانک اطلاعاتی بخوانید و در طول اجرای برنامه در حافظه نگهداری کنید، و نیازی نیست برای هر بار بررسی قرارها به بانک اطلاعاتی مراجعه کنید.

hp1361
پنج شنبه 20 فروردین 1388, 20:12 عصر
سلام مجدد

آقای کشاورز من در مورد خواندن کل محتوای یک بانک در حافظه چیزی نمیدونم اگه امکان داره بیشتر توضیح بدین . البته حدس میزنم منظورون استفاده از Dataset باشه آخه یه چیزایی توی Help دلفی خونده بودم اما روش زوم نشده بودم که بدونم چیه و چطور کار میکنه .(معمولا درخواست های بانکی رو با استفاده از یک کوئری حل میکردم)

ممنون و منتظرم

vcldeveloper
جمعه 21 فروردین 1388, 17:59 عصر
کافیه با یک کوئری ساده کل داده های مورد نیازتان را از بانک دریافت کنید، مثلا با استفاده از AdoQuery. این داده ها در حافظه باقی می مانند، و شما هر بار که ارجاعی به رکوردهای AdoQuery داشته باشید، به بانک اطلاعاتی مراجعه نمیکنه، بلکه از همین داده های موجود در حافظه استفاده میکنه.