PDA

View Full Version : عدم کارکرد درست locate



behzad2002iran
شنبه 06 آبان 1385, 17:54 عصر
سلام من با استفاده از AdoTable.sort اطلاعات را به صورت نزولی و صعودی مرتب کردم و دست آخر با فرمان locate میخواهم به همان سطری برود که قبل از مرتب سازی انتخاب شده بوده.
شکل کلی دستورات :




procedure TForm5.wwDBGrid1TitleButtonClick(Sender: TObject;
AFieldName: String);
var Nu: integer;
begin
Application.ProcessMessages;
nu := form1.ADOTable2.fieldbyname('IdEmployees').AsInteg er;
Memo1.Lines.Add(inttostr(Nu));
if (AFieldName <> 'RecNu')and(OnMoveColu = false) then
if (form1.ADOTable2.Sort <> '')and (Copy(form1.ADOTable2.Sort,length(form1.ADOTable2. Sort)-2,3)='ASC') then
form1.ADOTable2.Sort := AFieldName + ' DESC' else
form1.ADOTable2.Sort := AFieldName + ' ASC'
else OnMoveColu := false;
form1.ADOTable2.Locate('IdEmployees',nu,[]);
end;

ولی فرمانlocate برای بار اول درست عمل میکنه ولی وقتی کاربر دوبار سطر wwdbgrid را کلیک میکنه بار دوم locate به سطر قبل از مرتب سازی می رود.

2- نظر خودتون را در باره Sort برنامه ام بگید.
3- من از فرمان locate در برنامه ام خیلی استفاه کردم آیا قابل اطمینان است. چون در فرمان بالا حتی وقتی درستی پیدا کردن سطر مرد نظر را ازش میخوام true جواب میده ولی به سطر اشتباهی میره.

soroush_vs
شنبه 06 آبان 1385, 19:17 عصر
از اس کیو ال برای سورت استفاده کنید و قبل از سورت فیلدیکتای ردیف را در یک متغیر ذخیره کنید و بعد از سورت به اون ردیف برید

behzad2002iran
یک شنبه 07 آبان 1385, 16:55 عصر
ببخشید خواشتم مطمتن بشم.
1- برای سورت در SQL باید از ADOQuery استفاده کنم و در قسمت SQL فرمانه را با برنامه نویسی هنگام انتخاب سطر توسط کاربر تغییر دهم.
2- منظور از ( فیلدیکتای ) چیست؟ همان Perimery Key است! و چگونه باید از آن استفاده کنم؟
و پیشاپیش از پاسخ شما متشکرم.

soroush_vs
دوشنبه 08 آبان 1385, 00:52 صبح
حتما لازم نیست فیلد کلیدی باشه شما میتونید ترکیب چند فیل رو که اونها باهم یه مقدار یکتا دارند رو به عنان شاخصی برای شناسایی یک ردیف(رکورد) در نظز بگیرید
مثلا فیلد های نام و نام خانوادگی ونام پدر رو برای مشخص کردن این ردیف در نظز بگیرید

برای مرتب کردن هم ازSQL زیر استفاده میکنید که حتما خودتون بهتر بلدید
SELECT * FROM TABEL_NAME ORDER BY Field_Name