إستفتاء : هل الموضوع مفيد ؟
نعم الموضوع مفيد وفكرة جديدة .
نعم الموضوع مفيد .
الموضوع غير مفيد .
[عرض النتائج]
 
 
تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[مشروع] مثال للتعامل مع ملف XML كقاعدة بيانات
#1
السلام عليكم ،،

يوجد مثال على فيجوال ستوديو 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) 

فقط تغير اسم الجدول وأسماء الحقول في أكواد الفورم الآخر .


الملفات المرفقة
.zip   XMLApp.zip (الحجم : 224.63 ك ب / التحميلات : 386)
.zip   XMLApp - 2010.zip (الحجم : 411.38 ك ب / التحميلات : 361)
يا رحمن الدنيا والآخرة ورحيمهما
الرد }}}


الردود في هذا الموضوع
مثال للتعامل مع ملف XML كقاعدة بيانات - بواسطة حريف برمجة - 23-02-19, 03:08 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مثال تحميل من اليوتيوب justforit 0 228 22-10-25, 01:38 AM
آخر رد: justforit
  مثال حفظ البيانات حسب النوع مصمم هاوي 4 561 13-10-25, 05:06 PM
آخر رد: justforit
  خطوة بخطوة بالكود وشرح الفيديو كامل اتصال فيجوال بيسك دوت نت وقاعدة بيانات SQL Server ggtt17121985 0 342 23-04-25, 09:50 AM
آخر رد: ggtt17121985
  فكرة جميلة جدا : أزي تعمل عداد لعمر البرنامج بدون قاعدة بيانات(نسخة تجريبية) ggtt17121985 0 590 14-02-25, 02:55 AM
آخر رد: ggtt17121985
  [مشروع] مثال بسيط محاكاة للكونسول justforit 0 349 18-12-24, 01:13 AM
آخر رد: justforit
  مسح الصور وحفظها بلاحقة Pdf او jpg مثال معدل من احدى المشاركات ابراهيم ايبو 1 1,711 01-09-24, 02:46 PM
آخر رد: ahlamalgomate2020
  ربط ملف قاعدة بيانات اكسيس بالويب من خلال فيجوال بيسك دوت نت بسهولة ggtt17121985 0 719 19-07-24, 05:07 PM
آخر رد: ggtt17121985
  [VB.NET] مثال بسيط عن كيفية عمل برنامج المصحف كمثال موقع [ quran.ksu.edu.sa ] elgokr 15 10,429 07-07-24, 07:39 AM
آخر رد: المدير الصغير
  مشروع ضغط و صيانة قاعدة بيانات vb.net sql server غزة العزة 1 729 03-06-24, 05:12 PM
آخر رد: salamandal
  انشاء قاعدة بيانات اكسس بالكود Kamil 0 793 17-02-24, 10:43 PM
آخر رد: Kamil

التنقل السريع :


يقوم بقرائة الموضوع: