PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : دلفی تحت شبکه



javad_rajabloo
26 / September / 2013, 03:46 PM
سلام به دوستان

در مورد دلفی تحت شبکه دوست دارم بحث بشه و هر کسی تجربه ای داره در اختیار قرار بده

البته منظور من برنامه نویسی سوکت نیست

در اینجا یک پروژه رو طرح می کنم که پیرامون اون بپردازیم

یک سرور داریم که اس کیو ال سرور روش نصبه و بانک اطلاعات ما در اون قرار داره و چند تا کلاینت قراره که بهش وصل بشن و عملیاتی رو انجام بدن

یکی از مسائلی که مطرحه اینه که چطور از ویرایش دو تا رکورد بطور همزمان با هم جلوگیری بشه. راه حلهای زیادی هست ، اما یک راه حل ساده ، منطقی و کارآمد.

دومین مسئله چطور یک اطلاعاتی که کلاینت یک اضافه یا ویرایش کرد برای بقیه قابل رویت باشه

مسائل دیگه بمونه واسه بعد ...

منتظر حضور شما هستم

admin
26 / September / 2013, 08:45 PM
سلام.
معمولا مدیریت همروندی رو* SQL server بر عهده می گیرد و از روش هایی چون قفل گذاری استفاده کرده و نمیگذارد یک رکورد توسط دو کاربر ویرایش شود. یعنی وقتی کلاینت یک رکوردی را برای ویرایش انتخاب کرد آن رکورد یا آن جدول تا پایان آن عملیات قفل گذاری میشود ... درصورتی هم که می خواهید شخصا آن را بر عهده بگیرید می توانید یک فیلد در دیتابیس ایجاد نموده با عنوان قفل و زمانی که یک رکورد در حال ویرایش است آن را FALSE نموده تا بقیه با انتخاب آن رکورد، در صورتی که مقدار آن FALSE بود، نتوانند آن را ویرایش نمایند و بعد از چک کردن مقدار آن ، ارور "این رکورد توسط کاربر دیگری در حال ویرایش است ، لطفا در فرصتی دیگر این عملیات را انجام دهید " را به کاربر نمایش دهد ...
برای مورد دوم هم در صورتی که شما از ADOQuery* استفاده کنید و مستقیما کوئری را برای دیتابیس ارسال کنید ، همیشه آخرین اطلاعات و بروزترین اطلاعات در دسترس شماست.در صورتی هم که از ADOTable* استفاده شود می توان باتنی را با عنوان بروز رسانی ایجاد نمود و در آن یکبار ADOTable* مربوطه رو FALSE* و مجددا TRUE نمود.

javad_rajabloo
27 / September / 2013, 11:04 AM
در مورد اول فرض می کنیم کاربر اول بر روی یک رکورد جهت ویرایش کلیک می کنه
یک فیلد گذاشتیم که وضعیت ویرایش رو مشخص میکنه که در حالت غیر ویرایش فالس هست
وقتی کاربر کلیک کرد بر روی ویرایش ، اون فیلد بشه true .

تا اینجاش اوکی . اما کاربر دوم وقتی کلیک کرد بر روی همون رکورد ، چون تغییرات کاربر قبلی هنوز ذخیره نشده ، کاربر دوم اون حالت true رو نمی بینه . پس این راه حل شدنی نیست.

در مورد دوم اگه یه دی بی گرید داشته باشیم ، می تونیم یه تایمر بذاریم که هر چند ثانیه رفرش کنه.

yanin
27 / September / 2013, 07:03 PM
در مورد قسمت اول اینطور فرض کنید که به محض ورود به قسمت ویرایش اطلاعات خودش اون دیتا False رو پست کنه و تغیرات اون فیلد ذخیره بشه و بعد پنجره قسمت ویرایش اطلاعات برای تغییر اطلاعات باز شه و دوباره با بسته شدن پنجره قسمت ویرایش اطلاعات اول باید او True ذخیره بشه بعد کدهای مربوط به قسمت قسمت ویرایش اطلاعات انجام شه

admin
27 / September / 2013, 10:43 PM
نقل قول از javad_rajabloo
در مورد اول فرض می کنیم کاربر اول بر روی یک رکورد جهت ویرایش کلیک می کنه
یک فیلد گذاشتیم که وضعیت ویرایش رو مشخص میکنه که در حالت غیر ویرایش فالس هست
وقتی کاربر کلیک کرد بر روی ویرایش ، اون فیلد بشه true .

تا اینجاش اوکی . اما کاربر دوم وقتی کلیک کرد بر روی همون رکورد ، چون تغییرات کاربر قبلی هنوز ذخیره نشده ، کاربر دوم اون حالت true رو نمی بینه . پس این راه حل شدنی نیست.

در مورد دوم اگه یه دی بی گرید داشته باشیم ، می تونیم یه تایمر بذاریم که هر چند ثانیه رفرش کنه.


منظور از true کردن یک فیلد یعنی ذخیره ی اطلاعات ، البته ضرورتی نداره که از این روش استفاده کنید ، منظور من از ارائه ی این روش هدف قفل گذاری بود .
SQLServer خودش تقریبا این قفل گذاری رو انجام میده و به جز در مواردی که شما قرار است تراکنشی انجام دهید نیاز به کد نویسی خاصی نخواهید داشت.
در شرایطی که شما قرار است تراکنشی ارسال کنید ، لازم است مراحل رو در قالب یک transaction ارسال نموده که این transaction اگر به مشکل برنخورد ( مثلا رکوردی که قرار است ویرایش شود حذف نشده باشد ) تراکنش Commit خواهد شد و در غیر اینصورت Rollback خواهد شد ...
یکی از جواب هایی که خود MSDN نوشته ، استفاده از فیلد Date هست که در اون آخرین تاریخ ویرایش شده رو نگه داریم و اگه کاربری خواست اون رکورد رو ویراش کنه تاریخ ها با هم مقایسه می شوند ، اگر برابر نبودن یعنی concurrency اتفاق افتاده ...
ضمنا ابزاری همچون ADOTable به صورت خودکار و از پیش تعریف شده خیلی به شما در رفع این مشکل کمک خواهند کرد و کافی است شما کدتان را در try/catch نوشته و exception ها رو هندل بکنید ...

در مورد دوم هم پیشنهاد من اینه که اگر تعداد کلاینت های شما حتی بیشتر از 5 است ، به هیچ عنوان همچنین اشتباهی رو انجام ندهید ، واگرنه بعد از Run شدن نرم افزار بر روی تعداد کثیری از کلاینت ها سرور شما و همچنین سامانه ی نرم افزاری اتان به کلی هنگ خواهد کرد ...

javad_rajabloo
06 / October / 2013, 09:38 PM
ممنون که تا اینجا همراهی کردید

یه سوال دیگه :

در این برنامه تحت شبکه*، یکی از فیلدها ، فیلد عکس هستش.

برای ذخیره سازی عکس ، بهتره که عکس مستقیم در بانک ذخیره بشه یا اینکه مسیر فایل ذخیره بشه و در هنگام ذخیره و بازیابی به هارد دیسک مراجعه بشه

(حجم تصاویر حداکثر 100 کیلو بایت هست و تعداد رکوردهای بانک هم حدود روزانه 20 رکورد هست)

اگه روش دوم بر انتخاب کنیم باید یه پوشه در سرور ایجاد کنیم و حالت دسترسی رو به خواندن و نوشتن تغییر بدیم و اونو شیر کنیم و مسیر اون پوشه رو بدیم؟

یا اینکه روش دیگه ای هم هست؟
ممنونم*

b_itman_b
13 / October / 2013, 04:36 PM
به به اساتید عزیز.امیدوارم این بحث ناتموم نمونه.من خودم یکی از طرفداراشم.تو برنامه نویسی شبکه LAN مکشکلات زیادی نیست ولی من نمیتونم چطور برنامه رو ببرم تحت WAN.البته مدیرجون یه راهنمایی هایی کردن که تقریبا متوجه نشدم چطوریه.
اگه بچه ها پایه باشن همین بحث رو تا آخرش ببریم خیلی عالی میشه.
در مورد ذخیره عکس باید بگم اگه خود عکس ذخیره بشه که خوب رو حجم بانک و سرعت برنامه تاثیر میزاره.حتی در بهترین حات که یه جدول مجزا فقط برای عکس داشته باشیم.اگر هم قرار باشه آدرس ذخیره بشه باید حتما آدرس مربوط به سرور باشه ولی یه مشکل دیگه اینه که اگه پوشه مورد نظر قابلیت خواندن و نوشتن رو داشته باشه احتمال پاک کردن یا تغییر نام توسط کاربران دیگه هست.تو برنامه تحت شبکه هر احتمالی رو باید در نظر گرفت.
خودم نمیدونم چه باید کرد تاحالا به ذخیره عکس فکر نکردم تو برنامه تحت شبکه ولی شاید یه راه هم استفاده از یه بانک کمکی باشه که فقط عکس هارو درخودش ذخیره میکنه.شاید.دوستان نظر بدن

admin
14 / October / 2013, 12:24 AM
مهندس تو این پست بحث رو ادامه دادیم

ذخیره ی عکس در دیتابیس (<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>)