نمایش نتایج 1 تا 7 از 7

نام تاپیک: ارتباط سنگين شدن بار شبكه با ADO

  1. #1
    کاربر تازه وارد آواتار diamond_guilan
    تاریخ عضویت
    آذر 1388
    محل زندگی
    رشت
    پست
    40

    Question ارتباط سنگين شدن بار شبكه با ADO

    سلام خدمت دوستان عزيز؛
    يه برنامه نوشته شده كه چندين كاربر با سطح دسترسي هاي مختلف داره، بانك اطلاعاتيش كه SQL2000 هست تو يه سروري Attach هست و كاربران connection مربوط به ado رو اون كامپيوتري كه sql داره وارد ميكنن... از عنصرهاي ADOconnection, ADOtable, ADOqouery استفاده شده تو كل برنامه براي ارتباط با بانك. در ابتداي برنامه ADOconnection فعال ميشه و LoginForm ظاهر ميشه، كاربر مشخصات ورود به سيستم رو ميده و بعد تو يه فرم ديگه تمام جداول بانك اطلاعاتي باز ميشه، حدود 30 تا جدول.
    چندتا مسئله واسم پيش اومده، از دوستاي عزيز خواهش ميكنم كمك كنن، پيپاپيش ممنون از لطفتون...

    1. آيا اين كار بار شبكه رو سنگين ميكنه؟ (باز كردن تمامي جدولها در ابتداي برنامه)
    2. وقتي همه كاربرا، برنامه شونو اجرا ميكنن، وقتي يكيشون عمليات درج توي بانك رو انجام ميده بقيه سيستم ها متوجه نميشن!
    براي مثال توي يه دكمه نوشتم كه بره آخرين ID رو از جدول بخونه و يه دونه بهش اضافه كنه تا ID جديد بدست بياد، وقتي يه كاربري يه مقداري رو درج ميكنه، كاربر ديگه وقتي ميخواد درج كنه پيغام خطلاي PrimeyKey ميده، يعني با اينكه ميگم دوباره بره بانك رو بخونه و چك كنه، اما متوجه نميشه!
    وقتي قبل از خوندن ID از جدول مربوطه، ADOtable رو Close و Open ميكنم درست ميشه! با Refresh حل نميشه! اين واقعا بايد همين كارو كرد؟! يعني هربار بانك رو بست و دوباره باز كرد؟!

    ميشه كسايي كه تو اين زمينه كار كردن و جواب گرفتن، يه راه حل منطقي و درست پيش روم بزارن.

    :: تشكر ::

  2. #2

    نقل قول: ارتباط سنگين شدن بار شبكه با ADO

    1- باز کردن همه ی جدول ها کار بیهوده ای هست و حتما برنامه ی شما رو سنگین می کنه ، مخصوصا اگر رکوردهای زیادی توی برنامه قرار بگیره
    2- کلا شما در این روش بهتره که همیشه بلافاصله بعد از بازکردن جدول و خوندن اطلاعات مورد نظر اونو close کنید . باز نگه داشتن بانک هیچ کمکی به برنامه ی شما نمیکنه.
    اصولا در استفاده از ADO برقراری ارتباط باید لحظه ای باشه و با اطلاعات به صورت آفلاین کار بشه و سپس تغییرات ارسال بشه. در غیر این صورت سنگین میشه.

    من خیلی وقته که استفاده از ADO رو کنار گذاشتم و از EF استفاده می کنم. حتی استفاده از Strongly typed dataset ها رو به روشی که در ADO هست ترجیح میدم. مخصوصا EF کاراییشو در چند پروژه ی بزرگ به خوبی نشون داده .

  3. #3
    کاربر تازه وارد آواتار diamond_guilan
    تاریخ عضویت
    آذر 1388
    محل زندگی
    رشت
    پست
    40

    نقل قول: ارتباط سنگين شدن بار شبكه با ADO

    ممنون دوست عزيز؛
    اگه كلا با ADOqouery كلا كار كنم چطور؟
    يعني اصلاي با عنصر ADOtable كاري نكنم. كليه عمليات درج، حذف و ويرايش رو با ADOqouery انجام بدم. بنظر شما اين بهتر و منطقي تره؟
    بعد از انجام هر عمليات چيكار كنم با ADOqoury؟ مقدار SQL رو Clear كنم يا كلا Close كنم؟ براي مثال واسه جستجو و نمايش داده ها به كاربر؛ بعد از اينكه Qoury را گرفتم اگه ADOqoury باز بمونه سنگين ميشه برنامه؟
    ::در ضمن من با دلفي 7 برنامه رو نوشتم::

  4. #4

    نقل قول: ارتباط سنگين شدن بار شبكه با ADO

    سلام.
    کار کردن با ADOQuery رو جز در مواقع خاص درست نمی دونم.
    به نظر من بهتره که با ADOStoredProc کار کنید. سلکت ها تون رو هم با همون بگیرید.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  5. #5
    کاربر تازه وارد آواتار diamond_guilan
    تاریخ عضویت
    آذر 1388
    محل زندگی
    رشت
    پست
    40

    نقل قول: ارتباط سنگين شدن بار شبكه با ADO

    اول؛ تشكر ميكنم از همه دوستايي كه بهم تو اين تاپيك كمك كردن، دستتون در نكنه...
    با جستجو و تحقيقاتي كه كردم متوجه شدم كه مناسب ترين راه براي چنين برنامه هايي استفاده از StoredProcedureهاست. توي خود سرور اجرا ميشه و به همين دليل فكر كنم رو شبكه هم تاثيري نزاره... منم همين روش رو انتخاب كردم.
    اگه دوستان باز نظري دارن و روش بهتري رو سراغ دارن لطفا پيشنهاد كنن.
    .:. ممنون .:.

  6. #6

    نقل قول: ارتباط سنگين شدن بار شبكه با ADO

    با جستجو و تحقيقاتي كه كردم متوجه شدم كه مناسب ترين راه براي چنين برنامه هايي استفاده از StoredProcedureهاست. توي خود سرور اجرا ميشه و به همين دليل فكر كنم رو شبكه هم تاثيري نزاره... منم همين روش رو انتخاب كردم.
    فرق Stored Procedure با یک کوئری معمولی که توسط AdoTable یا AdoQuery به سرور ارسال میشه، از نظر مصرف پهنای باند شبکه بسیار ناچیزه؛ مگر اینکه بخواید یک کوئری خیلی بزرگ (از لحاظ دستورات کوئری، نه خروجی آن) را صدها و یا هزاران بار در شبکه اجرا کنید! پس Stored Procedure به خودی خود مزیت خاصی در زمینه کاهش پهنای باند مصرفی شبکه برای شما ایجاد نمیکنه. مزیت Stored Procedure از نظر کارایی در کاهش زمان آماده سازی برای اجرای یک کوئری در سمت سرور هست، که ربطی به شبکه شما نداره.

    برای کاهش پهنای باند مصرفی شبکه می بایست کوئری ها طوری نوشته بشند که در هر زمان فقط داده های مورد نیاز کاربر از بانک اطلاعاتی واکشی بشه، و داده های غیر ضروری درخواست نشه. مثلا اگر یک جدول حاوی یک میلیون رکورد هست، و باید محتوای آن به کاربر نمایش داده بشه، نیازی به واکشی تمام رکوردها نیست، چون کاربر انسانی قادر به مطالعه تمام آنها در یک زمان معقول نیست. پس بهتره که به جای واکشی یک میلیون رکورد، 100 و یا 1000 رکورد به کاربر ارسال بشه، و اگر کاربر به رکوردهای بیشتری نیاز داشت، هر بار 100 یا 1000 رکورد بعدی برای وی ارسال بشه.

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


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7

    نقل قول: ارتباط سنگين شدن بار شبكه با ADO

    2. وقتي همه كاربرا، برنامه شونو اجرا ميكنن، وقتي يكيشون عمليات درج توي بانك رو انجام ميده بقيه سيستم ها متوجه نميشن!
    برای این مشکل از transaction استفاده کن .
    برای کار با سرور هم از adodataset استفاده کن و تنظیمات اون را روی storedprocedure قرار بده .

تاپیک های مشابه

  1. سوال: ارتباط با فیلد خاص از طریق ado.net
    نوشته شده توسط havash.link در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 30 دی 1388, 01:04 صبح
  2. کپی پوشه با تمام فایل ها و زیر شاخه ها و ارتباط با پراگرس بار
    نوشته شده توسط hamidrah در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: پنج شنبه 08 مرداد 1388, 11:58 صبح
  3. ارتباط با فایل Excel از طریق ADO
    نوشته شده توسط Syrus در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: دوشنبه 23 اردیبهشت 1387, 18:07 عصر
  4. ارتباط با بانک اطلاعاتی با روش ADO.NET
    نوشته شده توسط SADIDRIKHTEGAR در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 2
    آخرین پست: پنج شنبه 09 اسفند 1386, 23:55 عصر
  5. ارتباط با dbf files از طریق ADO component
    نوشته شده توسط sahar4192 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 0
    آخرین پست: پنج شنبه 27 آذر 1382, 22:47 عصر

قوانین ایجاد تاپیک در تالار

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