PDA

View Full Version : حرفه ای: پویا بودن فرم ها و کنترل ترافیک تحت شبکه



Anis131313
یک شنبه 04 دی 1390, 14:18 عصر
سلام و خسته نباشید خدمت دوستان عزیزم
من 2 تا سوال برام پیش اومده که میخواستم راجع به اونها من رو راهنمایی کنید.
در شکل زیر 2 تا فرم میبینیم که یکی از آنها Active است در این فرم فعال اگر مقدار "ظرفیت" را چنانچه از 170 به عدد دیگری تغییر دهیم متاسفانه در فرم دیگر در داخل DBGrid اش این مقدار به روز نمی شود و خوب این طبیعی است چرا که کدی برای آن نوشته نشده سوال اول من این است که جز تایمر گذاشتن روی هر فرم از چه روشی میتوانم برای پویا بودن فرم ها نسبت به دیتابیس اقدام کنم ؟

79684

سوال دوم اینکه طریقه ی تولید کد های اصلی جداولم به چه صورت باشد تا اگر مثلا در یک فرم رجیستر پرسنل اگر در 2 جا ثبت نام انجام شد 2 کد همسان با هم Generate نشود ، خواهشا قضیه را مستقل از بانک اطلاعاتی و موارد کلید اصلی و رابطه ها بیان کنید. در FormShow یک MaxCode را از Query بدس می آورم و در فرم قرار میدم. اما در جای دیگر هم همین فرم باز شود دو کد یکسان تولید شده که در هنگام درج یکی از این دو فرم مشابه پیغام خطا خواهند داد، میدانم که به توابعی همچون Transact و ... ختم میشه اما من میخواهم بدونم روش پیشنهادی شما در Generate کردن کد ها در هنگام Form show چیست...
مثلا یک راه این است که در همان اول کار یک رکورد خالی با همان کد درست کنیم و بعد از زدن دکمه ثبت پر کنیم ...

مرسی و ممنونhttp://barnamenevis.org/images/misc/pencil.png

Anis131313
چهارشنبه 07 دی 1390, 11:09 صبح
بازم سلام. وقت به خیر.
من توضیحاتم رو بد دادم یا اینکه جریان چیه ؟ همیشه زحمت جواب دادن به من در این سایت برای دوستان بوده...
اگر جایی از جملاتم نامفهوم هست بهم بگید تا اصلاح کنم یا بیشتر توضیح بدم.

مرسی.

Anis131313
شنبه 10 دی 1390, 09:03 صبح
بازم سلام
یکی منو تحویل بگیره :دی

Felony
شنبه 10 دی 1390, 09:50 صبح
سوالتون رو مختصر بپرسید و برای هر سوال تاپیک مجزا بزنید , من به شخصه همون روز که تاپیک رو زدید میخواستم بهتون جواب بدم ولی سوالتون خیلی طولانی بود و تا وسطاش خوندم و بیخیال شدم , چون پیش خودم گفتم الان باید یه رمان واسه جواب بنویسم .

Anis131313
یک شنبه 11 دی 1390, 18:21 عصر
سوالتون رو مختصر بپرسید و برای هر سوال تاپیک مجزا بزنید , من به شخصه همون روز که تاپیک رو زدید میخواستم بهتون جواب بدم ولی سوالتون خیلی طولانی بود و تا وسطاش خوندم و بیخیال شدم , چون پیش خودم گفتم الان باید یه رمان واسه جواب بنویسم .

سلام جناب تاجیک
ممنون از جوابتون
راستش در جاهایی که دوستان یک تاپیک ایجاد می کنند و توضیح کم میدن سایر دوستان میگن یه خورده بیشتر توضیح بدید الانم که اینجا .... :لبخند:
به هر حال
2 تا سوال :
1. وقتی 2 فرم با هم باز هستند و داده های آنها به هم مربوط است چه کاری انجام دهم که تغییرات در یک فرم باعث با خبر شدن فرم دیگر و تغییر آن داده روی اونیکی فرم بشه.
2. روش پشنهادی برای تولید کد مثلا پرسنلی چیست در زمانی که برنامه تحت شبکه هست و چندین فرم ثبت پرسنلی روی چندین کامپیوتر دارد کار می کند؟ نمیخواهم کد ها تکراری شود.

چیکار کنم؟؟؟ هرچی سعی میکنم از این کوتاه تر نمیشه بیان کرد. دوستان به هر کدومش که جواب دادن ممنون می شم.

Mask
یک شنبه 11 دی 1390, 18:31 عصر
1. وقتی 2 فرم با هم باز هستند و داده های آنها به هم مربوط است چه کاری انجام دهم که تغییرات در یک فرم باعث با خبر شدن فرم دیگر و تغییر آن داده روی اونیکی فرم بشه.
با پیغام SendMessage برای فرم بعدی اون رو ،به روز رسانی کنید.

2. روش پشنهادی برای تولید کد مثلا پرسنلی چیست در زمانی که برنامه تحت شبکه هست و چندین فرم ثبت پرسنلی روی چندین کامپیوتر دارد کار می کند؟ نمیخواهم کد ها تکراری شود.
وظیفه ایجاد کد پرسنلی رو فقط به یک سیستم بدید. و بقیه از اون تقاظا کنند.

Anis131313
یک شنبه 11 دی 1390, 18:46 عصر
با پیغام SendMessage برای فرم بعدی اون رو ،به روز رسانی کنید.

وظیفه ایجاد کد پرسنلی رو فقط به یک سیستم بدید. و بقیه از اون تقاظا کنند.


ممنون از جوابتون ، روشتون برای ایجاد کد حرف نداشت، اما در مورد تابع SendMessage، من با این تابع کار نکردم 2 فرم من به دیتابیس وصل هستند، این تابع SendMessage جواب میده ؟

Anis131313
یک شنبه 11 دی 1390, 18:49 عصر
برای ایجاد و تولید کد میتوان در OnShow فرم یک Insert انجام داد و در OnClose آن سطر را Delete کرد ، این چیزی هست که تو ذهن خودم بود ...

Felony
یک شنبه 11 دی 1390, 19:42 عصر
1. وقتی 2 فرم با هم باز هستند و داده های آنها به هم مربوط است چه کاری انجام دهم که تغییرات در یک فرم باعث با خبر شدن فرم دیگر و تغییر آن داده روی اونیکی فرم بشه.
با چه ابزاری به بانکتنون متصل شدید ؟ بیشتر ابزارها رویدادهایی برای اطلاع از تغییرات جدول دارند , مثلا OnAfterUpdate که میتونید در این رویداد یک پیغام رو برای فرم های برنامه Broadcast کنید .


2. روش پشنهادی برای تولید کد مثلا پرسنلی چیست در زمانی که برنامه تحت شبکه هست و چندین فرم ثبت پرسنلی روی چندین کامپیوتر دارد کار می کند؟ نمیخواهم کد ها تکراری شود.
کارهای زیادی میشه کرد , یکیش که در ۶ گفته شد , من تو شرکت به دلیل مشکلاتی که پیش اومده دارم بخش شبکه برنامه رو تغییرات اساسی میدم ( سیستم قبلی برنامه همونی بود که در پست ۶ پیشنهاد شده ) و برنامه حدود ۷۰ کاربر همزمان داره ولی تحلیلی که الان کردم به این نتیجه رسیدم که بهتره شماره دهی رو به عهده سیستم کلاینت بزارم و برای اینکه شماره ها تکراری در نیاد یک شماره ثابت برای هر کلاینت در نظر گرفته شه , مثلا کلاینت ۱ همیشه کدهایی که تولید میکنه با ۱ شروع شه , کلاینت ۲ با ۲ الی آخر , اینطوری میشه مدیریت خوبی برای عدم تکرار در کل شبکه و برای هر کلاینت پیاده کرد .

این مورد بستگی به معماری نرم افزار و نحوه طراحی بخش شبکه و ... داره و میشه خیلی راه حل ها براش ارایه داد .

Anis131313
یک شنبه 11 دی 1390, 20:04 عصر
جناب تاجیک عزیز

بنده با ADO کار میکنم و طریقه مثلا درج کردن اطلاعاتم در SQLServer به صورت زیر انجام میدم و تمامی Relation های تحلیل سیستم را با برنامه نویسی انجام میدم


ADOQueryServer.Active:=False;
ADOQueryServer.SQL.Clear;
ADOQueryServer.SQL.Add('Insert Into ServerDateTime (MyDate,MyTime) values ('''+MyDate+''','''+MyTime+''')');
ADOQueryServer.ExecSQL;


در مورد تولید کد ، حرفتون جالب بود ، متاسفانه همچین کاری برام مقدور نیست، این برنامه دارای تعداد کلایتن نا مشخص هست ، نظرتون راجع به حرفی که در بالا زدم چی هستش ؟ در OnShow یک سطر را اشغال کنیم و اگر کاربر نخواست در OnClose حذف سطر کنیم و اگر کلید تایید رو زد که هیچ ...

Felony
یک شنبه 11 دی 1390, 20:16 عصر
بنده با ADO کار میکنم و طریقه مثلا درج کردن اطلاعاتم در SQLServer به صورت زیر انجام میدم و تمامی Relation های تحلیل سیستم را با برنامه نویسی انجام میدم
پس جوابتون همون پست قبلیم هست .


در مورد تولید کد ، حرفتون جالب بود ، متاسفانه همچین کاری برام مقدور نیست، این برنامه دارای تعداد کلایتن نا مشخص هست ، نظرتون راجع به حرفی که در بالا زدم چی هستش ؟ در OnShow یک سطر را اشغال کنیم و اگر کاربر نخواست در OnClose حذف سطر کنیم و اگر کلید تایید رو زد که هیچ ...
برنامه ای که من روش کار میکنم یک سیستم مدیریت پزشکی هست , ممکنه ۱ کلاینت داشته باشه , ممکنه ۱۰۰ تا , این موارد بیشتر از برنامه نویسی نیاز به تحلیل داره و همه جوره میشه پیادش کرد .

Anis131313
یک شنبه 11 دی 1390, 20:37 عصر
پس جوابتون همون پست قبلیم هست .

ممنون از شما
لطفا در مورد اون Event و طریقه ی Broadcast کردن توضیح بیشتری میدین ؟

hamid-nic
یک شنبه 11 دی 1390, 21:17 عصر
سلام
اگر از stored procedure در سمت سرور استفاده کنی خیلی راحت می توانید چنین مشکلاتی را (کد پرسنلی و ...)حل کنید .
موفق باشید .

Anis131313
یک شنبه 11 دی 1390, 21:35 عصر
ممنونم حمید جان
حرف شما درسته ، اما تلاش میکنیم که در محیط برنامه نویسی این کار رو انجام بدیم

ممنون از بزرگواریتون

Felony
دوشنبه 12 دی 1390, 07:16 صبح
ممنون از شما
لطفا در مورد اون Event و طریقه ی Broadcast کردن توضیح بیشتری میدین ؟
در مورد اون Event ها , مثلا ADOQuery یک رویداد با نام AfterPost داره که وقتی به وسیله ADOQuery تون یک جدل عملیات درج داشته باشید اون رویداد بعد از عملیات درج اجرا میشه ( برای کارهای دیگه مثل Edit و Delete و ... هم رویداد داره ) , تا اینجا این رویدادها شما رو از به کار بردن Timer بی نیاز کرده , حالا نوبت میرسه به اطلاع رسانی از طریق این رویداد به باقی فرم ها , اگر من بخوام همچین کاری کنم یک پیغام برای ویندوز ثبت میکنم ( با تابع RegisterWindowsMessage ) و بعد تو اون رویداد AfterPost توسط SendMessage یا PostMessage اون پیغام رو به تمام پنجره های باز در ویندوز میروسنم ( برای Broadcast کردن یک پیغام در ویندوز باید پارامتر اول توابع SendMessage یا PostMessage رو با HWND_BROADCAST مقداردهی کنید ) , حالا برای فرم های برنامه خودم یک MessageHnadler مینویسم که این پیغام رو هندل کنن و در صورت رسیدن این پیغام Query های مروبط به DBGrid ها رو Update کنن , در این صورت فرم های غیر برنامه خودم هم نسبت به این پیغام Broadcast شده عکس العملی نشون نمیدادن چون براش MessageHandler ی نداشتن .

Anis131313
دوشنبه 12 دی 1390, 11:32 صبح
بسیار عالی !!!

خیلی ممنون جناب تاجیک.