View Full Version : مشکل با Refresh در client dataset
delphiprog3000
جمعه 02 آذر 1386, 19:56 عصر
سلام خدمت دوستان واساتید سایت برنامه نویس.
برنامه ای با (Midas(Datasnap ساختم. که در آن از Dbgrid برای نمایش اطلاعات استفاده کردم.
شیء ارتباطی من با لایه میانی (Client dataset) است.
هنگامی که تغییراتی در (Dbgrid) انجام میدم مثل (Edit) , (Delete) خطا ایجاد میشه این متن خطا
"Must Apply updates Before refreshing data"
واینم کد من
Datamodule1.Clientdataset1.edit;
Datamodule1.Clientdataset1.applyupdates(-1);
Datamodule1.Clientdataset1.Refresh;
خوب دوستان کسی میتونه راهنمای کنه...؟
با تشکر بابک
dkhatibi
شنبه 03 آذر 1386, 05:53 صبح
Datamodule1.Clientdataset1.applyupdates(0);
delphiprog3000
شنبه 03 آذر 1386, 21:57 عصر
سلام دوست عزیز .
کد شما رو تست کردم.ولی جواب نداد.
دوستان عزیز راه دیگه ای ندارید به من پیشنهاد بدید یا اینکه مشکل منو برام توضیح بدین.
با تشکر
JAFO_IRAN
یک شنبه 04 آذر 1386, 19:22 عصر
با سلام
در client dataset به صورت عادی خطاها گزارش نمیشوند. همان کدی که ابتدا نوشته بودید، یعنی apply updates با پارامتر منهای یک هم باید کار میکرد. اگر در زمان refresh هنوز داده update نشده باقی مانده به این معنی است که عمل اعمال تغییرات انجام نشده و خطا داشته.
برای مشخص شدن خطا (یا اینکه اصلا خطایی بوده یا نه) باید رخداد OnReconcile... رو بنویسید.
delphiprog3000
یک شنبه 04 آذر 1386, 21:55 عصر
سلام دوست عزیز. حرف شما صحیح وقتی تغییراتی انجام میشود.در دیتابیس اعمال نمیشود.
خوب چه کاری باید انجام داد.
کد من هم در بالا شاید اشکالی داشته باشه.
ولی اکه ممکنه راهنمایی کنید که این مشکل حل شه یا یه مثال بزنید.
درباره Reoncile هم اگه کاملتر توضیح بدین ممنوع میشم.
با تشکر
JAFO_IRAN
دوشنبه 05 آذر 1386, 18:13 عصر
سلام
هر client dataset دارای یک رخداد به نام OnReconcileError هست که تا نوشته نشه، خطاها را گزارش نمیده. یک پارامتر E داره که یک Exception کامله. ساده ترین راه اینه که این event رو بنویسید و E را داخل اون بررسی (یا گزارش) کنید. مثلا E.Message را نشون بدید.
ارادت - امیدوارم مفید باشه
delphiprog3000
سه شنبه 06 آذر 1386, 09:40 صبح
سلام.
من این کارو انجام دادم.در رویداد OnReconcileError این کد رو وارد کردم.
ShowMessage(E.Message);
و این پیغام رو داد.
'Record Not Found Or Changed By Another User'
ایتجوری که این پیغام میگه(هیچ تغییراتی اعمال نشده)
از
Action := HandleReconcileError(DataSet, UpdateKind, E);
هم استفاده کردم در سایت هم جستجو کردم مطالب مفید بود.ولی به کار من نیومد.ولی بازم تلاش خودمو میکنم تا مطالب مفید در اختیار دوستان بزارم.
ممنون میشم اگه مشکل من رو دوستان و اساتید سایت حل کنن.
با تشکر(بابک)
JAFO_IRAN
سه شنبه 06 آذر 1386, 17:16 عصر
سلام
خوب معلوم شد مشکل کجاست دیگه. اون updateهایی که در clientdataset بودند به دلیل همین حطا اعمال نشدهاند. همینطوری حسی، پیشنهاد میکنم:
1- تمام فیلدها رو هم در سمت provider و هم در clientdataset به صورت permanent دربیاری
2- provider option رو برای فیلدها دقیقا بررسی کنید - فیلدهایی که باید در where بیان و به خصوص فیلد Key رو مشخص کنید
فکر کنم اشکال در whereهای زیادی یا در عدم وجود کلید باشه - ولی این فقط یک پاسخ حسیه. خود دلفی یک دموی خیلی خوب در این مورد داره - البته اون موقعها داشت - دلفی 7 - در مورد این جور کارها وقتی دموها را بررسی میکنی یادت باشه که کلی از تنظیمات در dfm انجام شده اند و لزوما از متن پاسکال مورد توجه قرار نمیگیرند
ارادت - امیدوارم مفید باشه
delphiprog3000
چهارشنبه 07 آذر 1386, 12:54 عصر
سلام.
حدس شما درست بود دوست عزیز. اشکال کار از سمت Provider بود. در صورتی که من فیلد کلید رو تعریف کرده بودم برای جدول ولی تنظیمات خاصیت UpdateMode در Provider رو میبایست به حالت Up where key only در بیارم.
پس نتیجه اینکه اشکال کار از سمت لایه میانی و از Provider بود. که با کمک شما حل شد.
با تشکر از شما (بابک)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.