هلا كيف احفظ مقطع صوتي داخل الداتا بيس يعني نفس طريقة حفظ الصورة تتحول باينري ويس ولا في طرق ثانية
كيف احفظ مقطع صوتي داخل الداتا بيس
Yes, and it`s better to save the path not the file
انت بأيت بتتكلم بلغة الفرنجه ليه يا حازم كتير ؟ ربنا يستر عليك ومتتحولش وتبأه من إياهم :P ان شاء الله خير ويكون الموضوع بس مجرد ان مش عندك Keyboard عربي.
بالنسبة للسؤال, احفظ المسار الخاص بالملف في قاعدة البيانات ثم قم باستدعاءه كلما أردت هذا. هذه الطريقة لها مميزات وعيوب. من مميزاتها أنها توفر عليك الوقت الخاص بقراءة كمية كبيرة من البيانات وحفظها ومعالجتها. ومن عيوبها أن المستخدم ممكن في أي وقت أن ينقل الملف أو يغير اسمه أو الخ بدون أن يشعر برنامجك بهذا.
الطريقة الأخرى هي أن تحفظ الملف نفسه Binary داخل قاعدة البيانات, ومميزات هذه الطريقة حلت عيوب الطريقة السابقة بالاضافة إلى أنك ممكن تعمل Backup للـ Database في أي وقت وبهذا تكون عملت Backup للنظام بأكمله؛ الأمر الذي يصعب فعله ان استخدمت الطريقة السابقة. ومن عيوب هذه الطريقة طبعا أنها مهلكة ومستهلكة. ولكني أنصح بها, فبكتابة بعض الكود يمكنك أن تجعلها طريقة مثالية ( مثلا تستدعي البيانات الـ Binary منها ثم تحفظها كملفات في مجلد Temp وعندما تقرأ الملفات ان لم تجدها في الـ Temp قم باسترجاعها من قاعدة البيانات وخزنها في الـ Temp ثم اقرأها, وهذا شبيه بعمل مفهوم الـ Cache ) كما أنها ستسهل عليك عملية الـ Deployment.
على كل حال, أنت أدرى بنظامك الحالي فاختر الطريقة التي تراها الأفضل له تحديدا.
ممكن مثال
السلام عليكم هذا مثال على ذلك ,
لكن لو تطورين المشروع بحيث يتوافق مع فكرة معتز شمس , سيكون الاداء أفضل بكثير. إليك النصوص البرمجية لذلك
كود إضافة الصوت ..
With OFD
' Your custom Title
.Title = "صندوق تحميل الصوت"
.RestoreDirectory = True
' Filtering to show only the wav file
.Filter = "Image Files(*.WAV) |*.wav"
' IF the sound Picked Up Then
If .ShowDialog = Windows.Forms.DialogResult.OK Then
' Insert Sound.
Dim st As New FileStream(.FileName, FileMode.Open, FileAccess.Read)
Dim mbr As BinaryReader = New BinaryReader(st)
Dim buffer(st.Length) As Byte
mbr.Read(buffer, 0, CInt(st.Length))
st.Close()
Using cnn As New OleDb.OleDbConnection(My.Settings.cnn)
Using cmd As New OleDb.OleDbCommand( _
"UPDATE CollectionSounds SET Sound = @Sound WHERE SoundID = @SoundID", cnn)
With cmd
.CommandType = CommandType.Text
.Parameters.Add("@Sound", OleDbType.Binary).Value = buffer
.Parameters.Add("@SoundID", OleDbType.Integer).Value = _
CInt(SoundIDLabel1.Text)
cnn.Open()
.ExecuteNonQuery()
MsgBox("Sound added successfully..")
End With
End Using
End Using
End If
End Withكود قراءة الصوت.
Private Sub PlayCurrentSound() Try Dim strSQL As String = _ "SELECT Sound FROM CollectionSounds WHERE SoundID =" & CInt(SoundIDLabel1.Text) Using cnn As New OleDbConnection(My.Settings.cnn) Using cmd As New OleDbCommand(strSQL, cnn) Dim b() As Byte cnn.Open() b = cmd.ExecuteScalar() If (Not b Is Nothing) Then Dim stream As New MemoryStream(b, True) stream.Write(b, 0, b.Length) stream.Flush() My.Computer.Audio.Play(b, AudioPlayMode.WaitToComplete) strSQL = Nothing stream.Close() b = Nothing End If End Using End Using Catch ex As Exception MsgBox(ex.Message) End Try End Sub
و المرفق بالاسفل , قاعدة البيانات Access 2003 , و المشروع على VB.NET 2005
بالتوفيق إن شاء الله.
تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 23 يونيو 2007 في 17:48
في المثال يتضح المقال
هذا الموضوع مغلق.
