ورود

View Full Version : سوال: خطای is not a valid floating point value در Fast Report



fahimi
سه شنبه 20 بهمن 1394, 21:48 عصر
با سلام دوستان گرامی
من تا زمانیکه از ویندوز 7 استفاده می کردم گزارشات بدون هیچ اشکالی اجرا می شود و ولی از زمانیکه ویندوز 8.1 استفاده کردم متاسفانه هنگام نمایش با خطا is not a valid floating point value رخ می دهد.
خطا زمانی رفع می شود که در تنظیمات کنترل پنل علامت اعشار"." را "/" تغییر داده شود. به نظر روش منطقی نیست.
من Delphi XE6 و Fast Report 5.3.16 استفاده می کنم.

یوسف زالی
چهارشنبه 21 بهمن 1394, 10:35 صبح
سلام.
به نسخه ربطی نداره، به پیش فرض مرتبطه، برای همین توصیه می کنم در برنامه این تنظیمات چک شده و بر طبق اون تبدیلات رشته به عدد انجام بشه.
یا این که هنگام ورود به برنامه برای یوزر این تنظیمات رو انجام بدید.

fahimi
پنج شنبه 22 بهمن 1394, 05:28 صبح
با سلام خدمت یوسف زالی
این خطا ارتباط به تبدیل رشته به عدد ندارد در واقع در زمان طراحی گزارش پیش فرض ویندوزCustomize Format\Decimal Symbol '/' باشد و در رایانه دیگر پیش فرض ویندوز '.' رخ می دهد.
http://stackoverflow.com/questions/27430469/fast-report-fr3-file-loading-error-in-delphi
برای اینکه متوجه مشکل شوید فایل 1 , 2 را با Note Pad باز کنی متوجه منظورم می شوید .
138976

fahimi
جمعه 23 بهمن 1394, 20:08 عصر
متاسفانه در ویندوز 8 به بالا زمانیکه شما تنظیمات را Persian انتخاب می کنید پیش فرض اعشاری را '/' تبدیل می کند با به وجود آمدن مشکلات در در تعدادی از برنامه ازجمله Excel کامپوننت Fast Report می شود در حالیکه مفهوم '/' آن به '.' متفاوت می باشد . برنامه ها / را به عنوان یک عملگرا برداشت می کند.
ساده ترین را در هنگام طراجی گزارش بررسی کنیم که در کنترل پانل Customize Format\Decimal Symbol حتماً '.' باشد و در صورتی که در هنگام طراحی علامت اعشاری در ویندوز '/' بوده است. ابتدا تنظیم کنترل پانل '/' قرار می دهیم پس باز کردن فایل گزارش کنترل پانل را به '.' تغییر و مجددا ذخیره می کنیم

ariobarzan
شنبه 24 بهمن 1394, 12:18 عصر
سلام
به محض تغییر در تنظیم کنترل پنل باوجودی که قبلش گزارش را باز کردم باز هم پیام خطا دیده میشه و اجازه ذخیره شدن نمیده :گریه:

fahimi
شنبه 24 بهمن 1394, 22:58 عصر
با سلام
من به ترتیب زیر انجام داده ام
1- تنظیمات کنترل پانل را "/" قرار دادم.
2- فایل گزارش Fr3 را باز کردم
3- تنظیمات کنترل پانل را "." تغییر دادم.
4- برای اینکه کلید ذخیره در دسترس قرارگیرد اندازه یکی از Memo را تغییر دادم و گزارش را ذخیره کردم
روش بالا در ویندوز 10 و 7 تت کردم مشکلی پیش نیامد.

ariobarzan
دوشنبه 26 بهمن 1394, 12:59 عصر
سلام و تشکر
بمحض تغییر تنظیمات کنترل پانل از / به . فست شروع میکنه به نمایش پیام خطا و اصلا مهلت نمیده که بخوام اندازه memo را تغییر بدم:متفکر:

hadisalahi2
سه شنبه 27 بهمن 1394, 04:18 صبح
ببخشید دوستان عزیز
این خطا مربوط به هیچ کدوم از موارد بالا نمیشه
این پیام مربوط به عدم سازگاری نسخه های 32 و 64 بیتی ویندوز با کامپوننت هستش

من یک گزارش در ویندوز 64 بیتی با نسخه 64 کامپایل کردم و هنگام اجرا در نسخه 32 بیتی این مشکل بوجود اومد
جالبه که دوباره تو نسخه 64 بیتی هم مجدد باز نشد

بعد از کلی کنکاش فهمیدم اون نسخه ای که با خود دلفی نصب میشه این مشکل رو داره
و وقتی نسخه کامل فست رو نصب کردم این مشکل حل شد

یا حق

danesh1351
چهارشنبه 26 اسفند 1394, 05:27 صبح
من همین مشکل رو داشتم
فایل طراحی رو با notepad باز کن و تمام / رو با . جایگزین کن
فقط دقت کن انتهای تگهای xml تغییر نکنه

parastoo48
جمعه 27 اسفند 1395, 10:26 صبح
مشکل مربوط به تابع تبدیل رشته به اعداد اعشاری در فست ریپورته. شما میتونید با روش زیر مشکل رو حل کنید
1- frxutils.pas این فایل رو از پوشه fastreport باز کنید
2- اینو پیدا کنید : :function frxStrToFloat(s: String): Extended
3- حالا [',', '.'] به این [',', '.','/'] تبدیل کنید
حالا با خیال راحت تو هر ویندوزی استفاده کنید
msalahia@yahoo.com

Mahmood_M
جمعه 27 اسفند 1395, 11:52 صبح
این مشکلات باید توسط متغیر عمومی FormatSettings حل بشه
در شروع برنامه فرمتهای دلخواه برای اعداد اعشاری و تاریخ و ... توسط این رکورد تعیین کنید تا در تمام سطح برنامه از همین فرمتها استفاده بشه و وابستگی برنامه به فرمتهای پیشفرض ویندوز از بین بره

benyaminrahimi
سه شنبه 01 مرداد 1398, 22:27 عصر
ممنونم از راهنمایی شما دوستان توجه داشته باشند که تو پروژه های بزرگ که یه حجمی گزارش طراحی شده و یه حجمی هم یوزر خودش گزارش طراحی کرده نمیشه بهش گفت
رجیون رو بذار روی '/' بعد گزارش رو باز کن بعد دوباره رجیون رو بذار روی '.' ما هم این مشکل رو داشتیم چون تو پروژه ما تغیین جدا کننده اعشار دست خود کاربره decimal symbol ...

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


function frxStrToFloat(s: String): Extended;
var
i: Integer;
begin
for i := 1 to Length(s) do
{$IFDEF Delphi12}
if CharInSet(s[i], [',', '.','/']) then
{$ELSE}
if s[i] in [',', '.','/'] then
{$ENDIF}
{$IFDEF Delphi16}
s[i] := FormatSettings.DecimalSeparator;
{$ELSE}
s[i] := DecimalSeparator;
{$ENDIF}
while Pos(' ', s) <> 0 do
Delete(s, Pos(' ', s), 1);
Result := StrToFloat(s);
end;

MASAELI
چهارشنبه 07 خرداد 1399, 19:28 عصر
ممنونم از راهنمایی شما دوستان توجه داشته باشند که تو پروژه های بزرگ که یه حجمی گزارش طراحی شده و یه حجمی هم یوزر خودش گزارش طراحی کرده نمیشه بهش گفت
رجیون رو بذار روی '/' بعد گزارش رو باز کن بعد دوباره رجیون رو بذار روی '.' ما هم این مشکل رو داشتیم چون تو پروژه ما تغیین جدا کننده اعشار دست خود کاربره decimal symbol ...

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


function frxStrToFloat(s: String): Extended;
var
i: Integer;
begin
for i := 1 to Length(s) do
{$IFDEF Delphi12}
if CharInSet(s[i], [',', '.','/']) then
{$ELSE}
if s[i] in [',', '.','/'] then
{$ENDIF}
{$IFDEF Delphi16}
s[i] := FormatSettings.DecimalSeparator;
{$ELSE}
s[i] := DecimalSeparator;
{$ENDIF}
while Pos(' ', s) <> 0 do
Delete(s, Pos(' ', s), 1);
Result := StrToFloat(s);
end;




بسیار عالی بود
مشکل از اساس حل شد

hp1361
چهارشنبه 14 خرداد 1399, 19:28 عصر
بسیار عالی بود
مشکل از اساس حل شد

مشکل از اساس حل شد، اما اساسی حل نشده.

همانطور که آقای مهری گفتند، یک متغیر Global در برنامه های دلفی هست که فرمت ها رو تعیین میکنه بنام FormatSettings .

این متغیر فیلدهایی داره که برای تعیین فرمت موارد مختلفی چون تاریخ، واحد پول و ... داره.

فقط کافیه در رویدادی چون OnCreate فرم اصلی این کد رو برای تعیین فرمت ممیز شناور بنویسید:


FormatSettings.DecimalSeparator:='.';


البته شما بجای اون نقطه هرچیز دیگه ای هم میتونید بزارید. با این روش در تمام برنامه که شامل گزارش ها هم میشه، ممیز بصورت نقطه شناخته خواهد شد.

موفق باشیم