ورود

View Full Version : سوال: عوض شدن مقدار یک فیلد هنگام چاپ



hsn_abieteh
سه شنبه 16 شهریور 1389, 22:01 عصر
سلام
دوستان عزیز سوالی دارم در مورد fast report
بنده یک جدول دارم که یکی از فیلدهای آن با مقدار 0 و 1 مقداردهی شده
حالا می خوام موقعی که این فیلد رو برای چاپ نمایش داده میشه اگر مقدار فیلد صفر بود داخل صفحه ی گزارشم نامش بشه حق التدریس
یا اگه مقدارش 1 بود در صفحه ی چاپ هیئت علمی نوشته بشه

در اصل می خوام بدونم تو frxReport1BeforePrint مربوط به frxreport چه کدی بنویسم
منظورم یک همچین چیزیه...



if IntToStr(ADOQuery1.fieldvalues['statusteach'])='1' then
ADOQuery1.FieldValues['statusteach']:='هيئت علمي'

frxreport1.showreport;

من زیاد آشنا نیستم ممنون میشم کمکم کنید:ناراحت:

hamid-nic
چهارشنبه 17 شهریور 1389, 01:38 صبح
سلام
می توانید از فیلدهای محاسباتی استفاده کنید تا دیگر نیاز به کد نویسی در فست نباشد .
موفق باشید.

hsn_abieteh
چهارشنبه 17 شهریور 1389, 04:12 صبح
ممنون
شرمنده چون کار نکردم میشه بیشتر توضیح بدید؟ چجوری از این فیلد ها استفاده کنم؟

اگه بخوام باکدنویسی مقدار یکی از فیلدها که در اون لحظه داخل کوئری هست رو قبل از چاپ عوض کنم باید چیکار کنم؟

MOJTABAATEFEH
چهارشنبه 17 شهریور 1389, 11:49 صبح
سلام
دوستان عزیز سوالی دارم در مورد fast report
بنده یک جدول دارم که یکی از فیلدهای آن با مقدار 0 و 1 مقداردهی شده
حالا می خوام موقعی که این فیلد رو برای چاپ نمایش داده میشه اگر مقدار فیلد صفر بود داخل صفحه ی گزارشم نامش بشه حق التدریس
یا اگه مقدارش 1 بود در صفحه ی چاپ هیئت علمی نوشته بشه

در اصل می خوام بدونم تو frxReport1BeforePrint مربوط به frxreport چه کدی بنویسم
منظورم یک همچین چیزیه...



if IntToStr(ADOQuery1.fieldvalues['statusteach'])='1' then
ADOQuery1.FieldValues['statusteach']:='هيئت علمي'

frxreport1.showreport;
من زیاد آشنا نیستم ممنون میشم کمکم کنید:ناراحت:

دوست عزیز بهتره شما از دستورات SQL برای اینکار استفاده کنی به صورت زیر

select field1,field2, field3=case field3 when 0 then 'حق التدریس' when 1 then 'هیئت علمی' end from table1



موفق باشید

hsn_abieteh
چهارشنبه 17 شهریور 1389, 18:23 عصر
یک دنیا ممنون درست شد.
فقط یک سوال دیگه



ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select fname,statusteach=case statusteach when 0 then ''ÍÞ ÇáÊÏÑíÓ'' when 1 then ''åíÇÊ Úáãí'' end,edu_group=case edu_group when 10100 then ''ÒÔ˜í'' when 10200 then ''ÏäÏÇäÒÔ˜í'' when 10300 then ''ÏÇÑæÓÇÒí'' when 10400 then ''ÑÓÊÇÑí æ ãÇãÇÆí''');
ADOQuery1.SQL.Add('when 10500 then ''ÏÇãÒÔ˜í'' when 10000 then ''ÏÑæÓ Úãæãí'' when 10001 then ''ÏÑæÓ Úáæã Çíå æ íÔ ÏÇäԐÇåí'' when 10600 then ''Úáæã ÂÒãÇíԐÇåí'' when 10700 then ''ÈåÏÇÔÊ'' when 10800 then ''ʘäæáæŽí ÑÇÏíæáæŽí'' when 10900 then ''ÝíÒíæÊÑǁí''');
ADOQuery1.SQL.Add('when 11000 then ''ÊÛÐíå'' when 11100 then ''ÒÔ˜í ÌÇãÚå ÑÇ'' when 20100 then ''ÒÈÇä æ ÇÏÈíÇÊ ÝÇÑÓí'' when 20200 then ''ÒÈÇä æ ÇÏÈíÇÊ ÚÑÈ'' when 41000 then ''˜ÇãíæÊÑ'' when 30800 then ''ÂãÇÑ'' when 50600 then ''ÇãæÑ ÒÑÇÚí æ ÏÇãí'' when 40100 then ''ÈÑÞ''');
ADOQuery1.sql.Add('when 20600 then ''ÈÑäÇãå ÑíÒí Úáæã ÊÑÈíÊí''when 21300 then ''ÍÓÇÈÏÇÑí'' when 30100 then ''ÑíÇÖí'' when 70100 then ''Úáãí ˜ÇÑÈÑÏí'' when 40400 then ''ÚãÑÇä'' when 50300 then ''ãåäÏÓí ˜ÔÇæÑÒí'' when 40800 then ''äÓÇÌí'' when 60300 then ''åäÑ äãÇíÔ'' ');
ADOQuery1.SQL.Add(' when 20400 then''ÝÑåä æ ãÚÇÑÝ ÇÓáÇãí'' end,co_type,diploma,diploma,grade from edu1 where statusteach=''1'' and term=''88-89-2'' group by fname,statusteach,edu_group,co_type,diploma,diplom a,grade');
ADOQuery1.Open;
frxReport1.ShowReport();

من اگه از یک همچین کد بزرگی استفاده کنم کلا به لحاظ برنامه نویسی اشکالی نداره؟ سرعت برنامه رو پایین نمیاره؟

راه حل بهتری هست به نظرتون؟ یا از همین روش استفاده کنم.

اون مقادیر ناخوانا داخل کد چون فارسی هست اونجوری شده

yaseriran
پنج شنبه 18 شهریور 1389, 00:55 صبح
درود!



من اگه از یک همچین کد بزرگی استفاده کنم کلا به لحاظ برنامه نویسی اشکالی نداره؟ سرعت برنامه رو پایین نمیاره؟نخست اینکه شما یک بار clear کردید و چند بار add؟؟!
...



سعی نکنید موفق شوید، بلکه سعی کنید با ارزش شوید!... انیشتین

hsn_abieteh
پنج شنبه 18 شهریور 1389, 05:12 صبح
درود!


نخست اینکه شما یک بار clear کردید و چند بار add؟؟!
...




سلام.
خوب باید چیکار کنم.
نمیشه که همش رو تو یه خط بنویسم.
هر چی نیاز بوده add کردم! درست هم جوای میده...

MOJTABAATEFEH
پنج شنبه 18 شهریور 1389, 12:32 عصر
یک دنیا ممنون درست شد.
فقط یک سوال دیگه



ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select fname,statusteach=case statusteach when 0 then ''ÍÞ ÇáÊÏÑíÓ'' when 1 then ''åíÇÊ Úáãí'' end,edu_group=case edu_group when 10100 then ''ÒÔ˜í'' when 10200 then ''ÏäÏÇäÒÔ˜í'' when 10300 then ''ÏÇÑæÓÇÒí'' when 10400 then ''ÑÓÊÇÑí æ ãÇãÇÆí''');
ADOQuery1.SQL.Add('when 10500 then ''ÏÇãÒÔ˜í'' when 10000 then ''ÏÑæÓ Úãæãí'' when 10001 then ''ÏÑæÓ Úáæã Çíå æ íÔ ÏÇäԐÇåí'' when 10600 then ''Úáæã ÂÒãÇíԐÇåí'' when 10700 then ''ÈåÏÇÔÊ'' when 10800 then ''ʘäæáæŽí ÑÇÏíæáæŽí'' when 10900 then ''ÝíÒíæÊÑǁí''');
ADOQuery1.SQL.Add('when 11000 then ''ÊÛÐíå'' when 11100 then ''ÒÔ˜í ÌÇãÚå ÑÇ'' when 20100 then ''ÒÈÇä æ ÇÏÈíÇÊ ÝÇÑÓí'' when 20200 then ''ÒÈÇä æ ÇÏÈíÇÊ ÚÑÈ'' when 41000 then ''˜ÇãíæÊÑ'' when 30800 then ''ÂãÇÑ'' when 50600 then ''ÇãæÑ ÒÑÇÚí æ ÏÇãí'' when 40100 then ''ÈÑÞ''');
ADOQuery1.sql.Add('when 20600 then ''ÈÑäÇãå ÑíÒí Úáæã ÊÑÈíÊí''when 21300 then ''ÍÓÇÈÏÇÑí'' when 30100 then ''ÑíÇÖí'' when 70100 then ''Úáãí ˜ÇÑÈÑÏí'' when 40400 then ''ÚãÑÇä'' when 50300 then ''ãåäÏÓí ˜ÔÇæÑÒí'' when 40800 then ''äÓÇÌí'' when 60300 then ''åäÑ äãÇíÔ'' ');
ADOQuery1.SQL.Add(' when 20400 then''ÝÑåä æ ãÚÇÑÝ ÇÓáÇãí'' end,co_type,diploma,diploma,grade from edu1 where statusteach=''1'' and term=''88-89-2'' group by fname,statusteach,edu_group,co_type,diploma,diplom a,grade');
ADOQuery1.Open;
frxReport1.ShowReport();
من اگه از یک همچین کد بزرگی استفاده کنم کلا به لحاظ برنامه نویسی اشکالی نداره؟ سرعت برنامه رو پایین نمیاره؟

راه حل بهتری هست به نظرتون؟ یا از همین روش استفاده کنم.

اون مقادیر ناخوانا داخل کد چون فارسی هست اونجوری شده

دوست عزیز اگر امکانش هست بفرمایید کاری که می خواین انجام بدین چیه تا در صورتی که راه بهتری نسبت به روش خودتون باشه راه بهینه رو بهتون معرفی کنیم


موفق باشید

yaseriran
پنج شنبه 18 شهریور 1389, 15:03 عصر
درود!

بله. درست جواب میده دستوراتتون.
من با نظر MOJTABAATEFEH (http://barnamenevis.org/forum/member.php?u=47660) موافقم.

نوبت شماست...


درد من تنهایی نیست؛
بلکه مرگ ملتی است که گدایی را قناعت؛
بی عرضگی را صبر و با تبسمی بر لب این حماقت را حکمت خداوند می نامند... گاندی

hsn_abieteh
پنج شنبه 18 شهریور 1389, 23:39 عصر
با تشکر از شما دوستان گلم
راستش من در حال نوشتن یک برنامه هستم که اطلات یکسری اساتید و هیئت علمی و دانشجویان و کارکنان دانشگاه رو ثبت و ویرایش و ... میکنه!
تقریبا کامل شده،فقط قسمت گزارش گیری ها مونده
این قسمت کدی که من نوشتم به خاطر این هست که گزارشی تهیه کنم به صورت عکس زیر

http://up.iranblog.com/Files7/e4b51873b9b24d91842f.JPG

من از این کد برای تفکیک استفاده کردم


select statusteach=case statusteach when 0 then 'حق التدريس' when 1 then 'هيات علمي' end,edu_group=case edu_group when 10100 then 'پزشکي' when 10200 then 'دندانپزشکي' when 10300 then 'داروسازي' end,co_type=case co_type when 1 then 'تمام وقت 44 ساعت به بالا' when 2 then 'تمام وقت 32 ساعت' end,
diploma=case diploma when 1 then 'فوق تخصص يا فوق دکتري' when 2 then 'دکتري تخصصي' when 3 then 'معادل دکتري' when 4 then 'دکتراي حرفه اي' when 5 then 'فوق ليسانس'end,
grade=case grade when 1 then 'مربي آموزشيار' when 2 then 'مربي' when 3 then 'استاديار' when 4 then 'دانشيار' when 5 then 'استاد' when 6 then 'مربي فاقد مرتبه ي علمي'end,
Case When Jnc = 1 Then Count(Jnc) Else 0 End As Male,Case When Jnc = 2 Then Count(Jnc) Else 0 End As Female from edu1 where statusteach='1' and term='88-89-2' group by statusteach,edu_group,co_type,diploma,grade,jnc order by edu_group

طوری که این ها رو به یک کوئری فرستادم و بعد فرستادم برای fast report
جواب هم داد خدا رو شکر
اگر شما راه حل بهتر و کارامدتر و حرفه ای داریم ممنون میشم مطرح کنید.

yaseriran
جمعه 19 شهریور 1389, 09:42 صبح
درود!

به دقت دستوراتتون رو نخوندم. ولی دستوری که کار می کنه، یعنی درست...
در مورد سوالتون که چقدر تاثیر داره در سرعت برنامه: باید بگم که ناچیزتر از اینه که در موردش بحث بشه. البته شاید تو سطح ما!

شاید اینچا ربطی نداشته باشه: بهترین راه در دلفی برای بالا بردن سرعت اجرای برنامه: غیر فعال کردن فرمها به جز main هنگام اجرا و فعال کردنشون هنگام نیاز است.





دو چیز در دنیا بی نهایته: حماقت انسانها و کهکشانها، البته در مورد کهکشانها مطمئن نیستم... انیشتین