PDA

View Full Version : ویرایش چداول Join شده



dkhatibi
جمعه 14 دی 1386, 12:27 عصر
چند جدول را با هم Join کرده ایم. کوئری نتیجه که در یک DbGrid به نمایش در می آد حاوی چند فیلد است که باید کاربر اونا رو ویرایش کند. اما موقع ذخیره شدن پیام خطای زیر که طبیعی هم هست می ده.


Project Project1.exe raised exception class EOleException with message 'Row cannot be located for updating. Some values may have been changed since it was last read'. Process stopped. Use Step or Run to continue.

چه جوری می شه این گرید را پیمایش کرد و فیلدهای موردنظر را ویرایش نمود تا نتایج در جدول مورد نظر قرار گیرند.

SYNDROME
جمعه 14 دی 1386, 13:47 عصر
در زمانی که در Query شما جداول با هم Join شده است شما باید مشخص کنید تغغیرات را در کدام جدول می خواهید انجام دهید.
برای این کار از دستور زیر استفاده کنید.


ADO.Properties['Unique Table'].Value := 'Table1';

دقت کنید کلیه عملیات Insert و Delete و Edit روی جدول Table1 انجام می شود.
موفق باشید

dkhatibi
جمعه 14 دی 1386, 16:32 عصر
dm.MyQuery.Properties['Unique Table'].Value := MyTable
بازهم همان خطا.
MyTable نام جدولی است که در ک.ئری مد نظر می باشد.
'Unique Table' هم باید تکرار شدو نه!
ولی خطا می ده

SYNDROME
جمعه 14 دی 1386, 20:03 عصر
دستور زیر را هم قبل از دستور بالا اضافه کن.


ADO.Properties['Update Criteria'].Value := adCriteriaKey;

موفق باشید

dkhatibi
شنبه 13 بهمن 1386, 20:45 عصر
با سلام
مشکل دیگه ای که هست اینه که جدول من right outer join شده لذا جدولی که در حال درج اطلاعات است ممکنه رکوردی از قبل براش ثبت نشده باشه.
لذا دوباره همو پپیام خطا رو می ده در حالیکه اگر رکورد ثبت شده باشه و در حال ویرایش باشم مشکلی نیست.

champion
شنبه 13 بهمن 1386, 23:57 عصر
قائدتا ado طبق چیزی که توی مستندات دلفی نوشته شده خودش تشخیص میده که کدام جدول باید Update بشه اگه ممکن Query رو کامل بنویس

dkhatibi
یک شنبه 14 بهمن 1386, 09:26 صبح
مشکل از اینه که رکوردی تو اون جدول معرفی شده وجود نداره. برای Edit کردن مشکلی نیست. یعنی اگر قبلا رکورد وارد شده باشه و قصد ویرایش داریم مشکلی نداریم.
اما اگر رکورد وجود نداشته باشه باید ابتدا Insert انجام بشه که نمی شه. چون جدول در مد ویرایشه!
این اتفاق در Outer Join پیش می آد.

zman123456
یک شنبه 14 بهمن 1386, 14:09 عصر
چرا با یه کوئری جداگانه این کار رو انجام نمیدی؟

dkhatibi
یک شنبه 14 بهمن 1386, 14:55 عصر
چون باید داده های زیادی به ترتیب برای اسامی خاصی پشت سر هم برای راحتی انجام بشه. (تو همون dbgrid) در صورتیکه بخوام Insert کنم و داده ها در جدول از قبل Join شده نمایش بدم باید Requery کنم که زمان بره و سرعت پایینی داره(فعلا از این روش استفاده کرده ام)