PDA

View Full Version : دستور BookMark به خط مورد نظر نمی رود؟



SYNDROME
یک شنبه 27 خرداد 1386, 19:01 عصر
با سلام
دوستان بنده کد زیر را نوشته ام.


Var
BookMark : TBookmark;
Begin
BookMark := ADO.GetBookmark;
ADO.Active := False;
ADO.Active := True;
ADO.GotoBookmark(BookMark);
End;

در همه موقع کد زیر درست کار می کند.ولی زمانی که فیلد Code(کلید است) تغییر می دهم
به رکورد مورد نظر بر نمی گردد.
ADO بر اساس فیلد Code مرتب شده و فیلد Code من 1 است و در خط اول حالا فیلد را تغییر می دهم و مقدار Code را برابر 10 می گذارم و رکورد مثلاً به خط 10 می رود(چون بر اساس Code مرتب شده است)ADO بر روی رکورد هنوز قرار دارد وی زمانی که تابع بالا را فراخوانی می کنم دیگر به رکورد مورد نظر بر نمی گردد.
فکر می کنم به خاطر این است که فیلد کلید تغییر کرده است.
حالا باید چه کار کنم.

object
دوشنبه 28 خرداد 1386, 02:08 صبح
توصیه میکنم برای هر کلاست یک پراپرتی تعریف کن که نام کلید اصلی اون کلاس رو بیان میکنه
بعد از ذخیره اطلاعات مقدار اون فیلد رو نگهداری کن و بعد از requery روی دیتاستت یک locate بزن
مشکلت رو با بوک مارک حل نمیکنه اما صورت مسئله رو جواب میده

SYNDROME
دوشنبه 28 خرداد 1386, 06:23 صبح
با سلام

توصیه میکنم برای هر کلاست یک پراپرتی تعریف کن که نام کلید اصلی اون کلاس رو بیان میکنه
بعد از ذخیره اطلاعات مقدار اون فیلد رو نگهداری کن و بعد از requery روی دیتاستت یک locate بزن
مشکلت رو با بوک مارک حل نمیکنه اما صورت مسئله رو جواب میده
روشی خوبی را پیشنهاد دادید و این قبلا به ذهن خودمهم رسیده بود.
ولی این دستور در یک جای برنامه استفاده نمی شود و یک تابع است و من در کل قسمتهای برنامه از آن استفاده می کنم.
آیا دوستان راه حل دیگری می توانند پیشنهاد کنند.
هنوز مشکل بنده حل نشده است؟

merced
سه شنبه 29 خرداد 1386, 00:05 صبح
چرا از شماره رکورد استفاده نمی کنی?




var x : Integer ;
begin
x := ADOT.RecNo ;;
ADOT.Requery();
ADOT.RecNo := x ;
end

SYNDROME
سه شنبه 29 خرداد 1386, 15:17 عصر
با سلام

چرا از شماره رکورد استفاده نمی کنی?



var x : Integer ;
begin
x := ADOT.RecNo ;;
ADOT.Requery();
ADOT.RecNo := x ;
end

باتشکر از کمک شما.
ولی بارها در باره این در سایت بحث شده.
ممکن است رکوردی که الان درخط 2 است بعد از Refresh به خط 10 برود.
باز هم مشکل من حل نشد.منتظر نظر دوستان هستم.

ghabil
سه شنبه 29 خرداد 1386, 16:00 عصر
BookMark یک پوینتر هست به محل رکور برای همین هم وقتی ترتیب اطلاعات بهم بخوره ، این اشتباه رو میکنه ، راه حلت نگه داشتن کلید رکوردی که روش هستی و دوباره Locate کردن هست که فکر کنم قبلا هم بهت پیشنهاد دادند دوستان، همونطوری هم که خودت گفتی استفاده از RecNo درست نیست.

SYNDROME
سه شنبه 29 خرداد 1386, 18:55 عصر
با سلام
با تشکر از همه دوستان که پیشنهادات خود را در اختیار بنده گذاشتند.
بس بهتر است بگوییم اگر از Locate به جای BookMark استفاده کنیم بهتر است و میزان اشتباه کمتر.
علیرضا جان دست شما هم درد نکنه.