PDA

View Full Version : چاپ عکس پرسنلی در کریستال ریپورت بدون ذخیره خود عکس یا مسیر در بانک



hosseinarefi
پنج شنبه 08 دی 1390, 00:24 صبح
سلام بر همگی
لطفا راهنمایی بفرمایید
یه برنامه میخوام بنویسیم به زبان وی بی دات نت 2008 که تو کریستال رپپورتش عکس پرسنلی کارمندان رو چاپ کنم


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


کلیه عکس ها در مسیر برنامه در پوشه امیج و داخل پوشه امیج 1024 فولدر هستند که براساس 2 رقم اول کد ملی افراد درست شده اند.
کد ملی هر نفر داخل پوشه هستش که 2رقم اول کد ملی آن با نام پوشه یکی باشه
مثال:
داخل پوشه 19 عکس افراد با کد ملی هایی مثل1931083839 و یا 1935658569و1952652252
داخل پوشه 58 کد ملی 5896584585 و 5865256325

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

PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage


ممنون

ali_md110
پنج شنبه 08 دی 1390, 01:35 صبح
با سلام به دوست من
ابندا باید عکساتون رو با یک شماره پرسنلی در هاردتون ذخیره کنید و سپس بازیابیش کنید کد شو واستون میزارم:
ابتدا چهت ساختن فولدر مورد نظر:

Public Sub CreateDirectory(ByVal sFolder As String)
If Directory.Exists(AppDomain.CurrentDomain.BaseDirec tory & sFolder) = False Then

Directory.CreateDirectory(AppDomain.CurrentDomain. BaseDirectory & sFolder)
End If
End Sub
سپس کد کپی کردن عکس از یک picturebox

If PictureBox1.Image IsNot Nothing Then
If Not File.Exists(AppDomain.CurrentDomain.BaseDirectory & "doc") Then
CreateDirectory("doc\")
End If
Dim patch As String = AppDomain.CurrentDomain.BaseDirectory & "doc\" & "در اینجا کد پرسنلی مثلا از یک کامبوباکس بگیرید" & ".Jpeg"
Dim SaveImage As Bitmap = New Bitmap(PictureBox1.Image)
SaveImage.Save(patch, System.Drawing.Imaging.ImageFormat.Jpeg)
PictureBox1.Image = Nothing
End If
خب تا اینجا عکس ذخیره شد با پسوند jpeg و کد پرسنلی
حالا باید اونو لود کنیم
ابندا توی بانک برنامه یا هرجا مثلا استورد پروسیچر اسکیول دستور اسکیولتون بنویسید سعی کنید stored procedure درون اسکیول سرور یا اکسس یاشه
مثلا:

SELECT CODE_PERSON,NAME_PERSON FROM MYTBLE WHERE CODE_PERSON="1234"

یا هر دستور اسکیولی نوشتید
حتمن کد پرسنلی که عکس با اون ذخیره شده توی دستور اسکیول یادتون نره
خب تا اینجا نیاز به یک فیلد از نوع BYTE دارید تا در جدول شما عکستون که از هارد لود شده بفرسته به کرستال ریپورت
یک ستون از نوع BYTE() بسازید

Dim col As New DataColumn("Logo", GetType(Byte()))
این فیلد رو به جدولتون اضافه کنید

TB.Columns.Add(col)
پس از ریختن اطلاعات در دیتااداپتور و پرکردن در یک چدول جهت بهتر شدن برنامتون یک DATAVIEW نوسازی کنید

DIM VIEW AS NEW DATAVIEW



اون رد برابر با جدولی که در DataAdapter پر کردید قرار بدید تا داده ها درون این دیتاویو ریخته بشه

VIEW=TBL.AsDataView

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


For i As Integer = 0 To View.Count - 1

If IO.File.Exists(AppDomain.CurrentDomain.BaseDirecto ry & "\doc\"کدپرسنلی ".jpeg") = True Then
Using fs As New IO.FileStream(AppDomain.CurrentDomain.BaseDirector y & "\doc\کدپرسنلی 1234.jpeg", IO.FileMode.OpenOrCreate)
Using br As New IO.BinaryReader(fs)
Dim imgbyte(fs.Length) As Byte
imgbyte = br.ReadBytes(Convert.ToInt32((fs.Length)))
View(i)("Logo") = imgbyte
End Using
End Using
End If

Next
تا اینجا کارمون با شناسایی پزسنل در جدول و عکس اون تو بانک تموم شد
سپس یک دیتاست بسازید
از طریق منوی PROJECT و ADD NEW ITEM
بک دیتاست به پروزه اضابه کنید
با کلیک راست روی صفجه طراحی دیتاست هر چند تا فیلد نیاز دازید اضافه کنید فقط یادتون نره اسمشون و نوعشون با فیلد بانگتون و اون اسمی که در دستور SELECT بالا نوشتید یکی باشه و حتمن فیلد LOGO از نوغ BYTE اضافه کنید پس از ساخت اون دیتاست ذخیرش کنید
حالا یک فایل کرستال اضافه کنید و جهت ارتباط با منبع داده از همین دیتاستی که ساختید استفاده کنید
با گشیدن فیلد LOGI بر روی کریستال برنامه همون پرسنلی که در کوئری جستجو شده را با عکسش تظبیق داده در گزارش چاپ میکنه
به امید اینکه مورد استفاده قرار بگیره
اگر غلط املایی دارم ببخشید
سوال داشتید بپرسید

hosseinarefi
پنج شنبه 08 دی 1390, 13:57 عصر
سلام رفتم تست کنم مشکلم حل نشد

راستش رو بخوای همه کد ها رو متوجه نشدم ---- =مشکل= هیچ هیچ گونه مسیر یا عکس ذخیره شده ای در بانک نیست.
و فقط عکی به اسم کد ملی فرد در پوشه image ذخیره میشه.


تکرار واضع تر سوال:




دارم با یه بانک از قبل درست شده کار می کنم که اطلاعات حدود 100 هزار نفر داخلش هست . برنامه نویس قبلی اومده اطلاعات
رو در یه بانک اکسس ذخیره کرده و عکس اونا رو در مسیر برنامه بنام کد ملی نفر داخل یه پوشه بنام image ذخیره کرده.
نحوه دخیره عکس در پوشه image:
عکس هر نفر با کد ملی آن فرد ذخیره شده و براساس 2 حرف اول کد ملی فرد اگه پوشه وجود نداشت پوشه با نام 2 رقم اول کد ملی
درست می کند اگر پوشه وجود داشت آن عکس را در آن پوشه ذخیره می کند.
یعنی پوشه 19 هر چی عکس که دو رقم اول کد ملی انها 19 باشد هست در پوشه 58 تما عکس های با کد ملی که دو رقم انها 58 باشد و ....
با این ترفند میشه 1024 تا پوشه ساخت که برای جستجو عکس مورد نظر در تعداد زیاد که به ملیون برسد خیلی سریع عمل می کند.
اطاعات من هم بعد از چند سال به میلیون می رسد.

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

هیچ هیچ گونه مسیر یا عکس ذخیره شده ای در بانک نیست.
و فقط عکی به اسم کد ملی فرد در پوشه image ذخیره میشه.

سوال: میخوام با وارد کردن کد ملی نفر در یک textbox و زدن دکمه اطلاعات آن نفر (چاپ ملیه مشخصات )
همراه با عکس پرسنلی آن در کریستال ریپورت چاپ کنم.

فرم رو طراحی کردم فقط با آوردن عکس داخل کریستال ریپورت مشکل دارم.

سوال دوم:

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


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New OleDbConnection
Dim cmd As New OleDbCommand
Dim dt As New DataTable
Dim ds As New DataSet
Dim rpt As New CrystalReport1

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mydb.mdb"
cmd.Connection = con
cmd.CommandText = "select *from tbl_master where sh_mel='" + TextBox1.Text + "'"
con.Open()
cmd.ExecuteNonQuery()
da.SelectCommand = cmd
dt.Clear()
da.Fill(dt)
rpt.SetDataSource(dt)
Form2.CrystalReportViewer1.ReportSource = rpt
Form2.Show()
con.Close()
End Sub



اگه لطف کنین یه نمونه برنامه با زبان کوچکvb.net و بانک اکسس که فقط یه text box و یه دکمه داشته باشه و وقتی کد ملی فرد مورد نظر
رو وارد کردی نام و عکس اون رو نمایش بده براساس توضیحات بالا

خیلی خیلی ممنون.

ali_md110
پنج شنبه 08 دی 1390, 22:46 عصر
وقت نداشتم ولی پروژه ای واستون ساختم تو سیستم خودم جواب میده
چند تا عکس هست بنام 8 و 9 و10 و11 جند تا رکورد ساختگی ریختم با همین کد ها چستچو گنید
موفق باشید

alimanam
جمعه 09 دی 1390, 01:51 صبح
با سلام

به درخواست شما یک سورس کوچک نوشتم میتونی ازش استفاده کنی . عکس ها در پوشه Images ذخیره شدن و فقط اطلاعات کاربر که متشکل از شماره ملی , نام , نام خانوادگی , سن هست دریافت و به کریستال ریپورت ارجاع داده میشه . لطفا خودتون کمی وقت بگذارید و بیشتر مطالعه داشته باشید .

http://up3.iranblog.com/images/assdkigfmgjb460ucgii.png

موفق باشید ./

hosseinarefi
جمعه 09 دی 1390, 02:27 صبح
چشم من تازه شروع کردم ولی روزی 5 تا 9 ساعت کار می کنم .

ممنون
:افسرده:

mn_zandy63
شنبه 10 دی 1390, 22:41 عصر
سلام دوست من،
فرض کنیم اسم جدولی که داخل کریستال داری tbl_master باشه، و اسم فیلدی که کد ملی داخلش هست sh_mel باشه.
فرض کنیم محل قرار گرفتن عکس‌ها D:\Images باشه. و پسوند عکس ها jpg باشه.
Picture ای که داخل گزارش گذاشتی، روش کلیک راست کن Format Graphic رو بزن، داخل سربرگ Picture، در قسمت Graphic Location روی دکمه x-2 کلیک کن.
در پنجره باز شده کد زیر رو بنویس:

"d:\images\" + mid({tbl_master.sh_mel},1,2) + "\" + {tbl_master.sh_mel} + ".jpg"

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

hosseinarefi
شنبه 10 دی 1390, 23:48 عصر
Picture ای که داخل گزارش گذاشتی، روش کلیک راست کن Format Graphic رو بزن، داخل سربرگ Picture، در قسمت Graphic Location روی دکمه x-2 کلیک کن.

سلام
من خط بالا رو متوجه نشدم، لطفا توضیح بیشتر بدین.

davidrobert
یک شنبه 19 خرداد 1392, 15:26 عصر
با سلام

به درخواست شما یک سورس کوچک نوشتم میتونی ازش استفاده کنی . عکس ها در پوشه Images ذخیره شدن و فقط اطلاعات کاربر که متشکل از شماره ملی , نام , نام خانوادگی , سن هست دریافت و به کریستال ریپورت ارجاع داده میشه . لطفا خودتون کمی وقت بگذارید و بیشتر مطالعه داشته باشید .

http://up3.iranblog.com/images/assdkigfmgjb460ucgii.png

موفق باشید ./
رمز فایل چی هستش ممنون میشم بگید فایل رمز داره.

parsa202020
چهارشنبه 27 فروردین 1393, 23:40 عصر
دوست عزیز ممنون از راهنماییت

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

"c:\image\"+CStr ({Table1.f1})+".png"

"c:\image\"+ToWords ({Table1.f1})+".png"

"c:\image\"+ToText ({Table1.f1})+".png"

فقط خط زیر رو قبول میکنه :
"c:\image\22.png"

راستی عکس jpg رو هم قبول نمیکنه
"c:\image\22.jpg"

mc_laren
شنبه 30 فروردین 1393, 17:39 عصر
دوست عزیز ممنون از راهنماییت

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

"c:\image\"+CStr ({Table1.f1})+".png"

"c:\image\"+ToWords ({Table1.f1})+".png"

"c:\image\"+ToText ({Table1.f1})+".png"

فقط خط زیر رو قبول میکنه :
"c:\image\22.png"

راستی عکس jpg رو هم قبول نمیکنه
"c:\image\22.jpg"

دلیل کار نکردنش اینه که وقتی با دستورات بالا بک عدد رو به رشته تبدیل میکنی انتهاش "00." رو که اعشار باشه اضافه می کنه، برای حلش هم کافیه از دستور Replace استفاده کنی، مثلا :

replace(cstr(123),".00","")

saeid.ch81
سه شنبه 31 تیر 1393, 15:19 عصر
سلام میخوام عکس کد ملی رو تو بانک ذخیره کنم موقع پرینت تو کریستال رپورت برای هرکس که اطلاعتش چاپ شه تصویر کد ملی زمینه پرینت بشه

saeid.ch81
سه شنبه 31 تیر 1393, 22:29 عصر
میخوام که برای ثبت هر نفر در برنامه بتونم تصویرکارت ملی هم ذخیره کنم و تو موقع پرینتت گرفتن تصویر کارت ملی شخص تو زمینه پرینتم باشه