23-02-19, 03:08 AM
(آخر تعديل لهذه المشاركة : 08-03-19, 03:33 PM {2} بواسطة حريف برمجة.)
السلام عليكم ،،
يوجد مثال على فيجوال ستوديو 2010
اقدم لكم اليوم درس عن قاعدة بيانات XML
حسب مشاهدتي لبعض المشاركات قد يصل أقصى حجم للملف 5 غيغا بايت ،، بمعنى ملايين السجلات .
المهم اصدار الفيجوال عندي 2019 ،، قد يواجه البعض صعوبة فتحه على الإصدارات القديمة لذلك سوف اضع المثال والصور للإستفادة من الموضوع للجميع .
لابد من انشاء ملف XML والطريقة كالتالي :
كلك يمين واختيار جديد (New) وانشاء ملف txt Documents
دبل كلك لفتح الملف وأختر حفظ باسم (Save As)
اتبع الصور :
كلك يمين على ملف XML واختر تحرير (Edit)
الصق الأسطر التالية واعمل حفظ :
السطر الأول تنسيق لقبول جميع أنواع الأحرف ،، ثم يليه اسم (DataBase1) وهي بمثابة قاعدة البيانات ،، سيكون بداخلها جداول وكل جدول بداخله السجلات .
لا يهم ترتيب الجداول بداخل القاعدة بمعنى قد يكون جدول رقم 1 ثم جدول رقم 2 ثم جدول رقم 1 .
وشكل الفورم كالتالي :
كود الحفظ :
كود التعديل :
كود الحذف :
كود البحث برقم السجل (ID) :
كود تفريغ التكستات :
كود جلب آخر رقم (ID) + 1 :
كود عرض السجلات في الداتاقريد فيو :
كود الكوماند (Clear Text)
كود النقر على اداة عرض الصورة لاختيار صورة :
كود تحويل الصورة إلى سلسلة نصية base64 والعكس :
أكواد خاصة بالداتاقريدفيو وهي عند النقر على الصف ينقل السجل للتكستات وتلوين الداتاقريدفيو بلونين متدرجين و ترقيم الصفوف من الرقم 1 حتى آخر سجل :
كود الفورم لود والمسئول عن لو ملف XML غير موجود يقوم بإنشاءه بدون تدخل منك ولكن انا وضحت بالأعلى كيف تنشئه يدوياً لزيادة المعلومة ،، ايضاً عرض البيانات في القريد ووضع الترقيم التلقائي في التكست :
كود الخروج من البرنامج :
ملاحظة :: لنفترض تريد عمل شاشتين الأولى للتعامل مع (Table1) والثانية للتعامل مع (Table2)
فقط تغير اسم الجدول وأسماء الحقول في أكواد الفورم الآخر .
يوجد مثال على فيجوال ستوديو 2010
اقدم لكم اليوم درس عن قاعدة بيانات XML
XML stands for eXtensible Markup Language.
XML was designed to store and transport data.
XML was designed to be both human- and machine-readable.
حسب مشاهدتي لبعض المشاركات قد يصل أقصى حجم للملف 5 غيغا بايت ،، بمعنى ملايين السجلات .
المهم اصدار الفيجوال عندي 2019 ،، قد يواجه البعض صعوبة فتحه على الإصدارات القديمة لذلك سوف اضع المثال والصور للإستفادة من الموضوع للجميع .
لابد من انشاء ملف XML والطريقة كالتالي :
كلك يمين واختيار جديد (New) وانشاء ملف txt Documents
دبل كلك لفتح الملف وأختر حفظ باسم (Save As)
اتبع الصور :
كلك يمين على ملف XML واختر تحرير (Edit)
الصق الأسطر التالية واعمل حفظ :
كود :
<?xml version="1.0" encoding="utf-8"?>
<DataBase1>
</DataBase1>
السطر الأول تنسيق لقبول جميع أنواع الأحرف ،، ثم يليه اسم (DataBase1) وهي بمثابة قاعدة البيانات ،، سيكون بداخلها جداول وكل جدول بداخله السجلات .
لا يهم ترتيب الجداول بداخل القاعدة بمعنى قد يكون جدول رقم 1 ثم جدول رقم 2 ثم جدول رقم 1 .
وشكل الفورم كالتالي :
كود الحفظ :
كود :
Dim xd As New XmlDocument()
xd.Load(Application.StartupPath & "\XmlTest.xml")
Dim nod As XmlNode = xd.SelectSingleNode("/DataBase1/Table1[@ID=" & TextBox1.Text & "]")
If nod IsNot Nothing Then
MsgBox("السجل موجود مسبقاً", 64, "XML Example")
Else
Dim cr As String = Environment.NewLine
Dim NewUser As String =
"<Table1 ID='" & TextBox1.Text & "'>" & cr &
" <Name>" & TextBox2.Text & "</Name>" & cr &
" <Phone>" & TextBox3.Text & "</Phone>" & cr &
" <Img>" & imgstr & "</Img>" & cr &
" </Table1>"
Dim docFrag As XmlDocumentFragment = xd.CreateDocumentFragment()
docFrag.InnerXml = NewUser
Dim root As XmlNode = xd.DocumentElement
root.AppendChild(docFrag)
xd.Save(Application.StartupPath & "\XmlTest.xml")
Showdataingrid()
Cleartxt()
End If
كود التعديل :
كود :
Dim xd As New XmlDocument()
xd.Load(Application.StartupPath & "\XmlTest.xml")
Dim nod As XmlNode = xd.SelectSingleNode("/DataBase1/Table1[@ID=" & TextBox1.Text & "]")
If nod IsNot Nothing Then
nod.ChildNodes(0).InnerText = TextBox2.Text
nod.ChildNodes(1).InnerText = TextBox3.Text
imgstr = ImageToString(PictureBox1.Image)
nod.ChildNodes(2).InnerText = imgstr
MsgBox("تم تعديل السجل", 64, "XML Example")
xd.Save(Application.StartupPath & "\XmlTest.xml")
Showdataingrid()
Cleartxt()
Else
MsgBox("السجل غير موجود")
End If
كود الحذف :
كود :
Dim xd As New XmlDocument()
xd.Load(Application.StartupPath & "\XmlTest.xml")
Dim nod As XmlNode = xd.SelectSingleNode("/DataBase1/Table1[@ID=" & TextBox1.Text & "]")
If nod IsNot Nothing Then
nod.ParentNode.RemoveChild(nod)
xd.Save(Application.StartupPath & "\XmlTest.xml")
Showdataingrid()
Cleartxt()
Else
MsgBox("السجل غير موجود", 64, "XML Example")
End If
كود البحث برقم السجل (ID) :
كود :
Dim xd As New XmlDocument()
xd.Load(Application.StartupPath & "\XmlTest.xml")
Dim nod As XmlNode = xd.SelectSingleNode("/DataBase1/Table1[@ID=" & TextBox1.Text & "]")
If nod IsNot Nothing Then
TextBox2.Text = nod.ChildNodes(0).InnerText
TextBox3.Text = nod.ChildNodes(1).InnerText
PictureBox1.Image = StringToImage(nod.ChildNodes(2).InnerText)
Else
MsgBox("السجل غير موجود", 64, "XML Example")
Cleartxt()
End If
كود تفريغ التكستات :
كود :
Sub Cleartxt()
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
PictureBox1.Image = Nothing
TextBox2.Focus()
Autoid()
End Sub
كود جلب آخر رقم (ID) + 1 :
كود :
Sub Autoid()
On Error Resume Next
Dim xDoc As XmlDocument = New XmlDocument
xDoc.Load(Application.StartupPath & "\XmlTest.xml")
Dim xNodes As XmlNodeList = xDoc.GetElementsByTagName("Table1")
Dim maxValue As Integer = 0
Dim max As String = ""
For Each xN As XmlNode In xNodes
If (Convert.ToInt32(xN.Attributes("ID").Value) > maxValue) Then
maxValue = Convert.ToInt32(xN.Attributes("ID").Value)
max = xN.Attributes("ID").Value
End If
Next
TextBox1.Text = Val(max) + 1
End Sub
كود عرض السجلات في الداتاقريد فيو :
كود :
Sub Showdataingrid()
On Error Resume Next
Dim filePath As String = Application.StartupPath & "\XmlTest.xml"
Dim ds As New DataSet
ds.ReadXml(filePath)
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Table1"
DataGridView1.Columns(2).Visible = False
DataGridView1.Columns(3).Visible = False
DataGridView1.Columns(0).Width = "200"
DataGridView1.Columns(1).Width = "130"
End Sub
كود الكوماند (Clear Text)
كود :
Cleartxt()
كود النقر على اداة عرض الصورة لاختيار صورة :
كود :
Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
'ادراج صورة من الجهاز
Dim og1 As New OpenFileDialog
With og1
og1.Title = "(Select Image) (تحديد صورة)"
og1.Filter = "JPEG,BMP,PNG (تحديد صورة) (Select Image) |*.jpg;*.jpeg;*.bmp;*.png"
End With
If og1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim Fs As System.IO.FileStream = New System.IO.FileStream(og1.FileName, IO.FileMode.Open, IO.FileAccess.Read)
Dim rawdata As Byte() = New Byte(Convert.ToInt32(fs.Length)) {}
Fs.Read(rawdata, 0, Convert.ToInt32(Fs.Length))
PictureBox1.Image = Image.FromStream(New System.IO.MemoryStream(rawdata))
Fs.Close()
Fs = Nothing
imgstr = ImageToString(PictureBox1.Image)
Else
MsgBox("عفواً ألغي الأمر بناء على طلبك", 64, "XML Example")
Me.Focus()
End If
End Sub
كود تحويل الصورة إلى سلسلة نصية base64 والعكس :
كود :
Private Function ImageToString(img As Image) As String
Dim m As New MemoryStream()
img.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg)
Return Convert.ToBase64String(m.ToArray())
End Function
Private Function StringToImage(imgstring As String) As Image
Dim imgbytes As Byte() = Convert.FromBase64String(imgstring)
Dim m As New MemoryStream(imgbytes)
Return Image.FromStream(m)
End Function
أكواد خاصة بالداتاقريدفيو وهي عند النقر على الصف ينقل السجل للتكستات وتلوين الداتاقريدفيو بلونين متدرجين و ترقيم الصفوف من الرقم 1 حتى آخر سجل :
كود :
Private Sub DataGridView1_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
If e.RowIndex = -1 Then Exit Sub
TextBox2.Text = DataGridView1.Item(0, e.RowIndex).Value
TextBox3.Text = DataGridView1.Item(1, e.RowIndex).Value
TextBox1.Text = DataGridView1.Item(3, e.RowIndex).Value
PictureBox1.Image = StringToImage(DataGridView1.Item(2, e.RowIndex).Value)
End Sub
Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
DataGridView1.RowsDefaultCellStyle.BackColor = Color.AliceBlue
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.AntiqueWhite
End Sub
Private Sub DataGridView1_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1
Me.DataGridView1.Rows(i).HeaderCell.Value = (i + 1).ToString
Next
End Sub
Private Sub DataGridView1_RowsRemoved(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles DataGridView1.RowsRemoved
For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1
Me.DataGridView1.Rows(i).HeaderCell.Value = (i + 1).ToString
Next
End Sub
كود الفورم لود والمسئول عن لو ملف XML غير موجود يقوم بإنشاءه بدون تدخل منك ولكن انا وضحت بالأعلى كيف تنشئه يدوياً لزيادة المعلومة ،، ايضاً عرض البيانات في القريد ووضع الترقيم التلقائي في التكست :
كود :
If System.IO.File.Exists(Application.StartupPath & "\XmlTest.xml") = False Then
Dim settings As New XmlWriterSettings()
settings.Indent = True
Dim XmlWrt As XmlWriter = XmlWriter.Create(Application.StartupPath & "\XmlTest.xml", settings)
With XmlWrt
.WriteStartDocument()
.WriteStartElement("DataBase1")
.WriteEndElement()
.WriteEndDocument()
.Close()
End With
End If
Autoid()
Showdataingrid()
كود الخروج من البرنامج :
كود :
Application.Exit()
ملاحظة :: لنفترض تريد عمل شاشتين الأولى للتعامل مع (Table1) والثانية للتعامل مع (Table2)
فقط تغير اسم الجدول وأسماء الحقول في أكواد الفورم الآخر .
يا رحمن الدنيا والآخرة ورحيمهما