PDA

View Full Version : مبتدی: مشکل در نمایش اطلاعات کد شده در فست ریپورت



sdhamed
یک شنبه 06 اردیبهشت 1394, 07:47 صبح
سلام و خسته نباشید من با استفاده از پروسیجر اطلاعات را کد می کنم در فراخوانی با دستور اس کیو ال و با استفاده از adoquery در دلفی وقتی نمایش میدم با استفاده از خاصیت ongettext اطلاعات کد شده را دیکد می کنم ولی در چاپ بافست ریپورت اطلاعات کد شده نمایش داده می شه. راهی هست که برای چاپ اطلاعات در فست ریپورت دیکد بشه؟؟نمونه کدی که نوشتم رو هم براتون میزارم



ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select id,text from tbldoc');
ADOQuery1.Open;
ADOQuery1.FieldByName('text').OnGetText := MyDCode;

بازم بگم که مشکل در دیکد شدن برای چاپ در فست ریپورت هستش و این کد در نمایش برای dbgrid مشکلی نداره

یوسف زالی
یک شنبه 06 اردیبهشت 1394, 09:34 صبح
از چه نسخه ای استفاده می کنید؟
فست ریپورت 4.6.8 (نسخه ای که من دارم) خودش این چیزها رو تشخیص می ده.

pezhvakco
یک شنبه 06 اردیبهشت 1394, 17:56 عصر
اگه برای چاپ در فست رپورت با همین AdoQouery کار می کنید (که در برنامه داده ها رو درشت نمایش میده) و داده های اون نادرست است شاید مشکل از فونت ها و تنظیمات نوشتاری اون است .

یوسف زالی
یک شنبه 06 اردیبهشت 1394, 20:23 عصر
در برنامه داده ها رو درشت نمایش میده




مشکل از فونت ها و تنظیمات نوشتاری

متوجه منظورتون نمی شم..:متفکر:

sdhamed
سه شنبه 08 اردیبهشت 1394, 07:03 صبح
از چه نسخه ای استفاده می کنید؟
فست ریپورت 4.6.8 (نسخه ای که من دارم) خودش این چیزها رو تشخیص می ده.

ممنون از پاسخ شما
FastReport 4 استفاده می کنم و متاسفانه وقتی گزارش می گیرم به صورت کد شده نمایش داده میشه . ظاهرا ongettext که در dbgrid درست نمایش میده در گزارش درست کار نمیکنه!

online_com
سه شنبه 08 اردیبهشت 1394, 09:05 صبح
به نظر من اين مشكل منطقي است چون ongettext روي ديتاسورس تاثير نداره و فقط در زمان نمايش، اطلاعات تغيير مي كند در حالي كه فست ريپورت مستقيما به ديتاسورس متصل مي شود.
من هم اين مشكل رو داشتم و دو تا راه حل براش پيدا كردم:
1- پروسيجر دي كد رو به عنوان يكي از توابع به فست ريپورت معرفي كنيد و از داخل محيط فست ريپورت و از طريق رويداد OnBeforePrint يه همچين كدي رو بنويسيد

Tfrxmemoview1.text:= MyDCode
2- در رويداد OnBeforePrint فست ريپورتتون از داخل دلفي كد نويسي كنيد
:چشمک:

یوسف زالی
سه شنبه 08 اردیبهشت 1394, 09:51 صبح
نه دیگه، فست در نسخ جدیدش این طور نیست و متن های داده ها رو میاره نه value ها رو.
اما اگر اصرار به ادامه همین روش دارید می تونید از فیلدهای calculated استفاده کنید.

online_com
سه شنبه 08 اردیبهشت 1394, 10:27 صبح
نه دیگه، فست در نسخ جدیدش این طور نیست و متن های داده ها رو میاره نه value ها رو.

من از نسخه 4.15.6 با دلفي 7 استفاده مي كنم البته با استفاده از TQuery اين مشكل رو دارم و value ها رو مي ياره
از فيلدهاي محاسباتي استفاده كردم ولي چون TQuery فقط يكي بود و قرار بود در قسمت هاي مختلف برنامه و در گزارشات متعدد استفاده بشه وقتي انتخاب از جدول هاي ديگه پايگاه داده انجام مي شد خطا مي داد و بايد خيلي شرايط رو براش تغيير مي دادم راه OnBeforePrint بي دردسرتر بود
البته اين تجربه خودم بود شايد راه حل هاي مناسب تر ديگري هم وجود داشته باشد

یوسف زالی
سه شنبه 08 اردیبهشت 1394, 10:38 صبح
TQuery یا TADOQuery ؟

online_com
سه شنبه 08 اردیبهشت 1394, 11:19 صبح
TQuery یا TADOQuery ؟

من از TQuery استفاده كردم
البته اين دوستمون از TADOQuery استفاده كرده و شايد مشكلات من رو نداشته
البته به نظر من فرقي نداره باز هم نظر اساتيد رو نمي دونم!!!!!

sdhamed
سه شنبه 08 اردیبهشت 1394, 16:39 عصر
با تشکر از دوستان جوابتونرو تست می کنم و نتیجه را در همین تایپیک میزارم

sdhamed
یک شنبه 13 اردیبهشت 1394, 07:12 صبح
نه دیگه، فست در نسخ جدیدش این طور نیست و متن های داده ها رو میاره نه value ها رو.
اما اگر اصرار به ادامه همین روش دارید می تونید از فیلدهای calculated استفاده کنید.

سلام . این که میگید متن ها رو میاره در نسخه 5.1.9 این طورنیست! به نظر شما دلیل از چی میتونه باشه؟؟؟

sdhamed
یک شنبه 13 اردیبهشت 1394, 07:15 صبح
من از نسخه 4.15.6 با دلفي 7 استفاده مي كنم البته با استفاده از TQuery اين مشكل رو دارم و value ها رو مي ياره
از فيلدهاي محاسباتي استفاده كردم ولي چون TQuery فقط يكي بود و قرار بود در قسمت هاي مختلف برنامه و در گزارشات متعدد استفاده بشه وقتي انتخاب از جدول هاي ديگه پايگاه داده انجام مي شد خطا مي داد و بايد خيلي شرايط رو براش تغيير مي دادم راه OnBeforePrint بي دردسرتر بود
البته اين تجربه خودم بود شايد راه حل هاي مناسب تر ديگري هم وجود داشته باشد

میشه یه راهنمایی درارتباط با استفاده از onbeforeprint کنید ؟؟
پیشاپیش از دوستانی که اطلاعات خودشمن رو در اختیار بقیه میزارن تشکر می کنم

online_com
یک شنبه 13 اردیبهشت 1394, 10:27 صبح
يه كم در مورد گزارشتون و مقدار داده اي كه مي فرستيد به گزارش و مي خواهيد ديكد شده نمايش بده توضيح بديد كه بهتر بشه راهنمايي كرد
onbeforeprint توي گزارشات با مقدار داده بالا، كمي كند است ولي براي حجم متوسط، خوب جواب مي ده
براي استفاده از onbeforeprint مربوط به شي گزارش از داخل دلفي از كدي شبيه كد زير مي توني استفاده كني
TfrxMemo1 اسم شي متني هست كه در داخل فايل طراحي فست ريپورت قرار دادي و حاوي اطلاعات كد شده و در باند داده قرار دارد.



if Sender is TfrxMemoView then
if TfrxMemoView(Sender).Name='TfrxMemo1' then
TfrxMemoView(Sender).Text:=MyDCode;

sdhamed
دوشنبه 14 اردیبهشت 1394, 07:53 صبح
سلام
یک فیلد با نام text دردیتابیس با نوع varchar ایجاد کردم وقتی دیتا قراره ثبت بشه به یه تابع فرستاده میشه و به صورت کد در میاد و وقتی می خوام نمایش بدم از طریق ongettext به پروسیجر فرستاده میشه و از حالت کد شده در میاد .مثال شمارو چک کردم ولی به نتیجه نرسیدم


if Sender is TfrxMemoView then
if TfrxMemoView(Sender).Name='TfrxMemo1' then
TfrxMemoView(Sender).Text:=MyDCode;

online_com
دوشنبه 14 اردیبهشت 1394, 10:23 صبح
مثال شمارو چک کردم ولی به نتیجه نرسیدم

يعني خروجي نداد يا ارور داد يا ....


وقتی می خوام نمایش بدم از طریق ongettext به پروسیجر فرستاده میشه و از حالت کد شده در میاد

خروجي رو به چي نسبت مي ديد فكر كنم مشكل اصلي اينه كه پروسيجر خروجي مستقيم نداره و روي ADOQuery1 تاثير مي زاره
اگر اينطور باشه همان طور كه You-See (http://barnamenevis.org/member.php?70247-You-See) قبلا شما رو راهنمايي كرده بودند بايد از فیلدهای calculated استفاده کنید و راه حل ديگري نداره

sdhamed
دوشنبه 14 اردیبهشت 1394, 13:11 عصر
من کد شمارو به این شکل تغییر دادم



if Sender is TfrxMemoView then
if TfrxMemoView(Sender).Name='Memo7' then
;(TfrxMemoView(Sender).Text:=isMyCode (adoquery1.field.field(1).asstring


خروجی نمایش داده های کد شده بود و هیچ تغیری نکرد و memo7 در فست ریپورت به فیلد textl مرتبط است.

online_com
دوشنبه 14 اردیبهشت 1394, 14:03 عصر
كد رو به صورت زير مي بايست تغيير دهيد

;(TfrxMemoView(Sender).Text:=isMyCode (TfrxMemoView(Sender).Text

يعني مقدار داخل Memo7 رو به عنوان ورودي تابع دريافت كند و خروجي تابع را كه مقدار ديكد شده است نمايش دهد

اگر بازهم به صورت كد شده اطلاعات رو نمايش مي داد پيشنهاد مي كنم كه تابع isMyCode رو به فست ريپورت معرفي كنيد و كدنويسي رو به داخل فست ريپورت منتقل كنيد و در رويداد OnAfterData مربوط به Memo7 كد ;(TfrxMemoView(Sender).Text:=isMyCode (TfrxMemoView(Sender).Text رو بنويسيد

sdhamed
دوشنبه 14 اردیبهشت 1394, 15:30 عصر
;(TfrxMemoView(Sender).Text:=isMyCode (
TfrxMemoView(Sender).Text

متاسفانه این مورد کمکی نکرد فکر کنم آخرین مورد همین میمونه که تابع در فست تعریف بشه.
امکانش هست یه راهنمایی در خصوص تعریف تابع در فست ریپورت بدین؟؟البته با مثال:تشویق:

online_com
دوشنبه 14 اردیبهشت 1394, 15:51 عصر
توابع رو در رويداد UserFunction مربوط به شي فست ريپورت در داخل فرم دلفي به صورت زير معرفي مي كني:


if MethodName='ISMYCODE' then
Result:=isMyCode(Params[0])


و در رويداد BeginDoc مربوط به شي فست ريپورت در داخل فرم دلفي تابه رو به ليست توابع فست ريپورت اضافه مي كني


frxReport1.AddFunction('Function isMyCode(s:String):String;','','decode');