PDA

View Full Version : استفاده از ردیف در هنگام فیلتر گیری



دنیای دلفی
شنبه 31 مرداد 1383, 14:07 عصر
همانطور که اطلاع دارید برای بدست آوردن ردیف در Dbgrid ما یک فیلد محاسباتی برای Table ایجاد می کنیم و در بخش OncalcField کد Dataset['radif'].RecNO; را قرار می دهیم ولی وقتی من از جدول به وسیله Table.filter فیلتر گیری می کنم رکوردهایی که نمایش داده می شوند دارای ردیف درست نمی باشند و سیستم نمی تواند آنها را ترتیب نمایش دهد آیا راه حلی برای این مشکل دارید اگر هست ممنون میشم راهنمایی کنید .

:oops: :oops:

دنیای دلفی
شنبه 31 مرداد 1383, 16:01 عصر
بابا ما را نیز دریابید .

:تشویق: :تشویق: :gift: :flower:

Mohammad S
یک شنبه 01 شهریور 1383, 00:24 صبح
این سوال رو من هم در مورد جداول DBISAM پرسیدم ولی کسی جواب نداد.
مشکل مربوط به خود شی Table هست چون ClientDataSet این مشکلو نداره. :|

مهدی کرامتی
یک شنبه 01 شهریور 1383, 01:09 صبح
اگر شما یک فیلد AutoInc بصورت PK در نظر بگیرید میتوانید از شماره آن بعنوان شماره رکورد استفاده کنید. در این صورت شماره رکوردها هنگام فیلتر کردن ثابت خواهد ماند.

Mohammad S
یک شنبه 01 شهریور 1383, 01:26 صبح
خوب مشکل اینجاست که نمی خوام شماره ثابت داشته باشه. یعنی با فیلترگیری، شماره ردیف هم عوض بشه چون مثلا پس از فیلترگیری، 3 ردیف بیشتر نیست ولی شماره ردیف ها، مثلا 9 و 11 و 20 هست. :roll:

مهندس
یک شنبه 01 شهریور 1383, 01:53 صبح
سلام

آقا ما نفهمیدیم :( یعنی میخواین بعد از فیلتر گیری شماره ردیف 1 الی آخر بزنه ؟ :idea:

دنیای دلفی
یک شنبه 01 شهریور 1383, 10:30 صبح
هدف این است که پس از فیلتر گیری شماره ردیف ها درست باشد یعنی اگر در فیلتر گیری 15 رکورد نمایش داده شود شماره ردیفها از 1 2 3 و الی 15 باشند .
ممنون می شوم اگر راهنمایی کنید
:تشویق: :تشویق: :تشویق: :gift: :flower:

Mohammad S
یک شنبه 01 شهریور 1383, 12:24 عصر
همون که گفتم، Table مشکل داره ولی ClientDataSet نه. ضمنا کامپوننت SDAC که برای اتصال به SQLServer هست هم یک شی Table‌داره که اون هم مشکل نداره.

دنیای دلفی
یک شنبه 01 شهریور 1383, 15:13 عصر
آخه مشکل من این هست که دارم از DBISAM 4.08 استفاده می کنم و باید یک جوری مشکل ردیف را پس از
فیلتر گیری رفع کنم (حتما باید راهی باشه مگر ممکنه نباشه)

:تشویق: :gift: :flower:

Mohammad S
دوشنبه 02 شهریور 1383, 04:22 صبح
یعنی ورژن 4.08 هم همین مشکل رو داره؟ :?
یک راه (البته امتحان نکردم که همیشه درست کار کنه) اینه که Table در DBISAM را به ClientDataSet که مشکلی نداره متصل کنی و در واقع اونو فیلتر کنی.

دنیای دلفی
دوشنبه 02 شهریور 1383, 14:08 عصر
یک راه (البته امتحان نکردم که همیشه درست کار کنه) اینه که Table در DBISAM را به ClientDataSet که مشکلی نداره متصل کنی و در واقع اونو فیلتر کنی.

دوست عزیز ممنون از راهنمایی شما
مشکل ردیف حل می شود اما وقتی Table مربوط به DBISAM را رکورد اضافه می‌کنم به ClientDataSet1 رکورد مربوطه اضافه نمی شود برای حل این مشکل چکاری می توان کرد .
ممنون اگر راهنمایی کنید .

:gift: :flower:

_alish_
دوشنبه 02 شهریور 1383, 14:58 عصر
ّدستور FlashBuffers را امتحان کردی

دنیای دلفی
دوشنبه 02 شهریور 1383, 16:48 عصر
ّ
دستور FlashBuffers را امتحان کردی

امتحان کردم ولی متاسفانه جواب نمی دهد .

:?:

Mohammad S
سه شنبه 03 شهریور 1383, 02:19 صبح
فکر کنم دستور ApplyUpdates(0) جواب بده یا Refresh البته هر دو برای ClientDataSet

دنیای دلفی
سه شنبه 03 شهریور 1383, 14:44 عصر
فکر کنم دستور ApplyUpdates(0) جواب بده یا Refresh البته هر دو برای ClientDataSet

دوست عزیز و گرامی برای کد

ClientDataSet1.Refresh;

خطای زیر را می دهد :


ClientDataSet1: Missing Data Provider or Data Packet


و برای کد :

ClientDataSet1.ApplyUpdates(0);

خطا نمی دهد ولی هیچ تاثیری بر روی رکوردها ندارد یعنی رکوردها زیاد تر نمی شوند.

ممنون می شوم اگر روش صحیح را راهنمایی کنید .
:gift: :flower: :| :?:

_alish_
سه شنبه 03 شهریور 1383, 15:01 عصر
داداش اگر فقط برای نمایش، DGrid را می خواهی از Query استفاده کن و خیال خودت را راحت کن ولی خیلی عجیب است رکوردها ذخیره شوند و با این دستوراتی که گفته شده بروز نشود
اگر هم نتونستی با یک For خودت عمل OnCalc را انجام بده مگر خودش همین کار را نمی کنه
خدا پدر طراح و نویسنده Ado را بیامرزه که ما را از این دردسرها راحت کرده :lol:

Mohammad S
چهارشنبه 04 شهریور 1383, 01:13 صبح
جناب (دنیای دلفی) مطمئن باشید دچار اشتباه شده اید.
کدی که من اینجا می نویسم را اجرا کنید.
فرض بر این است که جدول دارای دو فیلد ID از نوع AutoInc و Name از نوع String می باشد. برای اضافه کردن یک رکورد:


DBISAMTable1.Append;
DBISAMTable1['Name']:=Edit1.Text;
DBISAMTable1['ID']:=DBISAMTable1.LastAutoIncValue+ 1;
DBISAMTable1.Append;

ClientDataSet1.Refresh;

و کارهای دیگری که باید انجام دهید:
DataSource1 را به ClientDataSet1 متصل کنید.
ClientDataSet1 را به DataSetProvider1 متصل کنید از طریق ProviderName.
DataSetProvider1 را به DBISAMTable1 متصل کنید
و اگر خواستید، DBISAMTable1 را به DBISAMDatabase1 متصل کنید.

حالا برنامه رو تست کنید و نتیجه رو به من اطلاع بدید.

موفق باشید :)