آخرين پست هاي ارسالي انجمن ايران دلفي

تماشای رایگان فیلم ایرانی ، خارجی و کودک آکادمی دلفی
نمایش نتایج: از 1 به 8 از 8

موضوع: دلفی تحت شبکه

  1. #1
    مدیر انجمن javad_rajabloo آواتار ها
    تاریخ عضویت
    May 2013
    محل سکونت
    گنبد کاووس
    سن
    11
    نوشته ها
    71
    تشکر ها
    21
    تشکر شده 30 بار در 18 ارسال.

    دلفی تحت شبکه

    سلام به دوستان

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

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

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

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

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

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

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

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

  2. #2
    مدیرکل سایت admin آواتار ها
    تاریخ عضویت
    September 2008
    محل سکونت
    تهران ، آیسک
    سن
    39
    نوشته ها
    522
    تشکر ها
    247
    تشکر شده 250 بار در 160 ارسال.
    Blog Entries
    1
    سلام.
    معمولا مدیریت همروندی رو* SQL server بر عهده می گیرد و از روش هایی چون قفل گذاری استفاده کرده و نمیگذارد یک رکورد توسط دو کاربر ویرایش شود. یعنی وقتی کلاینت یک رکوردی را برای ویرایش انتخاب کرد آن رکورد یا آن جدول تا پایان آن عملیات قفل گذاری میشود ... درصورتی هم که می خواهید شخصا آن را بر عهده بگیرید می توانید یک فیلد در دیتابیس ایجاد نموده با عنوان قفل و زمانی که یک رکورد در حال ویرایش است آن را FALSE نموده تا بقیه با انتخاب آن رکورد، در صورتی که مقدار آن FALSE بود، نتوانند آن را ویرایش نمایند و بعد از چک کردن مقدار آن ، ارور "این رکورد توسط کاربر دیگری در حال ویرایش است ، لطفا در فرصتی دیگر این عملیات را انجام دهید " را به کاربر نمایش دهد ...
    برای مورد دوم هم در صورتی که شما از ADOQuery* استفاده کنید و مستقیما کوئری را برای دیتابیس ارسال کنید ، همیشه آخرین اطلاعات و بروزترین اطلاعات در دسترس شماست.در صورتی هم که از ADOTable* استفاده شود می توان باتنی را با عنوان بروز رسانی ایجاد نمود و در آن یکبار ADOTable* مربوطه رو FALSE* و مجددا TRUE نمود.
    دلفی ،*جذاب ترین زبان طراحی نرم افزار ...

  3. #3
    مدیر انجمن javad_rajabloo آواتار ها
    تاریخ عضویت
    May 2013
    محل سکونت
    گنبد کاووس
    سن
    11
    نوشته ها
    71
    تشکر ها
    21
    تشکر شده 30 بار در 18 ارسال.
    در مورد اول فرض می کنیم کاربر اول بر روی یک رکورد جهت ویرایش کلیک می کنه
    یک فیلد گذاشتیم که وضعیت ویرایش رو مشخص میکنه که در حالت غیر ویرایش فالس هست
    وقتی کاربر کلیک کرد بر روی ویرایش ، اون فیلد بشه true .

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

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

  4. #4
    مدیر انجمن yanin آواتار ها
    تاریخ عضویت
    June 2013
    محل سکونت
    تهران
    سن
    11
    نوشته ها
    144
    تشکر ها
    13
    تشکر شده 53 بار در 34 ارسال.
    در مورد قسمت اول اینطور فرض کنید که به محض ورود به قسمت ویرایش اطلاعات خودش اون دیتا False رو پست کنه و تغیرات اون فیلد ذخیره بشه و بعد پنجره قسمت ویرایش اطلاعات برای تغییر اطلاعات باز شه و دوباره با بسته شدن پنجره قسمت ویرایش اطلاعات اول باید او True ذخیره بشه بعد کدهای مربوط به قسمت قسمت ویرایش اطلاعات انجام شه

  5. #5
    مدیرکل سایت admin آواتار ها
    تاریخ عضویت
    September 2008
    محل سکونت
    تهران ، آیسک
    سن
    39
    نوشته ها
    522
    تشکر ها
    247
    تشکر شده 250 بار در 160 ارسال.
    Blog Entries
    1
    نقل قول از javad_rajabloo
    در مورد اول فرض می کنیم کاربر اول بر روی یک رکورد جهت ویرایش کلیک می کنه
    یک فیلد گذاشتیم که وضعیت ویرایش رو مشخص میکنه که در حالت غیر ویرایش فالس هست
    وقتی کاربر کلیک کرد بر روی ویرایش ، اون فیلد بشه true .

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

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


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

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

  6. #6
    مدیر انجمن javad_rajabloo آواتار ها
    تاریخ عضویت
    May 2013
    محل سکونت
    گنبد کاووس
    سن
    11
    نوشته ها
    71
    تشکر ها
    21
    تشکر شده 30 بار در 18 ارسال.
    ممنون که تا اینجا همراهی کردید

    یه سوال دیگه :

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

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

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

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

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

  7. #7
    مدیر انجمن b_itman_b آواتار ها
    تاریخ عضویت
    June 2013
    سن
    11
    نوشته ها
    89
    تشکر ها
    0
    تشکر شده 10 بار در 9 ارسال.
    به به اساتید عزیز.امیدوارم این بحث ناتموم نمونه.من خودم یکی از طرفداراشم.تو برنامه نویسی شبکه LAN مکشکلات زیادی نیست ولی من نمیتونم چطور برنامه رو ببرم تحت WAN.البته مدیرجون یه راهنمایی هایی کردن که تقریبا متوجه نشدم چطوریه.
    اگه بچه ها پایه باشن همین بحث رو تا آخرش ببریم خیلی عالی میشه.
    در مورد ذخیره عکس باید بگم اگه خود عکس ذخیره بشه که خوب رو حجم بانک و سرعت برنامه تاثیر میزاره.حتی در بهترین حات که یه جدول مجزا فقط برای عکس داشته باشیم.اگر هم قرار باشه آدرس ذخیره بشه باید حتما آدرس مربوط به سرور باشه ولی یه مشکل دیگه اینه که اگه پوشه مورد نظر قابلیت خواندن و نوشتن رو داشته باشه احتمال پاک کردن یا تغییر نام توسط کاربران دیگه هست.تو برنامه تحت شبکه هر احتمالی رو باید در نظر گرفت.
    خودم نمیدونم چه باید کرد تاحالا به ذخیره عکس فکر نکردم تو برنامه تحت شبکه ولی شاید یه راه هم استفاده از یه بانک کمکی باشه که فقط عکس هارو درخودش ذخیره میکنه.شاید.دوستان نظر بدن
    همه چیز قابل دستیابی است اگر تو بخوای

  8. #8
    مدیرکل سایت admin آواتار ها
    تاریخ عضویت
    September 2008
    محل سکونت
    تهران ، آیسک
    سن
    39
    نوشته ها
    522
    تشکر ها
    247
    تشکر شده 250 بار در 160 ارسال.
    Blog Entries
    1
    مهندس تو این پست بحث رو ادامه دادیم

    [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
    دلفی ،*جذاب ترین زبان طراحی نرم افزار ...

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •