PDA

View Full Version : سوال: آپدیت شدن دیتابیس در یک GridView بدون خروج از برنامه اصلی



pooya1072
جمعه 01 دی 1391, 17:35 عصر
سلام
من دو برنامه مجزا از هم نوشتم که یکیش حاویه یک دیتابیس اصلیه(شامل یک جدول ) که تمام تغییرات در این دیتابیس انجام میشه.برنامه دوم شامل یک DataGridView متصل به دیتابیس دیگه ایه و فقط تغییرات در دیتابیس برنامه اول را نمایش میده . ارسال تغییرات از طریق Replication در دیتابیس برنامه اول تعریف شده . مشکل اینه که هر وقت توی جدول مربوط به دیتابیس برنامه اصلی ذاذه ای وارد یا حذف می کنم برنامه دوم همون لحظه تغییرات رو نشون نمی ده و باید حتما از برنامه خارج بشم و با اجرای مجدد برنامه تغییرات اعمال میشه . چکار باید بکنم که تغییرات سریع و بدون خارج شدن از برنامه اعمال بشه.

swallow.pa
جمعه 01 دی 1391, 18:24 عصر
خب يك دكمه براي رفرش شدن اطلاعات بذار

shahryari
جمعه 01 دی 1391, 19:07 عصر
ميتوند كدي را كه در هنگام لود شدن برنامه ديتا گريد را پر ميكند، به آخر كدهاي حذف ، اصلاح و ايجاد ركورد جديد در فرم اصلي اضافه كني تا هر بار هنگام تغييرات و ويرايش ، ديتا گريد مجددا اپديت شود

pooya1072
جمعه 01 دی 1391, 19:08 عصر
خب يك دكمه براي رفرش شدن اطلاعات بذار

ممنون از حسن توجه شما
لطف کنید بگید کدام قسمت رو باید رفرش کنم , من dataset رو رفرش کردم ... gridview رو رفرش کردم ... فرم رو هم رفرش کردم... ولی جواب نداد. اگه ممکنه دستوری که مد نظرتونه رو بگید .

swallow.pa
جمعه 01 دی 1391, 19:43 عصر
دوست گرامي كدهاي برنامه تون رو بذاريد تا بررسي بشه

pooya1072
شنبه 02 دی 1391, 01:00 صبح
ميتوند كدي را كه در هنگام لود شدن برنامه ديتا گريد را پر ميكند، به آخر كدهاي حذف ، اصلاح و ايجاد ركورد جديد در فرم اصلي اضافه كني تا هر بار هنگام تغييرات و ويرايش ، ديتا گريد مجددا اپديت شود

دوست عزیز...توجه کنید که دو برنامه مجزا از هم هستند و جدا از هم کامپایل و نصب میشن.یکی برنامه اصلیه که حذف و اضاف ها در اون انجام میشه و برنامه دوم فقط جنبه نمایش داره و تغییرات برنامه اصلی رو نشون میده.
اگه به این سوال جواب بدید مشکل من حل شده : " چطور میشه توی برنامه چک کرد که آیا مقادیر دیتابیسی که به برنامه متصله تغییر کرده یا نه ؟ و مخصوصا محتویات جدول اون دیتابیس"

shahryari
شنبه 02 دی 1391, 12:38 عصر
میتونید در فرمی که جنبه نمایشی داره !! یک تایمر بزارید که هر چند ثانیه یک بار دیتا گرید رو fill بکنه
البته برای دیتابیسی که دارای رکوردهای زیادی است ،کار معقولی نیست

pooya1072
شنبه 02 دی 1391, 13:39 عصر
میتونید در فرمی که جنبه نمایشی داره !! یک تایمر بزارید که هر چند ثانیه یک بار دیتا گرید رو fill بکنه
البته برای دیتابیسی که دارای رکوردهای زیادی است ،کار معقولی نیست

حق با شماست....کار معقولی نیست.ولی باید یه راهی براش باشه که فقط در صورت انجام تراکنش عمل fill انجام بشه اونم فقط رکورد های تغییر یافته.

فرید نجفلو
یک شنبه 03 دی 1391, 13:30 عصر
سلام
با اینکه شما می تونید رویداد های تغییر رو از دیتابیس SQL Server به صورت رویداد دریافت کنید (چیزی مثل این (http://barnamenevis.org/showthread.php?332829) یا این جا (http://barnamenevis.org/showthread.php?358390)) ولی به دلایلی من همون تایمر رو پیشنهاد می کنم

معمولا رویداد های دیتابیس قابل اعتماد نیستن یعنی تضمینی ندارید که همیشه رویداد همه تغییرات (و انواع اون) رو دریافت کنید
گاهی برنامه رو به حد کرش یا عدم پاشسگویی (No Response) طولانی میکشه (که اگه از چند نخی هم استفاده کنید دردسر های خودشو داره)
برای این کار همیشه باید حداقل یه کانکشن باز به دیتابیس داشته باشید (کارایی) و اگه این کانکشن به هر دلیل بسته بشه (به جز به وسیله خودتون) مثلا Restart شدن ویندوز یا SQL Server در سمت سرور معمولا هر کز یا خیلی دیر متوجه می شید (بسته به کدتون) که اونم باعث میشه تعدادی یا همه رویداد ها رو از دست بدید

استفاده از تایمر:
استفاده از تایمر به صورتی که دوستمون گفتن رو پیشنهاد می کنم
با گذاشتن کمی وقت بیشتر می تونید این کار رو با کارایی بهتری انجام بدید
من تو آخرین کاری که کردم (بر حسب نیازم) برای اون جداولی که نیاز داشتم از تغییراتشون مطلع بشم (البته با تایمر نبود) یه Triger برای اون جداول نوشتم که به محض سه عمل Insert,Update,Delete (با گزینه After ) در یک جدول کمکی (که برای هر جدول یه رکورد داره) رکورد مورد نظر رو آپدیت می کردم و تاریخ دقیق عملیات رو تو یکی از فیلد های ذخیره می کردم

حالا وقتی اطلاعات رو از جدول می خوندم اون رکورد جدول رو هم می گرفتم و نگه می داشتم
با یه کوری ساده و کم حجم (یه خط یه رکورد) و با مقایسه اون زمانی که الان دست ما هست و اون زمانی که تو دیتابیس هست می شه فهمید که اون جدول تغییراتی داشته یا نه (و بر حسب اون اقدام به رفرش کرد)
با این کار حجم اطلاعاتی که رد بدل میشه و سرعت برنامه شما فوق العاده تغییر می کنه

شاید شما با کمی خلاقیت بیشتر بتونید راه های بهتری هم پیدا کنید ( و ما رو هم بی نسیب نذارید:چشمک:)
---------------------------------------------------------------------------------------------------------------------------------
در ضمن این نوع روش ها (چه رویداد دیتابیس و چه تایمر) برای جاهایی که کاربر آن لاین زیاد دارن مناسب نیست و بهتر عمل رفرش رو به عهده خود کاربر بذارید (مشابه برنامه های تحت وب)