إستفتاء : هل الموضوع مفيد ؟
نعم الموضوع مفيد وفكرة جديدة .
نعم الموضوع مفيد .
الموضوع غير مفيد .
[عرض النتائج]
 
 
تقييم الموضوع :
  • 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 ك ب / التحميلات : 355)
.zip   XMLApp - 2010.zip (الحجم : 411.38 ك ب / التحميلات : 329)
يا رحمن الدنيا والآخرة ورحيمهما
الرد }}}
#2
السلام عليكم


بارك الله فيك  وفي عملك

جزاك الله الف الف خير

الموضوع مفيد وجديد  وجميل بالنسبة لي 

+1
الرد }}}
تم الشكر بواسطة: elgokr , Amir_Alzubidy , asemshahen5 , ابراهيم ايبو
#3
(23-02-19, 02:27 PM)sendbad100 كتب :
السلام عليكم


بارك الله فيك  وفي عملك

جزاك الله الف الف خير

الموضوع مفيد وجديد  وجميل بالنسبة لي 

+1

تسلم مشرفنا الغالي sendbad100

وياك ياغالي ،، الله يجزاك ويجزانا ويجزى الجميع بالخير

المشروع يحتاج تكملة الطباعة ،،

اذا الأخوة مهتمين بالموضوع ،، اخبروني ،، وتبشرون
يا رحمن الدنيا والآخرة ورحيمهما
الرد }}}
تم الشكر بواسطة: elgokr , elgokr , sendbad100 , EYADISMAIL , ابراهيم ايبو
#4
السلام عليكم


اكمل الموضوع   اذا لديك الوقت 

لوجه الله 
قد ياتي من يحتاجه  او قد\ نحتاجة يوما ما 

هناك شحة في مثل هذه الموضوع 

جزاك الله الف الف خير
 اخي / الغالي 
الرد }}}
#5
أكيد لوجه الله سبحانه وتعالى ،،

ان شاء الله اكمله قريب .
يا رحمن الدنيا والآخرة ورحيمهما
الرد }}}
#6
بالتوفيق
بارك الله فيك

تم تقييم الموضوع
وتثبيته 
Heart Heart Heart
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , elgokr , ابراهيم ايبو
#7
جزاكم الله خير 
بارك الله فيك 
اتمنى دائما ان يبقى المنتدى بهذا الشكل 
مواضيع جديدة و نادرة 
تفاعل و تقدير للجهد المبذول فهي بالنهاية لمصلحة الجميع 
بالتوفيق
الرد }}}
تم الشكر بواسطة: sendbad100 , elgokr , elgokr , ابراهيم ايبو
#8
(24-02-19, 10:28 AM)sendbad100 كتب :
بالتوفيق
بارك الله فيك

تم تقييم الموضوع
وتثبيته 
Heart Heart Heart

تسلم ياغالي ،،

(24-02-19, 02:02 PM)Amir_Alzubidy كتب : جزاكم الله خير 
بارك الله فيك 
اتمنى دائما ان يبقى المنتدى بهذا الشكل 
مواضيع جديدة و نادرة 
تفاعل و تقدير للجهد المبذول فهي بالنهاية لمصلحة الجميع 
بالتوفيق

الله يجزاك بالمثل واكثر حتى ترضى ،،
الشكر لله سبحانه وتعالى ،،

الله يوفق الجميع
يا رحمن الدنيا والآخرة ورحيمهما
الرد }}}
#9
مرحبا مره أخرى ،،

نكمل موضوع الطباعة كما وعدتكم ،،

1- إضافة فورم 2 للمشروع لعرض التقرير عليه .

   

   


2- ادراج داتاسيت ثم ادراج داتاتيبل لربطه بالتقرير .

   

   

   

4- تصميم التقرير وربطه بالداتاسيت .

كلك يمين على اسم المشروع ثم اختيار Add ثم اختيار New Item...

   

   

   

   

   

أخيراً كود الطباعة :

استيراد مكتبة عارض التقرير :

   


دبل كلك على بوتن الطباعة والصق الكود التالي :

كود :
Form2.ReportViewer1.Reset()

       Form2.ReportViewer1.LocalReport.ReportEmbeddedResource = "XMLAPPPRINT.Report1.rdlc"

       Dim ds As New DataSet

       If TextBox1.Text <> "" Then
           'طباعة سجل واحد بدلالة رقم السجل الموجود في التكست بوكس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      'رقم السجل موجود
               Dim nodereader = New XmlNodeReader(nod)
               ds.ReadXml(nodereader, XmlReadMode.Auto)

           Else                        'رقم السجل غير موجود

               MsgBox("السجل غير موجود", 64, "XML Example")
               Cleartxt()

               Exit Sub
           End If

       ElseIf TextBox1.Text = "" Then
           'إذا كان التكست بوكس 1 فارغ يطبع الكل
           Dim filePath As String = Application.StartupPath & "\XmlTest.xml"
           ds.ReadXml(filePath)
       End If


       'تكملة كود الطباعة
       Dim DataSource As New ReportDataSource("DataSet1", ds.Tables(0).DefaultView)

       Form2.ReportViewer1.LocalReport.DataSources.Clear()
       Form2.ReportViewer1.LocalReport.DataSources.Add(DataSource)

       Form2.ReportViewer1.RefreshReport()

       Form2.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
       Form2.ReportViewer1.ZoomMode = ZoomMode.PageWidth
       Form2.ReportViewer1.RefreshReport()

       Form2.Show()


شكل التقرير والتنسيق يمكنك التعديل بما تراه مناسب كالتالي :

   








هنا تصدير التقرير بالأحرف الإنجليزية :

   


Excel

   

Word

   

Pdf

   


هنا تصدير التقرير بالإحرف العربية :

   

اكسيل

   

وورد

   

بي دي اف

   





بالتوفيق للجميع ،،

اللهّم اجعل هذا العمل خالصاً لوجهك الكريم .
يا رحمن الدنيا والآخرة ورحيمهما
الرد }}}
#10
ما شاء الله 
اللهم صل على محمد 
تبارك الله خير الفاتحين
الرد }}}
تم الشكر بواسطة: elgokr , elgokr


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  انشاء قاعدة بيانات اكسس بالكود Kamil 0 205 17-02-24, 10:43 PM
آخر رد: Kamil
  [مثال] مثال لنسخ وإستعادة قاعدة البيانات ( تحديث) نسخ تلقائي للقاعدة حسب اليوم والساعة جميل علي 81 48,197 10-02-24, 11:26 AM
آخر رد: محمد العموري
  طريقة سهلة للاتصال بقاعدة بيانات SQL مع اضافة ايقونات للتحكم في تدفق البيانات ggtt17121985 0 556 06-11-23, 10:16 AM
آخر رد: ggtt17121985
  مشروع تعدد لغات للبرنامج من قاعدة بيانات MsAccess asemshahen5 6 3,665 18-05-23, 03:39 AM
آخر رد: mohamed gida
Lightbulb عمل Attach و Detach و Backup و Restore لقاعدة بيانات MS Sql Server asemshahen5 19 8,894 19-03-23, 09:01 PM
آخر رد: atefkhalf2004
Photo [VB.NET] أحتاج مساعدتكم لطباعة بيانات الفورم في كرستال ربورت Sidiki 1 641 25-02-23, 08:36 PM
آخر رد: Taha Okla
Lightbulb خطوة خطوة بالكود كورس كامل للربط بين فيجوال بيسك دوت نت مع قاعدة بيانات MYSQL ggtt17121985 0 1,011 06-01-23, 09:04 AM
آخر رد: ggtt17121985
  مثال استيراد اى ملف اكسيل وتصدير البيانات الى ملف اكسيل new_programer 3 3,429 07-12-22, 12:19 PM
آخر رد: hoda299
Rainbow [مشروع] محول بيانات الانترنت محمد مسافر 0 713 14-11-22, 02:52 AM
آخر رد: محمد مسافر
Video [مشروع] لعبة إختبر معلوماتك [أسئلة عشوائية]+[قاعدة بيانات xml] + [تأثيرات صوتية] عبدالله الدوسري 12 18,096 30-10-22, 05:52 PM
آخر رد: ibra9009

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم