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

نام تاپیک: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

  1. #1

    آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    با سلام - من برنامه ای کلاینت سروری نوشته ام حال می خواه کاری کنم که اگر درون یکی از کلاینت ها اگه شخصی رکوردی را در برنامه درج کرد تمام DbGrid های دیگر در تمام کلاینت ها که مربوط به همان است اتوماتیک آپدیت شود و رکورد جدید را بلافاصیه نمایش دهد . لطفا راهنمایی کنید

  2. #2

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

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

  3. #3
    کاربر دائمی آواتار hossein_h62
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    اصفهـــــان
    پست
    720

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

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

  4. #4

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    راستش مشکلم اینه که یه برنامه دیتابیسی نوشتم که کل داده ها بر روی بانک و sql server که روی سرور هست ریخته میشه یعنی برنامه کلاینت سروری کار می کنه ، این نرم افزار روی 50 کلاینت همزمان در حال اجراست و تمام این 50 تا داده هایشان را روی همان بانکی که روی سرور attach شده و همان sql servere سیستم سرور ذخیره می کنن و نیز می خوانند . حال اگر یکی از این کلاینت ها مثلا کلاینت شماره 32 یک رکورد مثلا یک کتاب جدید را درج کرد بایستی هم خودش و هم همه کلاینت های دیگر آن رکورد جدید را بلافاصله درون dbgrid مربوطه ببینند لطفا راهنمایی کنید چون هیچ الگوریتمی جواب نداد

  5. #5

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

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

  6. #6

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    نقل قول نوشته شده توسط m_h_2007 مشاهده تاپیک
    راستش مشکلم اینه که یه برنامه دیتابیسی نوشتم که کل داده ها بر روی بانک و sql server که روی سرور هست ریخته میشه یعنی برنامه کلاینت سروری کار می کنه ، این نرم افزار روی 50 کلاینت همزمان در حال اجراست و تمام این 50 تا داده هایشان را روی همان بانکی که روی سرور attach شده و همان sql servere سیستم سرور ذخیره می کنن و نیز می خوانند . حال اگر یکی از این کلاینت ها مثلا کلاینت شماره 32 یک رکورد مثلا یک کتاب جدید را درج کرد بایستی هم خودش و هم همه کلاینت های دیگر آن رکورد جدید را بلافاصله درون dbgrid مربوطه ببینند لطفا راهنمایی کنید چون هیچ الگوریتمی جواب نداد
    اگه تعداد رکوردهای شما 15 میلیون باشه معنیش اینه که کسی نمیتونه توی گرید دنبال یه رکورد بگرده. شما احتمالا میخوای که در صورت جستجو اطلاعات ثبت شده نفر قبلی مشاهده بشه که این کار بدون هیچ عمل اضافه ای بعد از Insert و تنها با یک کوئری انجام میشه. من پیشنهاد میکنم که گرید رو برداری و بجاش محیط مناسب جستجو ایجاد کنی

  7. #7

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    این مشکلو دوستمون خیلی جدی نیست.
    ولی مثلا اگر در یک برنامه رستوران از طرف باجه (اونجایی که پول میگیرن) سفارش مشتری ویرایش شود، آشپزخانه باید سریع تغییرات را ببینه.راه استانداردی برای این کار هست؟آیا میشه فقط یک رکورد یا مجموعه ای از رکوردها را که احتیاج داریم، آپدیت(دریافت اطلاعات از سرور یا کلاینت) کنیم؟
    من تازه کار با برنامه های کلاینت/سرور را شروع کردم و این جور مشکلات زیاد در برنامه پیش میاد.دوستان تجربه های خودشون رو در مورد این جور مشکلات بزارن اینجا ما هم استفاده کنیم.یکی از مشکلاتی که من باهاش برخوردم عدم استفاده از دستورات sql در برنامه است و برای دیدن لیست سفارشات مستقیما از ttable کامپوننت dbisam استفاده کردم.البته ناگفته نماند برنامه خیلی خوبی نوشتما ولی برای اجرا در محیط کلاینت/سرور مشکلات زیادی داره.

  8. #8

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

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

  9. #9

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    بهترین راه این است که بروز رسانی اطلاعات در اختیار کاربر باشد و روی رویدادهای مرتبط مثلاً جستجو قبل از انجام عملیات جستجو بروزرسانی انجام گردد

  10. #10

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    تو برنامه در رویداد Afterpost کامپوننت dbisamtable هر وقت که کاربر رکوردی ایجاد کرد، یک پیغام متنی تحت شبکه به همه کلاینتها فرستاده میشود(رشته حداکثر 10 کاراکتر) و هر کلاینت بنابر نیاز خود که در چه قسمتی از برنامه باشد، دوباره اطلاعات را بروز میکند .با تغییراتی در سورس کد، هر کلاینت فقط اون رکوردی که تغییر کرده را بازیابی میکند.راه استانداردی پیدا نکردم.از TbOrder.Database.DataSets[0].Resync([]); استفاده کردم و تابع Resync را دستکاری کردم.دوستان راه استانداردی سراغ ندارند؟مثلا query اطلاعات 1000 رکورد را Select کرده، با استفاده از کد بالا مثلا فقط رکورد شماره 450 بازیابی میشود و در بافر query قرار میگیرد.
    یا اینکه در رویداد onediterror اگر کاربر نتونست اطلاعات را ویرایش کند، دوباره اطلاعات فقط همان رکورد را بروز میکند.
    یکی از تجربیاتی که بدست آوردم اینه که خیلی خیلی بهتره که بجای استفاده از Table از query استفاده کنید.چون با اینکه table در بعضی از موارد (اینارو امتحان کردم) ممکن است بهتر از query عمل کند ولی در کل مخصوصا در محیط کلاینت/سرور سرعت کار با دیتابیس به شدت کاهش پیدا میکند مخصوصا زمانیکه از فیلتر استفاده کرده باشیم.

    از

  11. #11
    کاربر جدید آواتار eastprogrammer
    تاریخ عضویت
    آذر 1388
    محل زندگی
    استان خراسان جنوبی - بیرجند
    پست
    9

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    من پيشنهاد مي كنم در مورد change notification مطالعه بكني
    من اين كار رو در سيستم اتوماسيون اداري انجام دادم و بدون رفرش كردن اطلاعات گريدم آپ ديت مي شه
    اين امكان در sql server 2005 و ورژن بالاتر وجود داره و مطمئنا نياز شما رو به بهترين شكل برآورده مي كنه
    اگه سوالي بود من در خدمتم

    فقط
    در سمت كلاينت به sql native client احتياج داري
    در سمت سرور بايد سرويس broker رو روي ديتابيست فعال كني

  12. #12
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    360

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    1- broker سرویس در Sql Server 2008 چگونه فعال می شود
    2- sql native client چگونه در دلفی می شود، استفاده کرد

  13. #13

    نقل قول: آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور

    با سلام خدمت دوستان
    من در برنامه ای که نوشته ام، دیتا بیس روی سرور قرار داره ، و کاربران از این طریق به دیتا بیس وصل میشن،یه قسمت از برنامه به این صورت هست که کابران به صورت آفلاین برای هم پیغام میذارن، من یه جدول برای همین پیغامها طراحی کردم،و این اطلاعات رو در dbgrid نمایش دادم، مشکل من اینجاست که مثلا الن کاربری پیمامی ارسال کرده باشه، سریع طرف مقابل اون پیغام رو ببینه! می خواستم ببینم به چه صورت اطلاعات به صورت اتوماتیک آپدیت بشن

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

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