PDA

View Full Version : سوال: تغییر مقدار فیلد در dbgrid بدون تغییر در جدول



hyl_piano
چهارشنبه 25 دی 1387, 15:30 عصر
سلام
من یک فیلد بنام active از نوع char دارم که ممکنه داخلش مقدار 0 و 1 تا ... 9 ، باشه.
حالا میخواستم که بدون دستکاری در جدول ، مثلا بجای مقدار 8 در dbgrid حرف A نمایش داده بشه.
میخواستم بدونم که چجوری میشه روی نمایش اطلاعات در dbgrid ، شرط گذاشت.
خیلی از تاپیک ها رو گشتم اما چیزی پیدا نکردم. اگه جوابمو واضح بدین خیلی متشکرم.

shervin farzin
چهارشنبه 25 دی 1387, 20:21 عصر
سلام
براي اين كار دو راه هست دوست من . اول اين كه توي DataBase برنامت يه جدول پايه درست
كني و مقداري 1 تا 9 رو به همراه معانيشون درون اون جدول پايه بذاري بعد توي برنامت جداول
اوليه رو با اين جدول پايه Join كني .
راه دوم اينه كه از يك CaclField استفاده كني ، براي استفاده از CalcField بايد به ترتيبي كه در
مثال زير شرح ميدم عمل كني :
1 - يك AdoQuery به فرمت يا به DataModule اضافه كن ( اختياري ) .
2 - در محيط دلفي ، كد Sql كه اطلاعات رو از جدولت برميگردونه رو در SQL Property از Adoquery بنويس و مقدار Active رو True كن .
3 - روي Adoquery جديد دابل كليك كن ، بعد روي فرم باز شده راست كليك كن و گزينه Add All Fields رو انتخاب كن .
4 - بعد دوباره روي همون فرم راست كليك كن و اين بار گزينه New Field رو انخاب كن .
5 - در پنجره باز شده ، در بخش Name يه نام دلخواه بنويس مثلا Test ( بعدا اين فيلد رو همين نام صدا ميكنيم ) .
در بخش Type نوع فيلد رو مشخص كن ، مثلا String .
در قسمت Field Type مقدار Calculated رو انتخاب كن .
دكمه Ok رو بزن . مي بيني كه در ليست فيلدها نام فيلدي به اسم Test اضافه شده .
6 - توي Event هاي مربوط به Adoquery ، موردي به نام OnCalcFields رو با دابل كليك انتخاب كن .
7 - با توجه به سوال شما در بدنه تابع يه كدي مشابه كد زير بايد بنويسي :

case Strtoint( ADOQuery1Active.Value ) of
0:ADOQuery1test.Value:='A';
1:ADOQuery1test.Value:='B';
2:ADOQuery1test.Value:='C';
3:ADOQuery1test.Value:='D';
4:ADOQuery1test.Value:='E';
5:ADOQuery1test.Value:='F';
6:ADOQuery1test.Value:='G';
7:ADOQuery1test.Value:='H';
8:ADOQuery1test.Value:='I';
9:ADOQuery1test.Value:='J';
end;

8 - نتيجه كار رو بدون اجراء كردن برنامه در DBGrid ميتوني ببيني .
فيلدهايي رو كه نميخواي كاربر در DBGrid ببينه ، فقط از طريق خود Grid حذف كن .
9 - در آخر اون كد Sql كه روي Adoquery نوشته بودي رو ميتوني پاك كني .

موفق باشيد .

hyl_piano
پنج شنبه 26 دی 1387, 07:29 صبح
میخواستم بدونم که راهی هست واسه اینکه بشه اصلن بجای اینکه فیلد جدید بسازیم، بشه از داخل خود dbgrid فرمانی نوشت که بشه مقادیر را بصورت فقط نمایشی ، چیزه
دیگه ای نشون داد؟
فیلد ساختن راهی هست که همه استفاده میکنن. اگه رکوردهای واکشی شده زیاد باشد یا اینکه مثلا برنامه تحت وب باشه یا شبکه، وقت زیادی طلف میشه.
1 راهی پیشنهاد بدین که فرمان روی dbgrid اجرا بشه .
مرسی

vcldeveloper
پنج شنبه 26 دی 1387, 12:25 عصر
حالا میخواستم که بدون دستکاری در جدول ، مثلا بجای مقدار 8 در dbgrid حرف A نمایش داده بشه.
1- ایجاد فیلد Lookup.
2- استفاده از رویدادها OnGetText و OnSetText فیلد مربوطه.
3- استفاده از سایر کامپوننت های گرید که این امکان را بطور پیش فرض فراهم می کنند، مثل EhLib.
4- نوشتن تابع در سمت سرور بانک اطلاعاتی که مقدار فیلد مورد نظر را دریافت کنه، مقدار حرفی مورد نظر را برگشت بده، و استفاده از آن تابع در کوئری (نیازمند آن هست که موتور بانک اطلاعاتی همچین قابلیتی را پشتیبانی کند، مثل MS SQL Server).

تمام این راهها در تاپیک های مختلفی بحث شدند.

موفق باشید