نمایش نتایج 1 تا 11 از 11

نام تاپیک: Row can not be located for updating

  1. #1

    Row can not be located for updating

    این ایراد رو واسه چی میگیره؟
    مشخصات سیستم و برنامه:
    Win XP Service Pack 2
    Delphi 6
    ADO
    یه دیتا ست هم دارم که یه دیتا گرید و یه دیتا لوک آپ کومبو باکس بهش وصلن!

  2. #2
    این خطا موقعی روی میده که روی Dataset عملیات Update یا Delete صورت بگیره.

    فرض کنیم شما یک جدول داشته باشید به اسم Tableبا ساختار زیر:
    1- PrimaryKey
    2- Filed1
    3- Filed2

    اگر شما مقدار Field 1 رو تغییر بدید، ADO کد SQL شبیه به این تولید میکنه:

    UPDATE Table SET Filed1="New Value" WHERE PrimaryKey="Some Value" AND Field1="Previous Value"

    این کد وابسته به مقدار قبلی Field1 هست. اگر قبل از ثبت این تغییرات برنامه یا کاربر و یا کاربران دیگه مقدار این فیلد رو به چیز دیگه ای تغییر بدند (مثلا "Previous Value" رو به "Some other Value" تغییر بدند، دستور العمل بالا نمیتونه رکورد مورد نظر رو پیدا کنه. در نتیجه رکوردی Update یا Delete نمیشه و خطای بالا ظاهر میشه.
    برای جلوگیری از خطای بالا می تونید یکی از دو کار زیر رو انجام بدید:

    1- خاصیت LockType دیتا ست رو به ltPessimistic تغییر بدید. در این صورت رکورد مورد نظر قفل میشه و امکان تغییر در آن توسط کاربران دیگه وجود نخواهد داشت.

    2-
     ADOQuery1.Properties['Update Criteria'].Value := 0; //adCriteriaKey
    ;

    با استفاده از کد بالا، ADO در هنگام update ، رکورد رو فقط از طریق PrimaryKey پیدا میکنه و شرط Field1="Previous Value رو لحاظ نمیکنه. در این حالت فقط در صورتی پیغام خطای بالا داد میشه که PrimaryKey همزمان توسط دو کاربر تغییر داده بشه.

  3. #3
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350
    سلام
    مرسی آقای کشاورز عزیز
    1-به نظر شما کدام دو روش بالای شما بهتر برای بانکهایی به حجم 650 مگابایت به بالا( که هررکورد آن یک عکس 300و یک عکس72 DPI دارد) با حدود 8 تا 10 کاربر مناسب تر است؟

    2-آیا دستور ADOQuery1.Properties['Update Criteria'].Value := 0; //adCriteriaKey را در رویداد AfterOpen جدولهای بانک باید بنویسیم؟
    البته قبلا من برای مشکلی که همزمان دو کاربر یک رکورد را باز می کردند و پیغام خطا می داد من کد زیر را نوشتم که حل شد و حالا این کد شما مشکل قبل را تکرار نمی کند؟
    واین هم کد قبلی من در رویداد AfterOpen جدولها:
    ADOTable1.Active := True;
    ADOTable1.Properties['Update Criteria'].Value := adCriteriaKey;

  4. #4
    -به نظر شما کدام دو روش بالای شما بهتر برای بانکهایی به حجم 650 مگابایت به بالا( که هررکورد آن یک عکس 300و یک عکس72 DPI دارد) با حدود 8 تا 10 کاربر مناسب تر است؟
    بستگی به این داره که کاربران شما چقدر نیاز دارند بر روی رکوردهای مشتر ک کار کنند (یعنی آنها را ویرایش کنند/نه صرفا نمایش رکورد).
    البته می تونید هر دو کار را همزمان هم انجام بدید؛ یعنی هم از LockType = itPessimistic استفاده کنید، هم از Update Criteria.

    البته قبلا من برای مشکلی که همزمان دو کاربر یک رکورد را باز می کردند و پیغام خطا می داد من کد زیر را نوشتم که حل شد و حالا این کد شما مشکل قبل را تکرار نمی کند؟
    این کد هم همون کار را انجام میده و فرقی با اون نداره.
    در ضمن، در رویداد OnAfterOpen یک DataSet نیازی به Active کردن اون نیست، چون این رویداد زمانی فراخوانی میشه که DataSet فعال شده باشه. پس خصوصیت Active همیشه در زمان فراخوانی این رویداد True هست.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  5. #5
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350
    [QUOTE=علی کشاورز;362034]بستگی به این داره که کاربران شما چقدر نیاز دارند بر روی رکوردهای مشتر ک کار کنند (یعنی آنها را ویرایش کنند/نه صرفا نمایش رکورد).
    البته می تونید هر دو کار را همزمان هم انجام بدید؛ یعنی هم از LockType = itPessimistic استفاده کنید، هم از Update Criteria.

    با سلام و تشکر فراوان
    کاربران من از با رکوردهای مشترک خیلی کار ویرایش ندارند و ممکن است نمایش رکوردهای مشترک داشته باشد آنهم نه در حد خیلی زیاد.

  6. #6
    در صورتی که از Update Criteria استفاده کنید، تا زمانی که دو کاربر همزمان فیلد کلید یک رکورد را ویرایش نکنند، مشکلی نخواهید داشت. در صورتی که این اتفاق بیافته، کاربر دوم یک پیغام خطا دریافت می کنه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    1- خاصیت LockType دیتا ست رو به ltPessimistic تغییر بدید. در این صورت رکورد مورد نظر قفل میشه و امکان تغییر در آن توسط کاربران دیگه وجود نخواهد داشت.
    1-دستوری که برای این کار است را چه طور می نویسند؟
    2-آیا عمل قفل شدن رکورد از لحظه ای که Edit تا Postرکورد مورد نظر را قفل می کند یا جور دیگری است؟
    با تشکر

  8. #8
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350
    سلام
    من حالتی را می خواهم که عمل قفل شدن رکورد از لحظه ای که Edit تا Postرکورد مورد نظر را قفل می کند باشد بعد Postرکورد کاربر دیگر بتواند تغییر دهد که روشهای قبل اینکار را نمی کنند.
    من تست کردم حالتی را که کاربر اول درمد Edit رفت و Post نکرد و همان رکورد را کاربر دوم به مد Edit برد و Post کرد و بعد برنامه را به کل بست ولی کاربر اول هنوز امکان تغییر ندارد و این درحالی است کاربر اول باید بتواند ذخیره کند.

  9. #9
    -دستوری که برای این کار است را چه طور می نویسند؟
    فقط خاصیت lockType را تغییر بدید.
    در این حالت، وقتی کاربر رکوردی را Edit می کند، تا زمانی که از حالت Edit خارج نشود (از طریق Cancel کردن تغییرات، یا ذخیره تغییرات)، کاربران دیگه امکان Edit کردن آن رکورد را ندارند.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  10. #10
    کاربر دائمی
    تاریخ عضویت
    آبان 1384
    محل زندگی
    كاشان
    سن
    35
    پست
    315

    نقل قول: Row can not be located for updating

    سلام
    من با دلفی 7کار میکنم.
    بانک اطلاعاتی اکسس 2003
    من بعضی وقتها هنگام post با این خطا مواجه می شم.
    برنامه ی من تک کاربره هستش
    من خاصیت lockType رو هم تغییر دادم ولی بازم فایده ای نداشت.
    میگید چیکار کنم؟

  11. #11

    نقل قول: Row can not be located for updating

    من با دلفی 7کار میکنم.
    بانک اطلاعاتی اکسس 2003
    من بعضی وقتها هنگام post با این خطا مواجه می شم.
    برنامه ی من تک کاربره هستش
    من خاصیت lockType رو هم تغییر دادم ولی بازم فایده ای نداشت.
    میگید چیکار کنم؟
    بررسی کنید که جدول مورد نظر شما حتما فیلد کلید داشته باشه. اگر فیلد کلید دارید، مورد شماره 2 در پست دوم تاپیک را انجام بدید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

تاپیک های مشابه

  1. پیغام Row can not be located for updating. Some values....
    نوشته شده توسط SReza1 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 7
    آخرین پست: یک شنبه 29 آذر 1388, 01:42 صبح
  2. Row cannot be located for updating
    نوشته شده توسط SyntaxCheck در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 6
    آخرین پست: چهارشنبه 24 مهر 1387, 09:00 صبح
  3. خطای... Row can not be located for updating
    نوشته شده توسط ali_abbasi22145 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: یک شنبه 10 تیر 1386, 19:30 عصر
  4. من خودم هم باورم نمی شه بازهم این خطا- row cannot be located
    نوشته شده توسط V60 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 0
    آخرین پست: شنبه 09 تیر 1386, 19:40 عصر
  5. Updating sql server2000
    نوشته شده توسط houtanal در بخش SQL Server
    پاسخ: 2
    آخرین پست: دوشنبه 22 تیر 1383, 08:59 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •