PDA

View Full Version : سوال: نمایش تصویر در Fast Report از روی هارد دیسک در Master Data



hadisalahi2
یک شنبه 24 آبان 1388, 16:27 عصر
با سلام به همگی دوستان.
من برنامه ای نوشتم که یک بانک اطلاعاتی بود که 3 تا از فیلدهای اون نوع عکسه.
حالا توی این بانک قرار بود 12000 عکس ذخیره بشه ولی متاسفانه به سه هزار تا نرسیده ، اونقدر حجم بانک اطلاعاتی بالا رفت و سرعت پایین اومد که مجبور شدم ، عکس ها رو روی هارد ذخیره کنم و از اونجا بخونم.

قبلا برای چاپ عکس و نمایش اون در گزارشات ، کافی بود فقط موضوع picture موجود در FR رو به فیلد مورد نظر مرتبط کنم.
اما حالا که دیگه عکسها روی هارده ، چطوری میتونم ، اونها رو نمایش بدم.
البته به فکر خودم رسیده که اون 3 موضوع تصویر رو با کد نویسی از دلفی بخونم و بعد بهش تصویر های روی هارد رو نسبت بدم، ولی مشکل اینه که برای انجام این کار در باند Master data باید چی کار کنم؟
ممنون میشم اگه دوستان راهنمایی کنند.
یا حق

benyaminrahimi
یک شنبه 24 آبان 1388, 16:48 عصر
فکر میکنم مشکل شما درست طراحی نکردن دیتا بیس
این روشی که انجام دادی نا کارامد و خطر ناکه

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

در هر صورت تو باید یک فیلد blob فیزیکی یا calc بزاری
که تو ondatachange دیتا سورس بهش مقادیر رو پر کنی وبعد از گزارش پاکشون کنی


می تونی هم روی event تعویض باند و تغییر دیتا تو فست ریپورت کد بنویسی

vcldeveloper
یک شنبه 24 آبان 1388, 16:58 عصر
کلاس TfrxPictureView خودش یک خصوصیت FileLink داره که آدرس یک فایل را میگیره، و آن را نمایش میده.
شما می تونید در OnBeofrePrint مربوط به MasterBand خودتان آدرس فایل را از بانک بخوانید، و در این خصوصیت بریزید، تا شی Picture شما تصویر مربوطه را نمایش دهد.

hadisalahi2
یک شنبه 24 آبان 1388, 17:02 عصر
فکر میکنم مشکل شما درست طراحی نکردن دیتا بیس
این روشی که انجام دادی نا کارامد و خطر ناکه

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


با تشکر
اما دوست عزیز مشکل از طراحی جدوال نبود ، چون حجم تصاویر قاعدتا باید برای کار کارفرما بالا می بود، در ضمن شاید همیشه لازم نباشه شما یک رکورد رو لود کنی.



در هر صورت تو باید یک فیلد blob فیزیکی یا calc بزاری
که تو ondatachange دیتا سورس بهش مقادیر رو پر کنی وبعد از گزارش پاکشون کنی

اگه منظورت ایجاد جدول موقت برای تصاویره ، خدمت شما عرض کنم که بازهم میشه همون قضیه سابق و کلا کار اشتباهی است
اگه منظورتون هم چیز دیگه ایه لطفا واضح تر توضیح بدید



می تونی هم روی event تعویض باند و تغییر دیتا تو فست ریپورت کد بنویسی

خوب اگه بلد بودم که سوال نمیکردم
لطفا اگه بلدید واضح و با مثال توضیح بدید.
ممنون میشم از راهنمایی دوستان
یا حق

hadisalahi2
یک شنبه 24 آبان 1388, 17:07 عصر
آقای کشاورز من اون خاصیت FileLink رو میدونستم که آدرس فایل رو میگیره، ولی مشکل توی اینه که چطور این کار رو برای MasterData انجام بدم که شامل چندین رکورد با عکسهای مختص خودشونه.
میشه با یک مثال عملی برام توضیح بدید؟
ممنون میشم

vcldeveloper
یک شنبه 24 آبان 1388, 17:35 عصر
میشه با یک مثال عملی برام توضیح بدید؟
در داخل Designer شی MasterBand را انتخاب کنید، و برای رویداد OnBeforePrint آن بنویسید:

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
Picture1.FileLink := <MyTable."MyFieldName">;
end;

MyTable اسم دیتاستی هست که به باند متصل هست، MyFieldName هم اسم فیلدی که آدرس تصویر را در خود ذخیره کرده.

hadisalahi2
دوشنبه 25 آبان 1388, 10:41 صبح
آقای مهندس با تشکر از توضیحاتتون ،من فایلهای عکس رو در یک زیر پوشه نگهداری میکنم و همچنین آدرس عکس ها که مطلق نیست تا بتونه اونها رو مستقیم لود کنه.
من با این کد سعی کردم آدرس عکس ها رو تغییر بدم ولی متاسفانه پیغام خطا میده.




TopPic.FileLink :="BRIDGEPIC\"+<frxDBDataset1."TopPic">


چطوری آدرس عکس ها رو بهش بدم که به صورت آدرس نسبی باشه؟
در ضمن اگه اصلا آدرس عکسها داخل جدول ذخیره نشده باشه باید چطوری این کار رو انجام بدم؟
یا حق

hadisalahi2
دوشنبه 25 آبان 1388, 16:58 عصر
اساتید گرامی ما منتظر نظرات ارزشمند شما هستیم.....

DataMaster
دوشنبه 25 آبان 1388, 17:40 عصر
TopPic.FileLink :="BRIDGEPIC\"+<frxDBDataset1."TopPic"> ادرس نسبی رو درست نوشتی ؟ مثلا اینجوری نیست
..\BRIDGEPic
در ضمن اگه اصلا آدرس عکسها داخل جدول ذخیره نشده باشه باید چطوری این کار رو انجام بدم؟در ضمن شما یه جوری آدرس و مشخصات فایل عکس رو داری دیگه؟؟ وگرنه از کجا میدونی باید کدوم عکس رو لود کنی؟

hadisalahi2
دوشنبه 25 آبان 1388, 19:34 عصر
TopPic.FileLink :="BRIDGEPIC\"+<frxDBDataset1."TopPic"> ادرس نسبی رو درست نوشتی ؟ مثلا اینجوری نیست
..\BRIDGEPicدر ضمن شما یه جوری آدرس و مشخصات فایل عکس رو داری دیگه؟؟ وگرنه از کجا میدونی باید کدوم عکس رو لود کنی؟

دوست عزیز ، آدرس رو به صورت زیر تغییر دادم ولی باز هم مشکل حل نشد



TopPic.FileLink :='..\BRIDGEPIC\'+<frxDBDataset1."TopPic">;



در ضمن خوب من نام عکسها رو میتونم با شماره کلید اصلی در نظر بگیرم و موقع لود و ذخیره هم یک پسوند jpg با آخرش اضافه میکنم.
پس میشه بدون داشتن آدرس عکسها ، اونها رو لود یا ذخیره کرد.
ولی الان مشکل اینه که چطوری این کار رو در Fr انجام بدم.

از دوستان و اساتید گرامی تقاضا دارم راهنمایی کنند ، خیلی عجله ای و فوریه
یا حق

vcldeveloper
دوشنبه 25 آبان 1388, 19:59 عصر
خطایی که داد چی بود؟

hadisalahi2
دوشنبه 25 آبان 1388, 20:26 عصر
اون خطایی که داد مال این بود که نام فیلد رو اشتباه نوشته بودم.
اما این کد رو در رویداد MasterData1OnBeforePrint می نویسم.



TopPic.FileLink :='..\BRIDGEPIC\'+<frxDBDataset1."TopImage">;


ببنید من داخل این فیلد TopImage نام فایل رو به صورت زیر دارم
1T.jpg
حالا این عکسها در زیر پوشه BRIDGEPIC قرار دارند و فایلهای چاپ در شاخله اصلی کنار فایل اجرایی هستند.
با نوشتم دستور بالا ، خطا نمایش داده نمیشه ولی عکس هم در کادر عکس نمایش داده نمیشه

hadisalahi2
چهارشنبه 27 آبان 1388, 21:21 عصر
آقای کشاورز ، اساتید محترم ، خواهش میکنم در مورد سوال و مشکل من راهنمایی بفرمایید. برنامه من برای تحویل فقط گیر همین قسمته.
ممنون

hadisalahi2
شنبه 30 آبان 1388, 11:08 صبح
آیا در Fast Report میشه از دستوراتی مانند ExtractFilePath و امثال این استفاده کرد تا بتونم مسیر نسبی رو به مسیر مطلق تبدیل کنم؟

من آدرس یک عکس رو در خاصیت FileLink یک کنترل تصویر در Fr کپی کردم و بعد اجرا , عکس رو نشون میداد.
حالا میخواستم اگه بشه آدرس رو به صورت مطلق در خاصیت FileLink قرار بدم.

hadisalahi2
سه شنبه 03 آذر 1388, 12:44 عصر
دوستان و اساتید گرامی تقاضا دارم اینجانب رو راهنمایی کنند
آیا میشه اینکار رو از داخل خود دلفی انجام داد؟
اگه راهی به ذهن دوستان میرسه و پیشنهاد بدن خیلی ممنون میشم.
مهم رفع مشکله حالا دوستان هر روشی به ذهنشون میرسه ، تقاضا دارم اون رو بیان کنند.
ممنون میشم از نظراتتون
یا حق

vcldeveloper
چهارشنبه 04 آذر 1388, 00:26 صبح
مطمئن نیستم FastScript خودش این تابع را داشته باشه، می تونید در رویداد OnBeforePrint شی گزارش در داخل دلفی، پیشوند مسیر را به صورت یک Variable به گزارش فست ریپورت ارسال کنید، و مقدار این Variable را در گزارش به ابتدای نام هر فایل اضافه کنید تا مسیر کامل فایل به دست بیاد.

hadisalahi2
پنج شنبه 05 آذر 1388, 12:09 عصر
میشه بگید چطوری متغیر رو به FR ارسال کنم و چطوری توی FR اون رو استفاده کنید؟
ممنون میشم.
یا حق

vcldeveloper
پنج شنبه 05 آذر 1388, 21:10 عصر
میشه بگید چطوری متغیر رو به FR ارسال کنم و چطوری توی FR اون رو استفاده کنید؟
در همین تالار در این زمینه نمونه سورس کد هست. خودم حداقل یکی دو بار در این مورد سورس کد گذاشتم.

hadisalahi2
جمعه 06 آذر 1388, 10:56 صبح
اگه زحمتی نیست آدرس چند تاپیک رو اینجا ذکر کنید ممنون میشم.
چون من با چند تا کلمه کلیدی جستجو کردم به نتیجه ای نرسیدم.

benyaminrahimi
جمعه 06 آذر 1388, 15:47 عصر
لطفا اگه بلدید واضح و با مثال توضیح بدید.

امکان نداره برای این طرز صحبت وقت بذارم

hadisalahi2
جمعه 06 آذر 1388, 16:11 عصر
لطفا اگه بلدید واضح و با مثال توضیح بدید.

امکان نداره برای این طرز صحبت وقت بذارم

دوست عزیز منظورتون من هستم یا آقای کشاورز؟
اگه منظورتون من هستم ، چی رو واضح و با مثال توضیح بدم؟
در مورد چی و در مورد چه طرز صحبتی نمیتونید وقت بذارید؟

DataMaster
شنبه 07 آذر 1388, 01:04 صبح
من یه نمونه گزارش با همین کدهای داخل تاپیک نوشتم و جواب داد
فقط میمونه آدرس نسبی که منم هر چی گشتم توی توابع فست ریپورت نبود و فکر کنم بهترین راه همون پارامتریک کردن باشه
من فکر میکنم کدهای شما از لحاظ آدرس عکس مشکل داره

hadisalahi2
یک شنبه 08 آذر 1388, 09:45 صبح
با سلام و تشکر
ولی من فکر نمیکنم آدرس من مشکل داشته باشه ، چون من هم آدرس رو به صورت مطلق کپی کردم در خاصیت FileLink و عکس رو راحت نمایش می داد ولی هنگامی که آدرس ها رو در Fr به هم دیگه Attach میکنم مشکل ایجاد میشه و اصلا تصویر رو نمایش نمیده.

واقعا یعنی برای این کار در فست راه حلی وجود نداره ؟

hadisalahi2
سه شنبه 10 آذر 1388, 12:38 عصر
آقای کشاورز میشه لطفا آدرس تاپیکی که در مورد ارسال متغیر به FR است رو اینجا قرار بدید. چون من هنوز نتونستم اون رو پیدا کنم.

vcldeveloper
چهارشنبه 11 آذر 1388, 00:24 صبح
آقای کشاورز میشه لطفا آدرس تاپیکی که در مورد ارسال متغیر به FR است رو اینجا قرار بدید. چون من هنوز نتونستم اون رو پیدا کنم.
http://www.barnamenevis.org/forum/showthread.php?t=179004
http://www.barnamenevis.org/forum/showthread.php?t=152730

hadisalahi2
شنبه 21 آذر 1388, 20:35 عصر
تاپیک هایی که آدرسشون رو دادید، کار من رو راه ننداختند.
چون من میخوام متغیرها رو از داخل دلفی به فست ریپورت ارسال کنم ولی این تاپیک ها نحوه مقدار دهی متغیر داخل خود فست ریپورت رو توضیح داده.
من متغیرها رو به صورت زیر مقدار دهی کردم:



var
FilePath:string;

procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
Mappic.FileLink:=FilePath;
end;


حالا مقدار متغیر FilePath رو میخوام از طریق دلفی مقدار دهی کنم.
چطور باید این کار رو انجام بدم؟

hadisalahi2
یک شنبه 22 آذر 1388, 09:12 صبح
من از کد زیر هم حتی استفاده میکنم و کنترل رو از داخل دلفی فراخوانی میکنم ولی بازهم تصویر نمایش داده نمیشه



Procedure TDataBaseForm.MapPrint(FileName:String);
var MapPic:TfrxPictureView;
begin
MapPic:=frxReport1.FindObject('MapPic')as TfrxPictureView ;
MapPic.Picture.LoadFromFile(FileName );
frxReport1.ShowReport(true);
end;

hadisalahi2
یک شنبه 22 آذر 1388, 17:47 عصر
دوستان ما همچنان منتظر نظرات ارزشمند شما هستیم.
آقای کشاورز یه نگاهی به این پست بندازید.:ناراحت::متفکر:

bootshow
چهارشنبه 09 دی 1388, 03:16 صبح
FileLink از روی گزارشتو یکبار مقدار بده.بعد توی برنامه عکستو در مسیر FileLink قرار بده