PDA

View Full Version : نمایش 100 رکورد آخر جدول در گرید



khazaie01
چهارشنبه 09 اردیبهشت 1388, 08:20 صبح
سلام دوستان من میخوام فقط 100 رکورد آخر جدول را در گرید نمایش بدم . نمیخوام جدول را فیلتر کنم چون به همه ی داده ها نیاز دارم ولی میخوام تو گرید فقط 100 تای آخر دیده بشه

khorsandreza
پنج شنبه 10 اردیبهشت 1388, 21:35 عصر
select PKID,Name,famli from [Tb Name ] order by pkid rows 100

khorsandreza
پنج شنبه 10 اردیبهشت 1388, 21:39 عصر
بهتر که موقع ایجاد جدول فیلدی تعریف کنی که از نوع عدد و شمارش خودکار auto incremnt باشه بعد دستور بالا را که انجام میدی ترتیب جدول را صغودی یا نزولی کنی و با استفاده از کلید Rows هر تعداد سطر را بخواهی انتخاب کن

khazaie01
جمعه 11 اردیبهشت 1388, 07:18 صبح
ممنون ولی من به تمام رکوردها احتیاج دارم. میخواستم بدونم میشه کاری کرد که گرید فقط 100 رکورد را نشان بده ؟ البته TMS Grid دارم....

as13851365
جمعه 11 اردیبهشت 1388, 07:26 صبح
ببخشید ها ولی می شه دقیقا یگید که منظور شما از این که هی می گید تمام رکوردها رو می خوام ولی می خوام 100 تای آخر رو نشون بده چی است ؟


با کدی که دوستان در پست 2 قرار دادن کارت راه می افته یعنی همان 100 رکورد آخر بانک رو برات در DBGrid نشان می ده حالا شما دنبال چی هستید اگه واضحتر بگید خیلی راحت می شه راهنمایی کرد

khazaie01
جمعه 11 اردیبهشت 1388, 08:48 صبح
تو این کد PKID چیه ؟ فیلد؟ یا کلمه کلیدی ؟ ROWS چی فیلد ؟

shervin farzin
جمعه 11 اردیبهشت 1388, 13:17 عصر
سلام
اونچه كه مسلمه اينه كه شما بايد يك فيلد از نوع AutoIncrease داشته باشيد تا بشه به كمكش
ترتيب ركوردها رو معكوس كرد و 100 ركورد آخر رو بدست آورد . پس فرض ميكنيم كه جدول شما
يك فيلد به نام ID داره كه از نوع AutoIncrease هست .
وقتي شما يك كد SQL رو از داخل برنامه اجراء ميكنيد ، نتيجه كد به طور مستقيم وارد DBGrid
نميشه ، بلكه خروجي كد SQL شما وارد Dataset ميشه و DBGrid اطلاعات رو از درون Dataset
بدست مياره ، پس براي اين كه 100 ركورد آخر جدول رو در DBGrid ببينيد بايد دستوري به شكل
زير داشته باشيد :

select top 100 * from test order by id desc
در كد بالا ID همون فيلد Autoincrease هست كه عرض كردم ، كلمه كليد DESC ترتيب خروجي
Select رو بر اساس ID به طور نزولي مرتب ميكنه كه در نتيجه TOP 100 در واقع 100 ركورد آخر
جدول خواهند شد .
اما نكته اي كه در مورد Dataset شما بايد بدونيد چون كليد حل مشكل شماست ، اينه كه هر
Dataset از بخشهاي كوچكتري به نام RecordSet تشكيل شده كه خروجي SQL در واقع وارد
اين بخشها ميشه و به طور پيش فرض DBGrid اطلاعات رو از RecordSet با انديس 0 ميخونه .
پس اگر شما مايليد كه هم به 100 ركورد آخر در برنامتون دسترسي داشته باشيد و همزمان
بتونيد پردازشي رو روي تمام ركوردهاي جدولتون انجام بديد بايد بر خلاف هميشه اين بار
RecordSet با انديس 1 رو هم پر كنيد . براي رسيدن به اين هدف ابتدا بايد يك كمپوننت ADODataset هم روي فرمتون قرار بديد ، بعد كد زير رو بنويسيد :

var
i:integer;
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select top 100 * from Table_Name order by id desc');
SQL.Add('select * from Table_Name');
Active := True;
end;
i:=0;
ADODataSet1.Recordset := ADOQuery1.NextRecordset(i);

همونطور كه ملاحظه ميكنيد 2 دستور SQL توسط ADOQuery اجراء شده كه خروجي دستور اول
وارد RecordSet با انديس 0 ميشه و خروجي دستور دوم وارد RecordSet با انديس 1 ميشه .
در خط آخر ، من خروجي دستور SQL دوم رو ( كه باعث بازگشت تمام ركوردهاي جدول ميشه )
وارد ADODataSet كردم تا به طور جداگانه بهش دسترسي داشته باشيد . پس به اين ترتيب
100 ركورد آخر كه بايد در DBGrid نمايش داده بشه درون ADOQuery هست و تمام ركورد هاي
جدول در ADODatset قرار ميگيره .
كار كردن با داده هاي داخل ADODataSet مثل ADOQuery هست . به عنوان مثال :

while not ADODataSet1.Eof do
begin
ShowMessage(ADODataSet1.FieldByName('id').AsString );
ADODataSet1.Next;
end;

توجه داشته باشيد كه با اضافه كردن ADODataSet نيازي نيست ترتيب اتصال ساير كامپوننت هاي
فرمتون يا DataModule رو تغيير بديد ، يعني DBGrid به مثلا DataSource و DataSource به ADOQuery و ADOQuery به ADOConnection متصل باقي ميمونه .
موفق باشيد .

khazaie01
شنبه 12 اردیبهشت 1388, 17:06 عصر
خیلی خیلی ممنون لطف کردید من از top استفاده میکردم ولی این نکته آخرتون را نمیدونستم مرسی

khorsandreza
جمعه 15 خرداد 1388, 03:09 صبح
تو این کد PKID چیه ؟ فیلد؟ یا کلمه کلیدی ؟ ROWS چی فیلد ؟

البته ببخشید که دیر جواب میدم باید متوجه این موضوع شوید که دستورات interbase کمی از دستورات sql server فرق دارد فرض شما برای نشان دادن 10 رکورد اول

select top 100 * from test order by id desc

در حالی که در InterBase باید از دستور زیر استفاده کنید

Select * From [TBNAME] Rows 10