PDA

View Full Version : من از ado , sql استفاده می کنم و مشکل زیر را دارم:



prog_2005
دوشنبه 18 مهر 1384, 09:28 صبح
من از ado , sql استفاده می کنم و مشکل زیر را دارم:
Row can not be located for updating.some values may have been changed since it was last read
وقتی چند تا کاربر به طور همزمان می خوان یک رکورد جدید را ذخیره کنند این پیغام میاد چه کار کنم که این پیغام رو نده

باتشکر

m-khorsandi
دوشنبه 18 مهر 1384, 11:41 صبح
درود
دوست عزیز،
قبل از اینکه ADODataSet رو فعال کنی این کد رو بنویس:


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


یونیت ADOInt رو هم Use کنید.

Touska
دوشنبه 18 مهر 1384, 12:22 عصر
یک توضیح هم بدید. چرا؟

m-khorsandi
دوشنبه 18 مهر 1384, 13:09 عصر
صبر کنید دوستمون امتحان کنند اگه مشکل حل شد، توضیح میدم.

Touska
دوشنبه 18 مهر 1384, 13:18 عصر
چرا مشکلش حل شد شما بفرما.

m-khorsandi
دوشنبه 18 مهر 1384, 13:47 عصر
سه تا پست بالاتر شما همین موضوع رو مطرح کردید و من هم جوابتون رو دادم،
صبر داشته باشید.

سید مسعود موحد
دوشنبه 18 مهر 1384, 14:12 عصر
دوست عزیز من کار شما را انجام دادم اما با خطای زیر روبرو شدم

Access violation at address 00520AD1 in module 'SchollAccess.exe' ,read of adress 00000000

m-khorsandi
دوشنبه 18 مهر 1384, 15:33 عصر
عذر میخوام،
بعد از فعال کردن جدول میبایست کد رو بگذارید:


ADOTable1.Active := True;
ADOTable1.Properties['Update Criteria'].Value := adCriteriaKey;

سید مسعود موحد
دوشنبه 18 مهر 1384, 15:42 عصر
بابا ایول دمت گرم
حالا اگر ممکنه یکم هم توضیح بدهید که چکار میکند این دستور شما البته من بانک اطلاعاتیم Access‌ بود و اصلا هم کاری به شبکه نداشتم و کاملا تک کاربره کار میکردم .

m-khorsandi
دوشنبه 18 مهر 1384, 15:59 عصر
زمانی که از Cursor های ClientSide برای ویرایش اطلاعات توسط ADO استفاده میکنیم، ADO میبایست
که بتونه رکورد مورد نظر رو برای ویرایش در DataBase پیدا کنه.برای انجام این کار ADO به صورت پیش فرض
از مقدار اصلی تمام فیلدها جهت جستجو و مطابقت رکورد مورد نظر استفاده میکنه. اگر حتی یکی از این
فیلدها روی Server تغییر کند، ADO رکورد مورد نظر رو پیدا نمیکنه، در نتیجه پیغامی مبنی بر اینکه رکوردی را
برای Update پیدا نمیکنه نمایش میده.

برای نمونه(همان طور که دوستمون گفتند، زمانی که چند کاربر یک رکورد را ویرایش میکنند) میتونید یک برنامه
کوچک بنویسید که یکی ازفیلدهای اولین رکورد اون رو میخواهیم تغییر بدیم، با اطمینان از اینکه جدول مورد نظر
فعال هست برنامه را اجرا کنید . SQL Server را هم اجرا کنید و جدول مورد نظر را برای ویرایش باز کنید و یکی
از فیلدهای رکورد اول را تغییر بدید ، دکمه Run را فشار دهید. همین کار را برای برنامه ای که نوشتید انجام
دهید، ولی به محض اینکه خط ADODataSet.Post اجرا بشه پیغام خطایی دریافت میکنید.

به صورت پیش فرض مقدار Update Criteria"" برابر با adCriteriaUpdCols هست که با تغییر اون به
adCriteriaKey، ADO فقط کلید اصلی را برای Update جدول در نظر میگیرد.

سید مسعود موحد
دوشنبه 18 مهر 1384, 16:04 عصر
آقای واقعا ممنون استفاده کردیم

prog_2005
چهارشنبه 20 مهر 1384, 09:26 صبح
سلام
از راهنمایی شما ممنون این کدی که شما گفتید فقط یک بار اونم بعد از فعال کردن جدول باید نوشته شود یا جای دیگری هم باید نوشت چون وقتی ویرایش مکنم دوباره خطا میدهد ولی برای ذخیره کردن درست شد.
و1سوال دیگه من توی برنامه ام اصلا از adodtasetاستفاده نکردم اگر استفاده کنم کارایی بالا می رود.
با تشکر

m-khorsandi
چهارشنبه 20 مهر 1384, 11:10 صبح
سئوال اول رو متوجه نشدم! ممنون میشم اگه بیشتر توضیح بدید.
در مورد سئوال دوم هم ،من ADODataSet رو کلی گفتم شما میتونید از ADODataSet یا ADOStoredProc یا ADOTable
استفاده کنید.

vcldeveloper
پنج شنبه 21 مهر 1384, 05:03 صبح
این کدی که شما گفتید فقط یک بار اونم بعد از فعال کردن جدول باید نوشته شود یا جای دیگری هم باید نوشت.
فقط یکبار بنویسید کافیه.

وقتی ویرایش مکنم دوباره خطا میدهد ولی برای ذخیره کردن درست شد
آیا جدول شما یک فیلد ID منحصر به فرد داره؟

سید مسعود موحد
پنج شنبه 21 مهر 1384, 10:44 صبح
دوستان
راهنمایی دوست عزیزمون کاملا جواب میدهد من که به مشکلی بر نخوردم

hamed322
پنج شنبه 14 شهریور 1387, 06:01 صبح
سلام
من در برنامه ام با این خطا مواجه می شوم، اگر کسی بتونه مشکل من را حل کنه ممنون می شم.
http://rayaneh614.persiangig.ir/1.bmp

hamed322
پنج شنبه 14 شهریور 1387, 06:17 صبح
سلام مجدد
توضیحات :
من یک پنجره برای جستجو دارم که پس از یافتن نام یا شماره مورد نظر آن ها را جهت ویرایش به یک فرم دیگ می فرستد(بدون مشکل) ،در این فرم یک دگمه به نام ثبت تغییرات دارم که پس از کلیک بر روی آن با خطای بالا روبرو میشوم. (در دلفی 2007)
متشکرم

delphiprog3000
پنج شنبه 14 شهریور 1387, 11:31 صبح
سلام مجدد
توضیحات :
من یک پنجره برای جستجو دارم که پس از یافتن نام یا شماره مورد نظر آن ها را جهت ویرایش به یک فرم دیگ می فرستد(بدون مشکل) ،در این فرم یک دگمه به نام ثبت تغییرات دارم که پس از کلیک بر روی آن با خطای بالا روبرو میشوم. (در دلفی 2007)
متشکرم

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

کلیدی که تعریف کردید به چه صورت برای چه فیلدی تعریف کردید؟

موفق باشید........

hamed322
جمعه 15 شهریور 1387, 16:11 عصر
سلام
فیلد کلید من Shomareh_name میباشد و به صورت Text تعریف کردم.

delphiprog3000
شنبه 16 شهریور 1387, 11:48 صبح
سلام
فیلد کلید من Shomareh_name میباشد و به صورت Text تعریف کردم.

با سلام.

دوست من ویرایش خود را با دستور Update انجام میدهید. یا با edit کوری؟

hamed322
چهارشنبه 20 شهریور 1387, 10:41 صبح
سلام
delphiprog3000 مشکل حل شد، من در فرم اول پس از جستجو جدولم را می بستم و در فرم دوم که برای ثبت تغییرات بود یک جدول دیگر باز می کردم (بی دقتی بود دیگه!)