View Full Version : Update اطلاعات Grid بدون متد Refresh
Mohammad_Mnt
دوشنبه 26 دی 1384, 21:25 عصر
من می خوام اطلاعات Grid بدون متد Refresh به روز رسانی بشه . یعنی هر موقع یه کاربر یه رکورد اضافه/حذف کرد ، توی تمام کلاینت ها نشون داده بشه
MiRHaDi
دوشنبه 26 دی 1384, 23:42 عصر
سلام
به کلاینتها یک Message میفرستی و اونها جدول رو به روز میکنند !
نمیخوای اینجوری باشه ؟
بای
ali_abbasi22145
سه شنبه 27 دی 1384, 08:55 صبح
سلام
به کلاینتها یک Message میفرستی و اونها جدول رو به روز میکنند !
نمیخوای اینجوری باشه ؟
بای
سلام میرهادی عزیز
این دستور را اینجا لطفا بگو.
jahani1148
سه شنبه 27 دی 1384, 14:22 عصر
بسمه تعالی در سیتم های کلاینت و سرور وقتی یکی از کلاینت ها یک رکوردی را اضافه یا ویرایش یا حذف می کند . باید تغییرات در در سرور ثبت نماید . اما کلاینت های دیگر چگونه از این تغییر آگاه می شوند ؟ بسیاری توصیه می کنند که با استفاده از تایمر در فاصله های زمانی خاصی کلاینت ها اتوماتیک رفرش شوند . اما این راه اساسی نیست چون باعث ایجاد ترافیک در شبکه می شود . با پیام داده به کلاینت های دیگر نیز می توان از تغییرات آگه شد . ولی این نیز ممکن است باعث ایجاد سر در گمی شود . کلاینت ها هر لحظه باید این پیامها را چک کنند . بهترین راه این است که هر کلاینت قبل از انجام تغییرات اطلاعات خود را رفرش نماید .
Mohammad_Mnt
سه شنبه 27 دی 1384, 15:53 عصر
آقای جهانی : من می خوام تغییرات به طور آنی توی تمام کلایت ها نمایش داده بشه ، نه این که قبل از تغییرات رفرش بشه
آقای میرهادی : چطوری کلاینت های دیگه رو پیدا کنم و با postMessage بهشون پیام بدم ؟
MiRHaDi
سه شنبه 27 دی 1384, 23:32 عصر
سلام
این رو توی سرور انجام میدید !
یعنی هر وقت تغییری کرد سرور متوجه میشه ! و اون که آدرس همه کلاینتها رو داره به اونها میفرسته !
البته با PostMessage نه ! با Socket ها
بای
vcldeveloper
چهارشنبه 28 دی 1384, 02:00 صبح
در تکمیل پست آقای میرهادی...
هر کلاینتی باید برای دسترسی به اطلاعات به سرور متصل بشه، کاری که شما باید بکنید اینه که در سمت سرور آدرس هر کلاینت را که به سرور متصل میشه در جایی ثبت کنید و هنگامی که کلاینتی داده ها را تغییر داد و این تغییرات به سرور رسید، سرور می تونه با مراجعه به لیست کلاینت ها به هرکدوم از اونها پیغامی بفرسته تا خودشون را Refresh کنند. البته این کلیات بود، جزئییات را خودتون می تونید در نظر بگیرید (مثلا می تونید برای پرهیز از ایجاد ترافیک بی مورد، نام جدولی که تغییر کرده را به کلاینت ها بفرستید تا فقط کلاینت هایی که در حال حاضر در حال کار با اون جدول هستند، داده های خودشون را Refresh کنند).
Naficy
پنج شنبه 29 دی 1384, 12:12 عصر
آنچنان که در تنظیمات CursorType توضیح داده شده، با قراردادن آن روی ctDynamic باید خود بانک اطلاعاتی این وظیفه را برعهده گیرد.
اما در ادامه صحبت دوستان: اگر از udp برای ارسال پیام استفاده کنید، می توانید یک پیام را برای تمامی کامپیوترهای شبکه ارسال کنید. بدین صورت، دیگر نیازی به سرور نیز نخواهید داشت.
ضمنا postmessage به هیچ عنوان ربطی به موضوع ندارد. آنچه در بحث دوستان "پیام" خوانده می شود ربطی به message های ویندوز ندارد. منظور هر نوع ارتباط میان برنامه هاست. حتما بحث Interprocess Commication در راهنمای MSDN را مطالعه کنید. علاوه بر UDP روشهای دیگری وجود دارند که در این راهنما توضیح داده شده اند.
vcldeveloper
جمعه 30 دی 1384, 02:05 صبح
آنچنان که در تنظیمات CursorType توضیح داده شده، با قراردادن آن روی ctDynamic باید خود بانک اطلاعاتی این وظیفه را برعهده گیرد.
درسته، اما متاسفانه خیلی از RDBMS ها از این حالت پشتیبانی نمی کنند.
Mohammad_Mnt
جمعه 15 اردیبهشت 1385, 15:45 عصر
متاسفانه خیلی از RDBMS ها از این حالت پشتیبانی نمی کنند. MSSQL پشتیبانی می کنه ؟
مشکل من اینه که وقتی CursorType را روی Server می ذارم ، دیگه نمی تونم یه سری دستورات رو اجرا کنم ، مثل این :
DM.MainConnection.Execute('INSERT INTO [#XPERSON] SELECT * FROM [TPERSON] WHERE CODE = '+inttostr(datasource.DataSet['code']));
پیام می ده که آبجکت #XPerson رو نمی شناسه . در حالی که اگه کرسرتایپ رو روی کلاینت تنظیم کنم خطا نمی ده
SH.Daneshvar
جمعه 15 اردیبهشت 1385, 17:12 عصر
دوستان سلام
بهترین راه حل به نظر من این هست که توی After Insetr و After Update و After Delete جداول
یک Event به تمامی کلاینت های متصل به SQL Server فرستاده بشه و اونها جدولی رو که
تغییر کرده رو Refresh کنن.
خوب میپرسید چطور ؟
توی InterBase قابلیتی وجود داره که توی MS-SQL Server نیست یعنی Post Event که
به تمامی کلاینت های متصل به سرور یک اتفاق افتادن یک Event رو گزارش میده.
موفق باشید.
یا حق.
AminSobati
جمعه 15 اردیبهشت 1385, 21:16 عصر
اگر از SQL Server 2005 استفاده کنید، امکان Query Notification دقیقا برای همین منظور اضافه شده. در نسخه 2000 هیچ راه حل سرراستی برای این منظور وجود نداره. بعضا راههایی مثل Socket Programming استفاده میکنند...
Mohammad_Mnt
شنبه 16 اردیبهشت 1385, 08:25 صبح
MSSQL پشتیبانی می کنه ؟
مشکل من اینه که وقتی CursorType را روی Server می ذارم ، دیگه نمی تونم یه سری دستورات رو اجرا کنم ، مثل این :
DM.MainConnection.Execute('INSERT INTO [#XPERSON] SELECT * FROM [TPERSON] WHERE CODE = '+inttostr(datasource.DataSet['code']));
پیام می ده که آبجکت #XPerson رو نمی شناسه . در حالی که اگه کرسرتایپ رو روی کلاینت تنظیم کنم خطا نمی ده
جواب این قسمت رو هم بدین لطفا :لبخند:
jafari1
چهارشنبه 01 آذر 1385, 21:35 عصر
با سلام خدمت دوستان عزیز
بنده با adoTable با فراخوان رفرش نیز رکوردهای جدید را نمیبینم ( درگرید) و هر وقت میخواهم رفرش شود مجبورم با قطع ارتباط Adoconnection و وصل مجدد این کار را انجام دهم آیا میشود راهنمایی بفرمایید چرا؟
MNosouhi
چهارشنبه 01 آذر 1385, 22:58 عصر
از دستور Requery استفاده کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.