PDA

View Full Version : سوال: نمایش عکس های استخراج شده از دیتابیس



klinton
سه شنبه 27 دی 1390, 14:57 عصر
سلام
من میخوام چند تا عکسی که از دیتابیس خوندم و تو دیتاست گذاشتم رو یه جوری تو فرم نشون بدم ممنون میشم پیشنهاد بدین

ROSTAM2
یک شنبه 28 اسفند 1390, 17:16 عصر
با سلام
اگر تصاویر رو بصورت باینری درون دیتابیس ذخیره کنی میتونی قبل از نمایش استخراج بعد نمایش و وقتی نیاز به اون نداشتی اون رو حذف کنی بهتره آدرس استخراج طوری باشه که دسترسی به اون آسون باشه
این فقط یه پیشنهاده که تصاویر با حجم بالا رو هم Support می کنه

فرید نجفلو
یک شنبه 28 اسفند 1390, 20:31 عصر
اگه درست ذخیره کردید باشید کار راحتیه!
اطلاعات عکسی رو دارید تبدیل به IO.MemoryStream کنید بعد با استفاده از Image.FromStream اونو داخل picturebox لود کنید

aftabeshargh
یک شنبه 28 اسفند 1390, 20:35 عصر
سلام
دیتابیس sql هستش ؟ لزومی داره اول تو دیتاست ببری؟
با فرض اینکه از Sql استفاده میکنید :
1- عکس رو به صورت image ذخیره کن 2 - فرمتش رو با مثلا nvarchar

(اگر با ذخیره سازی مشکل داشتی بگو راهنمایی کنم) فعلا برا خوندن از دیتابیس بحث میکنیم :
با دستورات ساده زیر با یه شرطی (مثلا انتخاب فلان id از دیتابیس ) میخوایم عکسش رو تو یه picturebox نشون بدیم



Dim strImageType As String

Dim ff As IO.File

Dim myConnection As New SqlConnection("conection shoma")
Dim myCommand As New SqlCommand("Select * from tbl WHERE id=" + dgv.CurrentRow.Cells(0).Value.ToString, myConnection)

Try
myConnection.Open()
Dim myDataReader As SqlDataReader
myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConne ction)

Do While (myDataReader.Read())

strImageType = myDataReader.Item("picf")
ff.WriteAllBytes("c:\test" + strImageType, myDataReader.Item("pic"))
Loop

myConnection.Close()

Catch SQLexc As SqlException

End Try

picturebox1.ImageLocation = "c:\test" + strImageType




Catch ex As Exception

End Try


pic نام ستون عکس در دیتابیس و fpic نام فرمتش.

فرید نجفلو
یک شنبه 28 اسفند 1390, 21:02 عصر
- عکس رو به صورت image ذخیره کن 2 - فرمتش رو با مثلا nvarchar

nvarchar نمیشه باید از نوع Image باشه!
تو تابع هم ایراد دارید :
باید از dataAdapter و datatable استفاده کنید
نیازی به ذخیر سازی در فایل ندارید!

Public Shared Function ReadFileFromDB(ByVal Table As String, ByVal ColumnToRead As String, ByVal Condition As String) As Byte()
Dim TSQL As String = ""
TSQL = ""
TSQL &= "Select " & ColumnToRead & " From " & Table & vbNewLine
If Condition <> "" Then
TSQL &= " Where " & Condition
End If
Dim ConnStr As String = "ConnectionString"
Using MyConn As New SqlClient.SqlConnection(ConnStr)
Dim Adp As New SqlClient.SqlDataAdapter(TSQL, MyConn)
Dim dt As New DataTable
Adp.Fill(dt)
Dim Result() As Byte
Result = dt.Rows.Item(0).Item(0)
Return Result
End Using
End Function
Private Sub LoadPic()
Dim PicData = ReadFileFromDB("Table1", "Column1", "ID=1")
Dim MS As New IO.MemoryStream(PicData)
Me.PictureBox1.Image = Image.FromStream(MS)
End Sub


اگه خواستید کد ذخیره در پایگاه داده رو هم بدم:لبخندساده:

aftabeshargh
یک شنبه 28 اسفند 1390, 21:31 عصر
1-خود عکس رو با image باید ذخیره کرد 2- فرمتش (مثلا .jpg) با nvarchar هم میشه و جواب میده (حالا جدای از بحث اصولیش " که شاید معتبر نباشه اما جواب میده
)

aftabeshargh
یک شنبه 28 اسفند 1390, 21:53 عصر
یه سوال
دیتاست رو میشه درون دیتاتیبلش یه ستون به نام pic (که در جدولی در دیتابیس sql داریم) ایجاد کرد و عکس رو آورد تو دیتاست ؟( مشکلم با کریستال ریپورته ) میخوام دیتاسورس کریستال رو بزارم یه دیتاست و دیتاست رو از دیتابیسم پر کنم
توضیح بیشتر : :چشمک:
میخوام گزارشم تو کریستال اطلاعاتش رو از دوتا جدول بگیره ( یعنی با کلیک رکورد مورد نظر گزارشش رو نشون بده به این صورت که نام و نام خانوادگی و... رو از یه جدول و عکسش رو از جدول pic بگیره و شرط مشترک این دو جدول یکسان بودن کد ملی در دو جدول هستش ) و تاحالا هرچه از دیتاست استفاده کردم دیگه مشکل درخواست یوزر و پسورد رو در سیستم دیگه ای نداشتم (خیلی توضیحاتم ناجوره نه ؟:بامزه:)
خلاصه :گیج: : یه دیتاست دارم به نام ds که tabel1 , tabel2 درونش قرار دادم و ستون های هر کدوم به صورت زیره
tabel1 : name , family ,...
table2: pic
حالا با ساختن یه کانکشن و دستور دریافت کل اطلاعات از جدول مربوطه در دیتابیس میخوام نام و فمیلی و .. و عکس رو بگیرم و درون tabel1 , table2 دیتاست Fill کنم
مشکل کارم : table2 که مربوط به عکس درون دیتاست هستش Fill نمیشه :عصبانی++::گریه:



Dim ds As New dskelas
Dim cn As New SqlConnection

Dim cmd As New SqlCommand
Dim cmdd As New SqlCommand

Dim adpp As New SqlDataAdapter
Dim adp2 As New SqlDataAdapter
cn.ConnectionString = "Data Source=PC1;Initial Catalog=dbjahedi;Integrated Security=True"

cmd.Connection = cn
cmd.CommandType = CommandType.Text

cn.Open()
cmd.CommandText = ("Select * from tbl_s where km='" + txtkm.Text + "'")

cmdd.CommandText = ("Select * from tbl_p where km='" + txtkm.Text + "'")
adp2.SelectCommand = cmdd

adpp.SelectCommand = cmd
adpp.Fill(ds, "DataTable1")
adp2.Fill(ds, "DataTable2")

Dim rp As New rpsabt
rp.SetDataSource(ds)

fpfsa.CrystalReportViewer1.ReportSource = rp

cn.Close()

fpfsa.ShowDialog()


خواهشا نگید مربوط به بخش کریستال و تایپیک کریستال :گریه:
یعنی دیتاست جدولش با عکس پر نمیشه ؟
مشکل کجاست ؟
عکس خطا رو هم گذاشتم

Hybrid
یک شنبه 28 اسفند 1390, 22:37 عصر
سلام ، خطا میگه کانکشن رو به SelectCommand.connection نسبت ندادین.

cmdd.connection رو پر نکردین.



در ضمن چرا 2 تا دیتا تیبل؟؟؟ یک فیلد به جدول اول اضافه کن مثلا به نام Pic_location و جدول دوم رو حذف کن و مشکل واسه خودت درست نکن.

فرید نجفلو
یک شنبه 28 اسفند 1390, 22:45 عصر
دوست عزیز این همه گریه واسه این
خوب بی دقتی کردین
از متن خطا هم معلومه که!!!

این خط رو ننوشتید:

cmdd.Connection = cn

انتخاب اسم خیلی مشابه این دردسر ها رو هم داره!

aftabeshargh
یک شنبه 28 اسفند 1390, 23:08 عصر
تو دیتاست column برا عکس باید چجوری باشه ؟ مثل column که برا name , family هستش ؟

عکس ها رو ببینید " نمیدونم دیگه خطای این کجاست !

aftabeshargh
یک شنبه 28 اسفند 1390, 23:20 عصر
چجوری تو دیتاست typ pic باید عوض شه ؟!

aftabeshargh
یک شنبه 28 اسفند 1390, 23:31 عصر
پروپرتی دیتاست " نوع ستون pic رو فقط باید system.byte میزاشتم :لبخندساده:

aftabeshargh
دوشنبه 29 اسفند 1390, 00:21 صبح
نمیدونم چرا با دستورات زیر صفحه هات کریستال اطلاعات اشخاص زیادی رو میاره " میخوام بر اساس کد ملی " فقط اطلاعات یه شخص رو از دو جدول دیتابیس تو دیتاست و سپس کریستال بیاره
Dim ds As New dskelas
Dim cn As New SqlConnection

Dim cmd As New SqlCommand
Dim adpp As New SqlDataAdapter
cn.ConnectionString = "Data Source=PC1;Initial Catalog=dbjahedi;Integrated Security=True"

cmd.Connection = cn
cmd.CommandType = CommandType.Text
cn.Open()
ds.Clear()

cmd.CommandText = ("Select * from tbl_p,tbl_s where tbl_p.km='" + txtkm.Text + "'and tbl_s.km='" + txtkm.Text + "'")
adpp.SelectCommand = cmd

adpp.Fill(ds, "DataTable1")

Dim rp As New rpsabt
rp.SetDataSource(ds)
fpfsa.CrystalReportViewer1.ReportSource = rp
cn.Close()
fpfsa.ShowDialog()

aftabeshargh
دوشنبه 29 اسفند 1390, 09:22 صبح
کسی از دوستان دستور sql رو اصلاح نمیکنه ؟ (cmd.commandtext)