منتديات روكشا     َولَوْلَا إِذْ دَخَلْتَ جَنَّتَكَ قُلْتَ مَا شَاءَ اللَّهُ لَا قُوَّةَ إِلَّا بِاللَّه

الرئيسية |  التسجيل  |  مركز رفع الملفات  |  الاتصال بنا  

 



العودة   منتديات روكشا > المنتدي التخصصي > قسم التصاميم والبرمجة والجرافيكس والميديا > انشاء وتصميم وبرمجة البرامج

الملاحظات

انشاء وتصميم وبرمجة البرامج برنامج الوورد اكسس اكسيل بوربوينت فيجوال بيسك برامج محاسبة برامج ادارة وتنظيم حسابات تنسيق الملفات

إضافة رد
 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 03-24-2019, 05:25 AM

الصورة الرمزية الفارس

الفارس

.:: عضـو متميز ::.

 
تاريخ التسجيل: Feb 2019
الدولة: مصر
المشاركات: 837
معدل تقييم المستوى: 12
الفارس المعروف لدى الجميع بالتميز العالىالفارس المعروف لدى الجميع بالتميز العالىالفارس المعروف لدى الجميع بالتميز العالىالفارس المعروف لدى الجميع بالتميز العالىالفارس المعروف لدى الجميع بالتميز العالىالفارس المعروف لدى الجميع بالتميز العالى
الفارس غير متواجد حالياً
شرح الحصول على المرفقات واسماء المرفقات و روابطها في جدول خاص ListBox1

 





السلام عليكم و رحمة الله و بركاته
الحصول على المرفقات و خزنا اسماء المرفقات و روابطها في جدول خاص ListBox1
نحن الان نمتلك رابط المرفق و اسمه , كما نملك ايضا حاوية الكوكيز و هي معبئة بالكوكيز لارسالها مع كل طلب دون ان نتعب
انفسنا بالحصول عليه مرة اخرى
كل ما تبقى هو انشاء طلب وفق رابط الملف و ارسال الكوكيز معه ثم استقبال رد الملقم و تخزين طول الملف (حجمه) في متغير رقمي
و من ثم انشاء كائن MemoryStream للتعامل مع البيانات القادمة و بعدها كتابة هذه البيانات الى القرص الصلب و تخزينها بالاسم الذي لدينا
اقصد هنا اسم الملف المعروض في ListBox1
قبل ان ابدأ بعملية تخزين الملف ساقوم بالبحث عن الملف في مكانين
المكان الاول : هو مجلد التخزين فاذا توفر الملف فلن نحمله مرة اخرى.
المكان الثاني:قاعدة البيانات و تحديدا جدول المرفقات فكما تعلم نحن نضيف اسم الملف و مساره الى القاعدة مع كل عملية تحميل
البحث في جدول المرفقات سيتم وفق اسم الملف و رقم المقالة.
اي اننا سنبحث عن الملف المرتبط بالمقالة الحالية
كما اننا سنبحث في جدول المقالات ايضا عن المقالة الحالية المعروضة في المستعرض وفق رابط المقال
سنجري مجموعة من المقارنات لكي لا نحمل اسم مرفق لا يرتبط بالمقالة الحالية
اذ اننا سنحاول قدر الامكان تحميل المرفق المرتبط مع المقالة فقط
بعد تحقق كل الشروط سنبدأ بتحميل الملف الى مجلد التخزين و اضافة رابط له في جدول المرفقات

في حدث زر التحميل DownloadAttachements_Click

كود :
كود PHP:
   'زر تحميل المرفقات
   Private Sub DownloadAttachements_Click(sender As System.Object, e As System.EventArgs) Handles DownloadAttachements.Click
       Try

           If ListBox1.Items.Count > 0 Then

               '
البحث عن الملف في مجلد التخزين
               Dim os 
As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath "\AttachMents"ListBox1.Text)
               
'البحث عن الملف في القاعدة
               Dim w1, w2 As Integer

               '
               
Using Con

                   Dim rowinf 
As DataRowView
                   rowinf 
InfoBindingSource.Current

                   Dim sw1 
As String "Select Count(AttachName) AS CountCn From Attaches Where  (AttachName Like '" ListBox1.Text "') And (Id_inf Like '" rowinf("IdInfo") & "')  "
                   
Dim sw2 As String "Select Count(Infoname) As Cnt From Info Where UrlInfo Like '" WebBrowser1.Url.AbsoluteUri "'  "

                   
Dim MatchCommand As New OleDbCommand(sw1Con)
                   
Dim SelCommand As New OleDbCommand(sw2Con)

                   If 
Con.ConnectionString Nothing Then Con.ConnectionString ConnectionString
                   Con
.Open()
                   
'
                   w1 = MatchCommand.ExecuteScalar
                   w2 = SelCommand.ExecuteScalar
                   '
               
End Using
               
'عمليات فحص و مطابقة

               If w2 >= 1 And InfonameTextBox.Text <> WebBrowser1.DocumentTitle Then
                   Dim MsgResult As DialogResult = MessageBox.Show("المرفقات لا تتبع هذه المقالة , هناك مقالة لديك بهذا الاسم" & vbCrLf & "هل ما زلت تريد ربط المرفقات مع هذه  المقالة", "انتبه", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
                   If MsgResult = Windows.Forms.DialogResult.Cancel Then Exit Sub
               ElseIf w2 < 1 Then
                   MessageBox.Show("لا يوجد مقالة لديك بهذا الاسم" & vbCrLf & "قم بخزن المقالة لديك قبل تحميل المرفقات", "انتبه", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
                   Exit Sub
               End If
               '
               
If w1 >= 1 Then
                   
If os.Length >= 1 Then
                       MsgBox
("المرفق المحدد موجود و مربوط مع المقال")
                       Exit 
Sub
                   
Else
                       
MsgBox("المسار متوفر في القاعدة بينماالمرفق غير متوفر في مجلد التخزين" vbCrLf "سيتم تحميل المرفق الى مجلد التخزين")
                       
'هنا سنقوم بعملية تحديث تقتضي تحميل الملف فقط الى مجلد التخزين
                       If DownloadUrl(WebBrowser1.Url.AbsoluteUri) = False Then Exit Sub
                   End If
               Else
                   If os.Length >= 1 Then
                       MsgBox("الملف متوفر فقط في مجلد التخزين " & vbCrLf & "دون وجود رابط له في القاعدة" & vbCrLf & "سيتم اضافة رابط له في القاعدة")
                       '
هنا سنقوم بحذف المرفق من المجلد لعدم وجود ترابط مع القاعدة
                       
'Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", ListBox1.Text)
                       '
For Each filePath As String In filePaths
                       
'    File.Delete(filePath)
                       '
Next
                       Dim FILE_NAME 
As String Application.StartupPath.ToString "\AttachMents\" & ListBox1.Text

                       Me.Validate()
                       C = InfoBindingSource.Position
                       '
                       AttachBindingSource.AddNew()
                       '
                       D = AttachBindingSource.Position
                       '
                       Dim AttachRowview As DataRowView
                       AttachRowview = AttachBindingSource.Current
                       AttachRowview("
AttachName") = ListBox1.Text
                       AttachRowview("
AttachPath") = FILE_NAME
                       '
                       AttachBindingSource.EndEdit()
                       '
                       SaveData()
                       '
                       InfoBindingSource.Position = C
                       AttachBindingSource.Position = D

                   Else
                       'هنا نستخدم العملية كاملة لاضافة الملف الى القاعدة و مجلد التخزين
                       If DownloadUrl(WebBrowser1.Url.AbsoluteUri) = False Then Exit Sub
                       '
                       Me.Validate()
                       C = InfoBindingSource.Position
                       '
                       AttachBindingSource.AddNew()
                       '
                       D = AttachBindingSource.Position
                       '
                       Dim AttachRowview As DataRowView
                       AttachRowview = AttachBindingSource.Current
                       AttachRowview("
AttachName") = ListBox1.Text
                       AttachRowview("
AttachPath") = PathStr
                       '
                       AttachBindingSource.EndEdit()
                       '
                       SaveData()
                       '
                       InfoBindingSource.Position = C
                       AttachBindingSource.Position = D

                   End If


               End If
               '
           Else
               MsgBox("
لا يوجد مرفقات او لم يتم الحصول على المرفق")
               Exit Sub
           End If

       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try


   End Sub 
عمليات فحص و مطابقة تستخدم اكواد بسيطة الاغلب يعرفها
جزء منها يهتم بالتعامل مع الملفات و الجزء الاخر جمل استعلام عادية للبحث في قاعدة البيانات
كنت افضل استخدام Linq To Dataset كون البيانات متوفرة لدينا في Dataset لكنني لم استخدم استعلامات Ling
منذ بداية الموضوع لذا سنبقى على جمل Sql .
الجزء المسؤول عن التحميل هو الدالة DownloadUrl
وهي دالة عادية تلخص الحديث السابق المختص بارسال الطلب و استقبال الرد و هي كما يلي

كود :
كود PHP:
   ''' <summary>
   ''' 
اجراء تحميل المرفقات
   
''' </summary>
   ''' 
<param name="Url">الرابط</param>
   
''' <returns></returns>
   ''' 
<remarks></remarks>
   Private Function 
DownloadUrl(ByVal Url As String) As Boolean

       
Try
           
Url ListBox1.SelectedValue.ToString
           
If Url.Contains("youtube"Then
               MsgBox
("لا يمكن التحميل من هذا الموقع")
               Return 
False
               
Exit Function

           
End If

           
Dim DownloadRequest As HttpWebRequest DirectCast(WebRequest.Create(Url), HttpWebRequest)

           
DownloadRequest.CookieContainer = New CookieContainer()
           
DownloadRequest.CookieContainer cookies
           DownloadRequest
.KeepAlive True
           
'
           Dim DownloadResponse As WebResponse = DownloadRequest.GetResponse()
           '
           
Dim intLen As Integer CInt(DownloadResponse.ContentLength)

           
ProgressBar1.Maximum intLen
           Label1
.Text "0 / " GetFileSize2(intLen)
           
System.Windows.Forms.Application.DoEvents()
           
'
           If intLen < 0 Then
               MsgBox("اما ان الملف مفقود او يوجد مشكلة في الاتصال")
               DownloadResponse.Close()
               Return False
               Exit Function
           End If
           '
           
Dim memStream As MemoryStream
           Using stmResponse 
As IO.Stream DownloadResponse.GetResponseStream()
               
Dim buffer = New Byte(intLen) {}
               
Dim bytesRead As Integer
               
'
               Do
                   bytesRead += stmResponse.Read(buffer, bytesRead, intLen - bytesRead)
                   ProgressBar1.Value = bytesRead

                   Label1.Text = GetFileSize2(CInt(ProgressBar1.Value.ToString())) + " / " + GetFileSize2(intLen)

                   ProgressBar1.Refresh()
                   System.Windows.Forms.Application.DoEvents()

               Loop Until bytesRead = intLen

               memStream = New MemoryStream(buffer, False)
               '
               
PathStr System.Windows.Forms.Application.StartupPath "\AttachMents\" & ListBox1.Text
               '
               My.Computer.FileSystem.WriteAllBytes(PathStr, buffer, False)
               '
               ProgressBar1.Value = 0
               Label1.Text = "
0/0"
               DownloadResponse.Close()
               memStream.Close()
           End Using
           Return True
           '====================
           'هذه الطريقة تستخدم عندما يكون رابط الملف طبيعي اي لا يحتوي على اشاراة استفهام
           '    Dim FileName As String
           'If Url.EndsWith("
/") Then
           '    Url = Url.Substring(0, Url.Length - 1)
           'End If
           'FileName = Url.Substring(Url.LastIndexOf("
/"c) + 1)
           'MsgBox(FileName)
           ''  Exit Function
           'PathStr = System.Windows.Forms.Application.StartupPath & "
\AttachMents\" & FileName
           ''========================
           'DownloadRequest.Abort()
           'DownloadResponse.Close()
           '
       Catch ex As WebException
           If WebExceptionStatus.Timeout = WebExceptionStatus.Timeout Then
               MsgBox("
لا يوجد رد من الملقم قد يكون الملف مفقود")
               Return False
               Exit Function
           Else
               MsgBox(ex.ToString)
           End If
       End Try
       Return True

   End Function 
ارجع للشرح في الاعلى لتعرف سيناريو العمل
تبقى لدينا عدة مشاكل ليس المكان لعدها فقط ما واجهني منها
بعض الروابط في الموقع لا تعمل اما ان الملفات مفقودة او ان رابط التحميل لا يشير صراحة الى الملف المطلوب
فمثلا يوجد بعض الملفات في الموقع و خصوصا ملفات الرار (rar) يشير رابطها الى موقع YouTube و يقودني الى فلم اطفال (صديقتي...؟؟)
على اي حال متى ما كان رابط التحميل صحيح و الملف موجود ستكون قادر على التحميل
يحصل احيانا ان الملقم لا يرسل لك طول الملف بشكل حقيقي و هذا يؤدي الى اجهاض عملية التحميل اذ ان معرفة طول الملف الحقيقي
اساسا غير مدعومة اثناء رد الملقم
بعد تحميل المرفق الى مجلد التخزين سيتم اضافة رابط له في جدول المرفقات في القاعدة كما قلت سابقا
هناك مشكلة بسيطة قد تحدث عند نقل البرنامج من كان الى مكان و هي ان مسار الملف المخزن في القاعدة سيكون غير صحيح
لذا اعتمدت طريقة اخرى لفتح الملف تعتمد على البحث عن الملف في مجلد التخزين ستراها لاحقا عند الحديث عنها
بعد ان حملت الملف و تم ربطه مع القاعدة سيتم عرض كل المرفقات المرتبطة مع المقالة المخزنة في عنصر ListBox2 تحت المقالة
و بامكانك النقر مرتين على اي عنصر داخلها ليتم فتح المرفق و فق المسا المخزن في القاعدة او عبر اسمه
كود الحدث كما في الاسفل
كود :
كود PHP:
   'فتح المرفقات من الجهاز
   Private Sub ListBox2_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox2.MouseDoubleClick
       Try
           If ListBox2.Items.Count > 0 Then
               '
البحث عن الملف في مجلد التخزين
               Dim os 
As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath "\AttachMents\", ListBox2.Text)


               If os.Length >= 1 Then
                   Dim filePath As String = String.Empty
                   For Each filePath In os
                       If filePath <> ListBox2.SelectedValue.ToString Then
                           MsgBox("
المسار المحفوظ في القاعدة مختلف عن مسار الملف" & vbCrLf & "ربما تم تغير مسار مجلد التخزين")
                           'فتح الملف وفق مسار البحث و المطابقة
                           Process.Start(filePath)
                           Exit Sub
                       End If
                   Next

                   'فتح الملف وفق مسار القاعدة
                   Process.Start(ListBox2.SelectedValue.ToString)
               Else

                   'هنا سنقوم بحذف الادخال من القاعدة القاعدة
                   Dim DeleteFile As DialogResult = MessageBox.Show("
رابط الملف متوفر فقط في القاعدة,دون وجود الملف في مجلد التخزين" & vbCrLf & "هل تريد حذف الادخال من القاعدة", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
                   If DeleteFile = Windows.Forms.DialogResult.Yes Then

                       C = InfoBindingSource.Position
                       AttachBindingSource.RemoveCurrent()
                       SaveData()
                       InfoBindingSource.Position = C
                   End If

               End If

           End If

       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try

   End Sub 
اذا دققت في الكود السابق ستجد فيه اسطر اضافية باختصار عملها
اذا لم نجد الملف متوفر في مجلد التخزين عندها سنقوم بحذف الارتباط الموجود له في القاعدة لكي لا يشير هذا السطر الى ملف غير موجود
كذلك انا قمت بعمل دالة بسيطة تقوم باعطاء الحجم لكل الملف وفق الطريقة القياسية (KB,MB,GB,TR) اذ ليس معقولا ان تقوم بعرض حجم الملف
كارقام بل كحجوم و هو افضل
في الحقية يوجد دالتين الاولى للملفات المخزنة لدينا في القرص
و الثانية للملفات التي نريد تحميلها
الدالة الاولى
كود :
كود PHP:
   'هذا من اجل الملفات المخزنة في مجلد التخزين
   Public Function GetFileSize(ByVal TheFile As String) As String
       If TheFile.Length = 0 Then Return ""
       If Not System.IO.File.Exists(TheFile) Then Return ""
       '
---
       
Dim TheSize As ULong My.Computer.FileSystem.GetFileInfo(TheFile).Length
       Dim SizeType 
As String ""
       '---

       Try
           Select Case TheSize
               Case Is >= 1099511627776
                   DoubleBytes = CDbl(TheSize / 1099511627776) '
TB
                   
Return FormatNumber(DoubleBytes2) & " TB"
               
Case 1073741824 To 1099511627775
                   DoubleBytes 
CDbl(TheSize 1073741824'GB
                   Return FormatNumber(DoubleBytes, 2) & " GB"
               Case 1048576 To 1073741823
                   DoubleBytes = CDbl(TheSize / 1048576) '
MB
                   
Return FormatNumber(DoubleBytes2) & " MB"
               
Case 1024 To 1048575
                   DoubleBytes 
CDbl(TheSize 1024'KB
                   Return FormatNumber(DoubleBytes, 2) & " KB"
               Case 0 To 1023
                   DoubleBytes = TheSize ' 
bytes
                   
Return FormatNumber(DoubleBytes2) & " bytes"
               
Case Else
                   Return 
""
           
End Select
       
Catch
           Return 
""
       
End Try
   
End Function 
الدالة الثانية
كود :
كود PHP:
   'هذا من اجل الملفات التي يتم تحميلها
   Public Function GetFileSize2(ByVal Flength As Integer) As String
       If Flength = 0 Then Return ""
       '
---
       
Dim TheSize As ULong Flength
       Dim SizeType 
As String ""
       '---

       Try
           Select Case TheSize
               Case Is >= 1099511627776
                   DoubleBytes = CDbl(TheSize / 1099511627776) '
TB
                   
Return FormatNumber(DoubleBytes2) & " TB"
               
Case 1073741824 To 1099511627775
                   DoubleBytes 
CDbl(TheSize 1073741824'GB
                   Return FormatNumber(DoubleBytes, 2) & " GB"
               Case 1048576 To 1073741823
                   DoubleBytes = CDbl(TheSize / 1048576) '
MB
                   
Return FormatNumber(DoubleBytes2) & " MB"
               
Case 1024 To 1048575
                   DoubleBytes 
CDbl(TheSize 1024'KB
                   Return FormatNumber(DoubleBytes, 2) & " KB"
               Case 0 To 1023
                   DoubleBytes = TheSize ' 
bytes
                   
Return FormatNumber(DoubleBytes2) & " bytes"
               
Case Else
                   Return 
""
           
End Select
       
Catch
           Return 
""
       
End Try
   
End Function 
الدالتين متشابهتين فقط في الاولى يكون البارميتر المرسل هو مسار الملف بينما في الثانية يكون طول الملف هذا كل شيئ

وهذا في حدث تحديد الملف ليتم عرض الحجم وفق التحديد
كود :
كود PHP:
   Private Sub ListBox2_SelectedIndexChanged(sender As System.ObjectAs System.EventArgsHandles ListBox2.SelectedIndexChanged
       
Try
           If 
ListBox2.Items.Count 0 Then
               Dim FilePath 
As String System.Windows.Forms.Application.StartupPath "\AttachMents\" & ListBox2.Text
               If Not IsNothing(FilePath) Then
                   Label3.Text = (GetFileSize(FilePath))
               End If
           Else
               Label3.Text = 0
           End If

       Catch ex As Exception

       End Try


   End Sub 
طبعا انا وضعت Timer بسيط لتعطيل زر تحميل المرفقات عند عدم وجود ملفات للتحميل
كود :
كود PHP:
   'تعطيل زر التحميل لعدم وجود مرفقات
   Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
       If ListBox1.Items.Count > 0 Then
           DownloadAttachements.Enabled = True
       Else
           DownloadAttachements.Enabled = False
       End If

   End Sub 
الان و بعد ان فهمنا طبيعة العمل نعود الى الازرار القياسية و تحديدا زر حفظ المقال اي حفظ صفحة HTML داخل جدول المقالات
العملية مقسومة الى شقين الاول حفظ للحقول العادية في الجدول و الثاني حفظ لبنية HTML داخل الحقل Content
كما في السابق انا لن اخزن المقال مرتين في الجدول لذا ساقوم بالبحث عن اسم المقال بدليل رابط المقال فاذا وجد لدينا سنجهض عملية حفظ
محتوى الصفحة فقط و ليس كل اجراء الحفظ بمعنى اخر ربما لسبب ما انت تريد تسمية المقال باسم اخر غير الاسم الافتراضي لذا ستكون قادرا على ذلك بينما عملية تحديث محتويات الصفحة فلن تكون قادرا على ذلك اذ ان الصفحة محفوظة لديك في القاعدة


الشق الاول عملية الحفظ (حدث زر الحفظ العام) اذ ان الحفظ يتم على مستوى كل الجداول (فقط الاجزاء التي تحتوي على تحديثات) هي فقط من سيتم تحديثها

كود :
كود PHP:
   'زر الحفظ
   Private Sub BtnSave_Click(sender As System.Object, e As System.EventArgs) Handles BtnSave.Click
       Try
           A = KindBindingSource.Position
           B = PostBindingSource.Position
           C = InfoBindingSource.Position
           '
           
Me.Validate()
           
'
           KindBindingSource.EndEdit()
           PostBindingSource.EndEdit()
           InfoBindingSource.EndEdit()
           '
           
SaveData()
           
InfoBindingSource.Position C
           
'
           SaveHtml(sourceString)
           sourceString = ""

           '
           
KindBindingSource.Position A
           PostBindingSource
.Position B
           BindingNavigatorAddNewItem3
.Enabled False
       
Catch ex As Exception
           MsgBox
(ex.ToString)
       
End Try

   
End Sub 
هل تذكر الاجراء SaveData في الكلاس Connect هو من سيقوم بعملية الحفظ
لاحظ وجود الاجراء SaveHtml و هو الشق الثاني من عملية الحفظ
كود :
كود PHP:
   ''' <summary>
   ''' 
اجراء حفظ المقال
   
''' </summary>
   ''' 
<param name="HtmlText">"محتويات الصفحة"</param>
   
''' <remarks></remarks>
   Private Sub SaveHtml(ByVal HtmlText As String)
       Dim w2 As Integer

       Using Con
           Dim sw2 As String = "Select IdInfo  From Info Where UrlInfo Like '" & UrlInfoTextBox.Text & "'  "

           Dim SelCommand As New OleDbCommand(sw2, Con)

           If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
           Con.Open()
           '
           
w2 SelCommand.ExecuteScalar
           
'
       End Using
       '
       
If w2 0 Then
           Dim UpdateText 
As String "Update  Info Set Content = @Content Where IdInfo Like '" w2 "' "

           
Try
               If 
UrlInfoTextBox.Text <> WebBrowser1.Url.AbsoluteUri Then
                   MsgBox
(" الرابط الجديد مختلف عن الرابط المخزن ,قد تكون اخترت مقالة مختلفة  " vbCrLf "لن يتم تحديث محتويات المقالة"MsgBoxStyle.Exclamation MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkOnly"تخزين المقال ")
                   Exit 
Sub
               End 
If

               
Using Con
                   
If Con.ConnectionString Nothing Then Con.ConnectionString ConnectionString
                   
If HtmlText <> "" And HtmlText.Length 13 Then

                       Dim UpdateCommand1 
As New OleDbCommand(UpdateTextCon)
                       If 
Con.State ConnectionState.Open Then Con.Close()
                       
Con.Open()
                       
'
                       Dim CommandParameter1 As New OleDbParameter("@Content", OleDb.OleDbType.LongVarChar)
                       UpdateCommand1.Parameters.Add(CommandParameter1)
                       CommandParameter1.Value = HtmlText
                       Dim S As Integer = UpdateCommand1.ExecuteNonQuery
                       If S > 0 Then
                           ' 
MsgBox("نجحت عمليت تحديث المقالة")
                       Else
                           
MsgBox("فشلت عملية التحديث")
                       
End If
                   Else
                       
MsgBox("لم يتم الحصول على محتويات الصفحة بعد")
                   
End If
               
End Using
           
Catch ex As Exception
               MsgBox
(ex.ToString)
           Finally
               
Con.Close()
           
End Try

       Else
           
MsgBox("لم يتم حفظ عنوان المقال حاول حفظه ثانية")

       
End If

   
End Sub 
اذا دققت في الكود السابق ككل ستجد انني اقوم اولا بتخزين حقول المقالة بدون ارسال محتويات الصفحة و بعدها انا اقوم بتخزين محتويات الصفحة بعد التاكد من من وجودها بدليل رابط المقال
طبعا اذا حاولت تخزين محتويات الصفحة الحالية المعروضة في المستعرض فانه سيقوم بعملية مطابقة رابط الصفحة في المتصفح مع الرابط المعروض حاليا في حقل المقالات فاذا وجد اختلاف سيعطيك رسالة مفادها ان المقالة الحالية التي تريد تخزينها او تحديث محتوياتها مختلفة عن المقالة المعروضة
هذه السلسلة من اجراءات الامان لكي لا نخزن محتويات صفحة لا تمت بصلة لعنوان المقالة
انتهينا من عمليات الحفظ
الان بعض الاجرائيات البسيط مثل عرض شريط حالة التحميل الخاص بالمستعرض كما يلي
كود :
كود PHP:
   'حالة تحميل الصفحة
   Private Sub WebBrowser1_ProgressChanged(sender As Object, e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
       Try
           Dim CurProg As Double

           Dim MaxProg As Double

           CurProg = e.CurrentProgress

           MaxProg = e.MaximumProgress

           ToolStripProgressBar1.Value = (CurProg / MaxProg) * 100

       Catch ex As Exception
           '
       
End Try

   
End Sub 
كود :
كود PHP:
   'معلومات حالة التحميل
   Private Sub WebBrowser1_StatusTextChanged(sender As Object, e As System.EventArgs) Handles WebBrowser1.StatusTextChanged
       ToolStripStatusLabel1.Text = WebBrowser1.StatusText
   End Sub 
اجراء الفلترة الخاص بزر الفلترة و البحث بحسب اسم المقال
كود :
كود PHP:
   'فلترة
   Private Sub BtnSerch_Click(sender As System.Object, e As System.EventArgs) Handles BtnSerch.Click
       If TxtSerch.Text.Trim <> "" Then
           InfoBindingSource.Filter = "[Infoname] LIKE '
%" & TxtSerch.Text & "%'"
       End If
   End Sub 
زر مسح الفلتر
كود :
كود PHP:
   'مسح الفلتر
   Private Sub ToolStripButton3_Click(sender As System.Object, e As System.EventArgs) Handles BtnRemoveFilter.Click
       InfoBindingSource.RemoveFilter()
   End Sub 
زر الرجوع و الرئيسية و التحديث الخاصة بالمتصفح
كود :
كود PHP:
   'رجوع
   Private Sub BtnBack_Click(sender As System.Object, e As System.EventArgs) Handles BtnBack.Click
       WebBrowser1.GoBack()
   End Sub

   '
الرئيسية
   
Private Sub BtnHome_Click(sender As System.ObjectAs System.EventArgsHandles BtnHome.Click
       WebBrowser1
.GoHome()
   
End Sub

   
'تحديث
   Private Sub BtnRefresh_Click(sender As System.Object, e As System.EventArgs) Handles BtnRefresh.Click
       If Not WebBrowser1.Url.Equals("about:blank") Then
           WebBrowser1.Refresh()
       End If
   End Sub 
صحيح هناك زر اضفته لاحقا للتراجع عن اضافة مقال
كود :
كود PHP:
   'زر تراجع عن
   Private Sub BtnUndo_Click(sender As System.Object, e As System.EventArgs) Handles BtnUndo.Click
       InfoBindingSource.CancelEdit()
   End Sub 
بعد ان قمنا بتخزين محتويات الصفحة في القاعدة اصبحنا قادرين الان على عرض المحتويات المخزنة في المستعرض
زر عرض المحتويات للمقالة الحالية
كود :
كود PHP:
   ''' <summary>
   ''' 
تحميل الصفحة من القاعدة
   
''' </summary>
   ''' 
<param name="sender"></param>
   
''' <param name="e"></param>
   ''' 
<remarks></remarks>
   Private 
Sub BtnLoadContents_Click(sender As System.ObjectAs System.EventArgsHandles BtnLoadContents.Click
       Dim RowView 
As DataRowView
       RowView 
InfoBindingSource.Current
       Dim Sel1 
As String "Select Content From Info Where IdInfo Like '" RowView("IdInfo") & "' "
       
Try
           
Using Con
               
If Con.ConnectionString Nothing Then Con.ConnectionString ConnectionString

               Dim Command1 
As New OleDbCommand(Sel1Con)
               If 
Con.State ConnectionState.Open Then Con.Close()
               
Con.Open()
               
Dim Red1 As OleDbDataReader Command1.ExecuteReader
               
While Red1.Read
                   
If Red1.HasRows True And Not Red1.IsDBNull(0Then
                       sourceString 
Red1("Content")
                   Else
                       
MsgBox("لا يوجد محتويات محفوظة لهذه المقالة")
                       Exit 
Sub
                   End 
If
               
End While
               If 
sourceString <> "" Then
                   WebBrowser1
.DocumentText sourceString
               End 
If
           
End Using

       
Catch ex As Exception
           MsgBox
(ex.ToString)
       
End Try

   
End Sub 
بقيت لدينا ازرار الحذف التي اجلت طرحها للاخر اذ ان عملية الحذف متزامنة بين القاعدة و الملفات المخزنة (المرفقات)
نبدا اولا مع حذف مقال مع مرفقاته
كود
كود PHP:
   'حذف مقال
   Private Sub BindingNavigatorDeleteItem3_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem3.Click
       Try
           If (Me.Validate() And Not (InfoBindingSource Is Nothing)) Then
               If InfoBindingSource.Count > 0 Then

                   Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف المقال الحالي", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
                   If DeletStud = Windows.Forms.DialogResult.Yes Then


                       '
==========حذف الملفات المرفقة=======================
                       
'البحث عن الملف في مجلد التخزين
                       If ListBox2.Items.Count > 0 Then
                           For i As Integer = 0 To ListBox2.Items.Count - 1
                               Dim RowV As DataRowView = ListBox2.Items(i)
                               Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
                               If os.Length >= 1 Then
                                   Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
                                   For Each filePath As String In filePaths
                                       File.Delete(filePath)
                                   Next

                               End If
                               AttachBindingSource.RemoveAt(i)
                           Next
                       End If

                       '
حذف المقال
                       InfoBindingSource
.EndEdit()
                       
InfoBindingSource.RemoveCurrent()
                   
End If

               
End If
           
End If 
كود PHP:
       Catch ex As Exception
           MsgBox
(ex.ToString)
       
End Try

   
End Sub 
و من ثم حذف فرع كامل مع كل مقالاته و الملفات المخزنه مع كل مقال
انا جعلت عملية الحذف محمية بكلمة مرور لكي لا نتورط و نحذف كل شيئ الا بعد التأكد من ذلك
كود :
كود PHP:
   'حذف فرع
   Private Sub BindingNavigatorDeleteItem1_Click_1(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem1.Click
       Try
           If (Me.Validate() And Not (PostBindingSource Is Nothing)) Then

               If PostBindingSource.Count > 0 Then

                   Dim DeletStud1 As DialogResult = MessageBox.Show("سيتم حذف الفرع بما يحتويه من مقالات" & vbCrLf & "عملية الحذف محمية", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
                   If DeletStud1 = Windows.Forms.DialogResult.Yes Then
                       Dim Message, Title, DefaultValue As String
                       Message = "ادخل كلمة المرور"
                       Title = "نموذج حماية"
                       DefaultValue = "ادخل كلمة المرور"

                       Dim ReturnValue As String = InputBox(Message, Title, DefaultValue)
                       If ReturnValue = "admin" Then

                           '
====**********======
                           
Dim DeletStud As DialogResult MessageBox.Show("سيتم حذف الفرع بما يحتويه من مقالات""انتبه"MessageBoxButtons.YesNoMessageBoxIcon.WarningMessageBoxDefaultButton.Button2MessageBoxOptions.RightAlign)
                           If 
DeletStud Windows.Forms.DialogResult.Yes Then

                               
'==========حذف الملفات المرفقة=======================
                               '
البحث عن الملف في مجلد التخزين
                               
If InfoBindingSource.Count 0 Then
                                   
For As Integer 0 To InfoBindingSource.Count 1
                                       
'
                                       If AttachBindingSource.Count > 0 Then
                                           For i As Integer = 0 To AttachBindingSource.Count - 1
                                               Dim RowV As DataRowView = AttachBindingSource.Current
                                               Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
                                               If os.Length >= 1 Then
                                                   Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
                                                   For Each filePath As String In filePaths
                                                       File.Delete(filePath)
                                                   Next

                                               End If
                                               AttachBindingSource.RemoveAt(i)
                                           Next
                                       End If

                                       '
==============


                                       
' InfoBindingSource.RemoveAt(p)
                                   Next


                               End If
                               '
==========================
                               
PostBindingSource.EndEdit()
                               
InfoBindingSource.EndEdit()
                               
'
                               PostBindingSource.RemoveCurrent()
                           End If



                       End If
                   Else
                       Exit Sub
                   End If
               End If

           End If

       Catch ex As Exception
           ' 
MsgBox(ex.ToString)
       
End Try

   
End Sub 
حذف تصنيف باكمله مع كل الفروع و المقالات و المرفقات المرتبطه به كذلك محمي بكلمة مرور
كود :
كود PHP:
   'حذف التصنيف
   Private Sub BindingNavigatorDeleteItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click
       Try
           If (Me.Validate() And Not (KindBindingSource Is Nothing)) Then
               If KindBindingSource.Count > 0 Then

                   Dim DeletStud1 As DialogResult = MessageBox.Show("سيتم حذف التصنيف الحالي بكل ما يحتويه" & vbCrLf & "عملية الحذف محمية", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
                   If DeletStud1 = Windows.Forms.DialogResult.Yes Then
                       Dim Message, Title, DefaultValue As String
                       Message = "ادخل كلمة المرور"
                       Title = "نموذج حماية"
                       DefaultValue = "ادخل كلمة المرور"

                       Dim ReturnValue As String = InputBox(Message, Title, DefaultValue)
                       If ReturnValue = "admin" Then
                           '
                           
Dim DeletStud As DialogResult MessageBox.Show("سيتم حذف التصنيف الحالي بكل ما يحتويه""انتبه"MessageBoxButtons.YesNoMessageBoxIcon.WarningMessageBoxDefaultButton.Button2MessageBoxOptions.RightAlign)
                           If 
DeletStud Windows.Forms.DialogResult.Yes Then
                               KindBindingSource
.EndEdit()
                               
PostBindingSource.EndEdit()
                               
InfoBindingSource.EndEdit()
                               
'حذف كل الفروع
                               For i As Integer = 0 To PostBindingSource.Count - 1
                                   DelAllPOsters()
                               Next
                               '
حذف التصنيف
                               KindBindingSource
.RemoveCurrent()

                           
End If

                       
End If

                   Else
                       Exit 
Sub

                   End 
If
               
End If

           
End If

       Catch 
ex As Exception
           MessageBox
.Show(ex.Message"زر الحذف العام"MessageBoxButtons.OKMessageBoxIcon.ErrorMessageBoxDefaultButton.Button1MessageBoxOptions.RightAlign)
       
End Try

   
End Sub 
انا استخدمت اجراء لحذف كل الفروع بداخل التصنيف DelAllPOsters
كود :
كود PHP:
   'حذف فرع بشكل مباشر
   Private Sub DelAllPOsters()
       Try
           If (Me.Validate() And Not (PostBindingSource Is Nothing)) Then

               If PostBindingSource.Count > 0 Then

                   '
==========حذف الملفات المرفقة=======================
                   
'البحث عن الملف في مجلد التخزين
                   If InfoBindingSource.Count > 0 Then
                                   For p As Integer = 0 To InfoBindingSource.Count - 1
                                       '
                                       
If AttachBindingSource.Count 0 Then
                                           
For As Integer 0 To AttachBindingSource.Count 1
                                               Dim RowV 
As DataRowView AttachBindingSource.Current
                                               Dim os 
As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath "\AttachMents"RowV("AttachName"))
                                               If 
os.Length >= 1 Then
                                                   Dim filePaths
() As String Directory.GetFiles(System.Windows.Forms.Application.StartupPath "\AttachMents"RowV("AttachName"))
                                                   For 
Each filePath As String In filePaths
                                                       File
.Delete(filePath)
                                                   
Next

                                               End 
If
                                               
AttachBindingSource.RemoveAt(i)
                                           
Next
                                       End 
If


                                   
Next


                               End 
If
                               
'==========================
                               PostBindingSource.EndEdit()
                               InfoBindingSource.EndEdit()
                               '
                               
PostBindingSource.RemoveCurrent()
                           
End If



                       
End If

       Catch 
ex As Exception

       End 
Try

   
End Sub 
و هو يشبه اجراء حذف الفروع السابق لكنه بدون حماية

لم يتبقى لدينا شيئ في هذه الواجهة على ما اعتقد
اكتملت كل الخيوط و الكمال لله وحده

رد مع اقتباس
قديم 03-24-2019, 01:27 PM   #2

ابن الوليد

.:: ادارة المنتدي ::.

الصورة الرمزية ابن الوليد

تاريخ التسجيل: Nov 2018
الدولة: مصر
المشاركات: 1,686
معدل تقييم المستوى: 10
ابن الوليد has much to be proud ofابن الوليد has much to be proud ofابن الوليد has much to be proud ofابن الوليد has much to be proud ofابن الوليد has much to be proud ofابن الوليد has much to be proud ofابن الوليد has much to be proud ofابن الوليد has much to be proud of
إرسال رسالة عبر MSN إلى ابن الوليد إرسال رسالة عبر Yahoo إلى ابن الوليد إرسال رسالة عبر Skype إلى ابن الوليد
افتراضي

روعة وتسلم ابداع لايوصف اكرمك الله وجملك

ابن الوليد متواجد حالياً  

رد مع اقتباس
إضافة رد

مواقع النشر (المفضلة)


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
هاك هاك الاحصاء المتبقى على دخول شهر رمضان الفارس ركن تطوير وإدارة المنتديات العربية 0 03-17-2019 02:27 PM
هاك هاك يقوم بمنع الاعظاء والزوار من رؤية الروابط وتحميل المرفقات حتى الرد النسخة 4.1.9 الفارس ركن تطوير وإدارة المنتديات العربية 0 03-09-2019 02:12 AM
تفعيل أكسس 2016 Access الحصول على الكود من خلال برنامج أكسس الفارس انشاء وتصميم وبرمجة البرامج 0 03-07-2019 03:35 AM
أنشيء جدول باحدي الطرق الثلاثة مهرة النجدية انشاء وتصميم وبرمجة البرامج 0 02-06-2019 12:28 AM
هاك هاك روابط واسماء اقسام منتداك بالفوتر - لزيادة الأرشفة ابن الوليد ركن تطوير وإدارة المنتديات العربية 0 01-30-2019 02:53 PM

 

RSS RSS 2.0 XML MAP HTML

الساعة الآن 06:15 AM

نبذة عن المنتدى

روابط مفيدة

إعلانات نصية

روابط الموقع

منتديات روكشا لتقنية المعلومات تقدم كل ما هو جديد ومفيد في عالم البرامج سواء جاهزة أو طرق وشروحات برمجة وتصميم وسوف تجدون أقسام عديدة ومختصة لكل ما تبحث عنه



Powered by vBulletin® Copyright ©2000 - 2019,