PDA

View Full Version : اضافه کردن عکس به دیتابیس اکسس



art2000ir
جمعه 31 فروردین 1386, 00:46 صبح
من کد اضافه کردن عکس به دیتابیس اکسس رو میخوام البته گشتم کدهای موچوذ با بانک اس کیو ال کار می کنه که تو تبدیل به اکسس ارور میده و مشکلات زیادی داره ممنوم میشم کسی بتونه کمک کنه

مهدی نان شکری
جمعه 31 فروردین 1386, 12:58 عصر
این کد رو با عجله نوشتم. شاید به دردتون بخوره. اگه اشکالی داشت مطرح کنین.


Dim fs As IO.FileStream = New IO.FileStream("D:\1.gif", IO.FileMode.OpenOrCreate, IO.FileAccess.Read)
Dim rawData() As Byte = New Byte(fs.Length) {}
fs.Read(rawData, 0, System.Convert.ToInt32(fs.Length))
fs.Close()
OleDbDataAdapter1.InsertCommand.Parameters.Add("image", OleDb.OleDbType.VarBinary).Value = rawData
Me.OleDbConnection1.Open()
OleDbDataAdapter1.InsertCommand.CommandText = "Insert Into tImages Values(@image)"
OleDbDataAdapter1.InsertCommand.ExecuteNonQuery()
MsgBox("Image saved to database")
Me.OleDbConnection1.Close()

art2000ir
جمعه 31 فروردین 1386, 15:22 عصر
با تشکر از راهنمائی شما
من کد شمارو به شکل زیرکار کردم


s3 = "provider=microsoft.jet.oledb.4.0;data source =" + Application.StartupPath + "\db1.mdb; jet oledb:database password=;"
con = New OleDbConnection(s3)
con.Open()
s4 = "select * from regist "
da = New OleDbDataAdapter(s4, con)
da.Fill(ds, "regist")



Dim fs As IO.FileStream = New IO.FileStream("c:\1.jpg", IO.FileMode.OpenOrCreate, IO.FileAccess.Read)
Dim rawData() As Byte = New Byte(fs.Length) {}

fs.Read(rawData, 0, System.Convert.ToInt32(fs.Length))
fs.Close()
da.InsertCommand.Parameters.Add("image", OleDb.OleDbType.VarBinary).Value = rawData
Me.con.Open()
da.InsertCommand.CommandText = "Insert Into tImages Values(@image)"
da.InsertCommand.ExecuteNonQuery()
MsgBox("Image saved to database")

اما ارور میده
من تیبلم یک فیلد از نوع oleb هستش به نام picture در تیبل regist از دیتابیس db1
حالا نمیدونم اشکال کحاست
امکان اضافه کردن از طریق دیتاست نیستش ؟

saeed_rezaei
شنبه 01 اردیبهشت 1386, 09:53 صبح
Dim ms As New MemoryStream
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)

Dim arrImage() As Byte = ms.GetBuffer
ms.Close()


Dim isConnecting As Boolean = True
Dim imageStream As MemoryStream = New MemoryStream()

While isConnecting
Try

Dim northwindConnection As New OleDbConnection(connectionstring)
Dim strSQL As String = _
"INSERT INTO table1 (img)" & _
"VALUES (@image)"
Dim cmd As New OleDbCommand(strSQL, northwindConnection)
With cmd

.Parameters.Add(New OleDbParameter("@image", arrImage)) '.Value = arrImage
End With

northwindConnection.Open()
cmd.ExecuteNonQuery()
northwindConnection.Close()
isConnecting = False
MessageBox.Show(arrFilename(0) & " saved to the database.", _
"Image Save Status", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
Catch sqlExc As OleDbException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit While
Catch exc As Exception
End Try
End While

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

art2000ir
شنبه 01 اردیبهشت 1386, 15:24 عصر
ممکنه بگین اسم دیتابیس ،جدول ، فیلد بانک شما چیه که من بتونم عوض کنم و کچای این کد شما به بانک متصل میشید ؟
ایا جدول باید دارای یک فیلد باشد ؟یا می توان فیلدهای متعدد داشت و عکس را به یک فیلد مشخص نسبت داد ؟
در ضمن این کد مربوط به بانک اسکیو ال هست ؟

مهدی نان شکری
شنبه 01 اردیبهشت 1386, 23:34 عصر
با سلام
می بخشید کمی دیر جواب می دم
اگه مشکلتون حل نشده می شه پیغام خطا رو بنویسید؟

saeed_rezaei
یک شنبه 02 اردیبهشت 1386, 08:24 صبح
ممکنه بگین اسم دیتابیس ،جدول ، فیلد بانک شما چیه که من بتونم عوض کنم و کچای این کد شما به بانک متصل میشید ؟
ایا جدول باید دارای یک فیلد باشد ؟یا می توان فیلدهای متعدد داشت و عکس را به یک فیلد مشخص نسبت داد ؟
در ضمن این کد مربوط به بانک اسکیو ال هست ؟
سلام
این رو من برای بانک اطلاعاتی اکسس کار کردم. مشکلی نداره. البته بازیابیش رو نمی دونم می تونید انجام بدید یا نه.
اسم بانک اطلاعاتی رو توی کانکشن استرینگ می یارید و البته من اینجا تعریف نکردم. من فقط cn رو تعریف کردم که نماینده همون کانکشن استرینگ هست. رشته اتصال من اینه:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=I:\db1.mdb"

اسم بانک اطلاعاتی در رشته بالا مشخصه.
Data Source=I:\db1.mdb

اگه هم در کد زیر دقت کنی مبینی که اسم جدول table1 هست. می تونی اسم جدول خودت رو بنویسی. نام فیلد هم img هستش. من برای شفافیت مثال، فقط یه فیلد در نظر گرفتم. شما می تونید هر چند تا که بخواید اضافه کنید. فقط باید نوع فیلد عکستون رو ole در نظر بگیرید که مثل اینکه همین کار رو هم کرده اید.
این مثال رو من قبلا برای sql نوشته بودم اما چون وقت نداشتم، خیلی سریع تغییراتی توش دادم که با اکسس کار می کنه اگه به استرینگ دقت کنی متوجه می شی.
اما اگه جایی از کلمه sql نام بردم، دقت کنید متوجه می شید که فقط یه رشته بوده و نه چیز دیگه.
اصلا اجازه بده کد رو شفاف تر واست بنویسیم.


Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click


Dim ms As New MemoryStream
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
Dim arrImage() As Byte = ms.GetBuffer

ms.Close()

Dim isConnecting As Boolean = True
Dim imageStream As MemoryStream = New MemoryStream()
While isConnecting
Try

Dim Connection As New OleDbConnection(connectionstring)
Dim str_insert As String = _
"INSERT INTO table1 (img)" & _
"VALUES (@image)"


Dim cmd As New OleDbCommand(str_insert, Connection)
cmd.Parameters.Add(New OleDbParameter("@image", arrImage)) '.Value = arrImage

Connection.Open()
cmd.ExecuteNonQuery()
Connection.Close()


isConnecting = False

msgbox ("image saved")

Catch Exc As OleDbException
MessageBox.Show(Exc.ToString, " Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit While
Catch exc As Exception

End Try
End While
End Sub

art2000ir
یک شنبه 02 اردیبهشت 1386, 12:30 عصر
با تشکر از همه دوستان
مشکل من خل شد و انشاالله راهی که استفاده کردم (که البته دوستان کمک کردند)را برای دوستان می نویسم البته بدون کوئری وبا دیتاست که بازیابی هم اسان باشد

__H2__
یک شنبه 02 اردیبهشت 1386, 15:17 عصر
سلام
کد سورس تحت به دو زبان VB و #C با اتصال به اکسس و تحت وب:
http://www.h-two.info/Download.aspx?File=Asp.NetRuntimeImages.zip

art2000ir
دوشنبه 03 اردیبهشت 1386, 11:25 صبح
این کد برای اضافه کردن عکس به دیتابیس اکسس از طریق دیتاست
لازم به ذکر است که تمام این کد توسط دوستان در این تاپیک و تاپیک های دیگز نوشته شده و من صرفا کدها را برای برنامه خودم مرتب کردم(بابا حق کپی رایت :چشمک: )





Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Dim con, con2 As OleDbConnection
Dim da, da2 As OleDbDataAdapter
Dim ds, ds2 As New DataSet
Dim s1, s2, s3, s4, s5 As String
Dim newrow, row1, row2 As DataRow
Dim cb As OleDbCommandBuilder
Dim adr1, adr2, ograt As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
‘در این قسمت شما به دیتابیس متصل می شوید اسم دیتابیس gldb.mdb
ds.Clear()
s1 = "provider=microsoft.jet.oledb.4.0;data source =" + Application.StartupPath + "\gldb.mdb; jet oledb:database password=;"
con = New OleDbConnection(s1)
con.Open()
s2 = "select * from regist"
da = New OleDbDataAdapter(s2, con)
da.Fill(ds, "regist")

newrow = ds.Tables("regist").NewRow

‘در این قسمت شما یک پیکچرباکس حاوی یک عکس دارید
‘فیلدی است که عکس درونش ذخیره می شود temp1
Dim fs As New IO.FileStream("adr1", System.IO.FileMode.Create)
PictureBox1.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim aArray(CType(fs.Length, Integer) - 1) As Byte
fs.Position = 0
fs.Read(aArray, 0, aArray.Length)
newrow.Item("temp1") = aArray
fs.Close()
‘و در اخر اطلاعات را از دیناست به جدول بر می گردانم

ds.Tables("regist").Rows.Add(newrow)
cb = New OleDbCommandBuilder(da)
da = cb.DataAdapter
da.Update(ds, "regist")
MsgBox("اطلاعات ثبت شد")

zarrin_306
دوشنبه 03 اردیبهشت 1386, 20:35 عصر
اینم یک پروژه برای شما

nasser_p
یک شنبه 09 اردیبهشت 1386, 16:55 عصر
لطفا در مورد عکسی (که از پایگاه select شده )میخواهیم در picturebox قرار دهیم اگر کسی در vb.net اطلاعی دار ه توضیح بده

art2000ir
سه شنبه 11 اردیبهشت 1386, 08:01 صبح
منظور اینه که عکس در بانک است یا ادرس عکس ؟

saeed_rezaei
سه شنبه 11 اردیبهشت 1386, 13:00 عصر
لطفا در مورد عکسی (که از پایگاه select شده )میخواهیم در picturebox قرار دهیم اگر کسی در vb.net اطلاعی دار ه توضیح بده

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



Dim arrPicture() As Byte = CType(dsPictures.Tables(0).Rows(X)(Y), Byte())
Dim ms As New MemoryStream(arrPicture)
With PictureBox2
.Image = Image.FromStream(ms)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.Fixed3D
End With
ms.Close()

m_diamond67
دوشنبه 23 دی 1387, 23:11 عصر
سلام
کد سورس تحت به دو زبان VB و #C با اتصال به اکسس و تحت وب:
http://www.h-two.info/Download.aspx?File=Asp.NetRuntimeImages.zip

دوست عزیز دانلود نمی شه.در صورت امکان تو سایت آپلود کنید.
با تشکر

parsehvb
سه شنبه 24 دی 1387, 07:58 صبح
اولاً اگر تاریخ تاپیک رو ملاحظه می فرمودید متوجه می شدید که علت این امر چیست با این حال برای نمونه این برنامه رو تست کنید

mohsen200339
جمعه 25 اردیبهشت 1388, 17:53 عصر
سلام
من می خواهم در فرم اکسس دکمه (Buttom) ای را تعریف کنم که با زدن آن پنجره Browsers باز شده و عکسی را انتخاب کرده و آن را در قسمتی از فرم که مشخص کرده ایم نشان دهد و درون اکسس ذخیره شود همچنین دکمه ای برای حذف آن نیز تعریف کنم .
مشابها برای فیلم نیز این کار را انجام دهد به صورتی که فیلم در مکان مورد نظر قرار گرفته و مدیا پلیر آن را اجرا کند . مشابه عکس
من اطلاعاتی در مورد برنامه نویسی ندارم لطفا به طور کامل راهنمایی کنید .
ممنون

mreza1983
دوشنبه 04 خرداد 1388, 10:50 صبح
سلام به همگی
من یه دیتابیس اکسس درست کردم واسه تنظیم فاکتور که توی اون یه Table به اسم فروشنده - یکی به اسم خریدار- و یکی هم به اسم صدور فاکتور تنظیم کردم بعد توی relationships بین خریدار و صدور فاکتور یک ارتباط یک به چند درست کردم و ارتباط بین فروشنده و صدور فاکتور یک به یک هست. یک به چند نمیشه.
بعد یه Query از صدور فاکتور گرفتم و هرسه جدول صدور فاکتور - خریدار و فروشنده رو گذاشتم .حالا که میخوام چند تا فاکتور صادر کنم به تکرار کد فروشنده ایراد می گیره.
لطفا راهنماییم کنین که چطوری میتونم ارتباط رو یک به چند کنم یا اینکه بتونم یه فروشنده واسه همه فاکتورام به عنوان سربرگ داشته باشم.

__H2__
چهارشنبه 06 خرداد 1388, 12:31 عصر
سلام

من می خواهم در فرم اکسس دکمه (Buttom) ای را تعریف کنم که با زدن آن پنجره Browsers باز شده و عکسی را انتخاب کرده
شاید تاپیک زیر کمک کند:
http://barnamenevis.org/forum/showthread.php?p=369669

دانلود مستقیم نمونه کد:
http://support.h02.ir/fwlink/?LinkId=1000198547


... ارتباط بین فروشنده و صدور فاکتور یک به یک هست. یک به چند نمیشه.
...حالا که میخوام چند تا فاکتور صادر کنم به تکرار کد فروشنده ایراد می گیره.
اگر فیدهای خود را به درستی index و primarykey کنید رابطه درست برقرار خواهد شد.
اگر نیازمند یک رابطه یک به چند هستید، باید primarykey جدول "فروشنده" را به فیلدی غیر primarykey (و ترجیحاً index دار) از جدول "فاکتور" متصل کنید.

برای خطا هم لطفاً متن کامل خطا را به همراه نام و نوع تک تک فیلدهای جدول اینجا قرار دهید تا بتوان بهتر متوجه دلیل خطا شد و کمک دقیقتری کرد.
موفق باشید.

rasekhi
سه شنبه 21 دی 1389, 09:31 صبح
سلام میشه کد ذخیره و بازیابی عکس در بانک را به زبان C# هم بذارید من خیلی لازم دارم