PDA

View Full Version : سوال درباره تصویر در بانک اطلاعاتی



soheil3242
پنج شنبه 28 شهریور 1387, 15:09 عصر
سلام دوست جونها
1- من در برنامه ام یک picbox دارم که عکس رو از بانک میخونه و نمایش میده ولی وقتی میخوام تو فرم یه مثلا مقدار فیلد دیگه رو عوض کنم وقتی دکمه update رو کلیک میکنم پیغام میده که پارامتر picturebox نمیتونه null باشه . برای رفع این مشکل راهی دارید؟

2- چه طور میتونم کاری کنم که فایل تصویر انتخاب شده از طریق openfildialoge فقط با اندازه مشخصی وارد picbox بشه ؟ یعنی هر اندازه ای باشه فقط با آن اندازه وارد pic box شود؟

r_zamani
پنج شنبه 28 شهریور 1387, 15:29 عصر
سلام
1 - به نظر من عکس ها رو رو فایل ذخیره کن تا توی دیتابیس. این جوری حجم دیتابیست زیاد میشه
2 - من تو یه پروزه که نوشتم (عکس ها هم تو فایل ذخیره میشد ) یک picbox اضافی گذاشتم روی فرم و داخلش یه عکس پیش فرض گذاشتم
که البته مخفیه و پشت کنترلای دیگه هست و دیده نمیشه
اگه picbox از open file .. عکس بگیره که هیچ و گرنه این تصویر داخل picbox مجازی رو توش میریزم
که البته این عکس یه عکسه که با فوتوشاپ طراحی شده و توش نوشته : بدون تصویر
اینجوری picbox ت خالی نمیمونه :لبخندساده:

MORTEZA66
پنج شنبه 28 شهریور 1387, 18:00 عصر
1)مشكل شما در دستور آپديت و يا نحوه ذخيره عكس در ديتا بيس است چون من همين الان روي يه پروژه كار مي كنم كه عكس هم در ديتا بيس داره ولي به آپديت مشكلي نداره
2)اين كد رو امتحان كن


Dim img As Bitmap
img = New Bitmap(picbox.Image, New Size(90, 100))
picbox.Image = img
Dim ms AsNew MemoryStream()
img.Save(ms, Imaging.ImageFormat.Jpeg)

MORTEZA66
پنج شنبه 28 شهریور 1387, 18:08 عصر
اينم نحوه ذخيره عكس در ديتا بيس كه من استفاده مي كنم


Dim ms As New IO.MemoryStream()
Dim img As Image
img = User_pic.Image
img.Save(ms, Drawing.Imaging.ImageFormat.Png)
Dim arrImage() As Byte = ms.GetBuffer
ms.Close()
dap1.InsertCommand.Parameters.Add(New OleDb.OleDbParameter("image", Data.SqlDbType.Image)).Value = arrImage
'''''''''''''''''
sqltext = "Insert into tblMembers values()'.......,@image,......)

dap1 از نوع Public dap1 As New OleDb.OleDbDataAdapter است
وقبل از استفاده بايستي


dap1.InsertCommand = New OleDb.OleDbCommand
dap1.InsertCommand.Connection = con1

كه con1 از نوع Public con1, con2 As New OleDb.OleDbConnection
و قبل از استفاده از اون بايستي connectionString رو تنظيم كرده و اونو open كنيد

براي بازيابي عكس


Dim dr As DataRow
Dim dt As New DataTable
sqltext = "select * from tblMembers where memberId='" + memberIdtxt.Text.Trim + "'"
dap1.SelectCommand.CommandText = sqltext
dap1.Fill(dt)
dr = dt.Rows(0)
Dim arrPicture() As Byte = CType(dr("UserPic"), Byte())
Dim ms As New IO.MemoryStream(arrPicture)
Dim img As Image = Image.FromStream(ms)
User_pic.Image = img

user_pic نام pictureBox است

soheil3242
جمعه 29 شهریور 1387, 08:54 صبح
سلام از جوابتون ممنون ولی مشکل من ذخیر ه یا بازیابی یا به روز رسانی عکس نیست در واقع برنامه طوری عمل میکند که فیلدهای موجود در فرم را برای ویرایش رکورد مجددا در رکورد ثبت میکند یعنی به دنبال یک رکورد خاص میگردیم وقتی آن را در gridview پیدا کردیم با زدن یک کلید محتوای خانهای رکورد در فرم دیگری در فیلدهای مربوطه نمایش داده میشود
حالا کاربر فیلد دیگری را غیر از آن عکس عوض میکند بعد با زدن کلید ویرایش تمام فیلدهای اطلاعات چه تغییر کرده باشند و چه مقادیر قدیم را داشته باشند در رکورد مربوطه دوباره نویسی میشود اینجاست که پیام خطا داده میشود که متغیر picbox نمیتواند null باشد یعنی حتما باید مقدار عکس را مجددا مقدار دهی کرد؟ مثل این است که عکس فقط نمایش داده میشود ولی موقع ثبت دوباره همان عکس مشکل عدم تشخیص image تو سط picbox وجود دارد .

MORTEZA66
جمعه 29 شهریور 1387, 17:13 عصر
اميدوارم از اين جواب من عصباني نشيد
ولي خوب ايني كه شما ميگيد اصلا مشكل نيست مگه عكس رو در pictureBox نمايش نمي ديد خوب به همون روشي كه در مرحله اول عكس درون pictureBox رو در فرم ورود اطلاعات Insert كرديد دوباره در اين مرحله هم عكس درون pictureBox رو insert كنيد يا آپديت كنيد چون بالاخره عكس درون pictureBox ممكنه عوض شده باشه و شما بايد در عمل آپديت اون رو آپديت كنيد حالا اين چيزي كه ميگيد عدم تشخيص image توسط picbox يعني چي من كه نفهميدم !!!!!!