قواعد المشاركة في المنتدى

(قسم الاعلانات) الموضوع:مظلات و سواتر غاية الافكار 0544447186 بواسطة: (rahma allah) :: (قسم الاعلانات) الموضوع:مؤسسة غاية الافكار تركيب و تورد هناجر 0544447186 بواسطة: (rahma allah) :: (منتدى ADO.NET العام) الموضوع:شركة الافضل لخدمات نقل العفش بالكويت بواسطة: (االافضل) :: (منتدى ADO.NET العام) الموضوع:شركة الافضل لخدمات شراء الاثاث المستعمل بالكويت بواسطة: (االافضل) :: (قسم الدعم الفني) الموضوع:شركة الافضل لخدمات مكافحة الحشرات بالكويت بواسطة: (االافضل) :: (منتدى ADO.NET العام) الموضوع:شركة الافضل لخدمات التنظيف بالكويت بواسطة: (االافضل) :: (منتدى ADO.NET العام) الموضوع:شركة تنظيف بالرياض 0500685570 تنظيف فلل شقق منازل مجالس بواسطة: (روج شفايف روح) :: (منتدى الأكسس) الموضوع:عدم زيادة مبلغ الفواتير بواسطة: (saleh204) :: (قسم الاعلانات) الموضوع:صور مشبات الاحساء،مشبات الشرقيه،مشبات الخبر بواسطة: (جنون المطر) :: (منتدى مبرمجي ASP) الموضوع:افضل شركة تنظيف بجميع الاماكن بالمملكه بواسطة: (mahaelgyar) :: (منتدى Microsoft Visual Basic) الموضوع:افضل شركة تنظيف بجميع الاماكن بالمملكه بواسطة: (mahaelgyar) :: (قسم الاعلانات) الموضوع:افضل شركة تنظيف بجميع الاماكن بالمملكه بواسطة: (mahaelgyar) :: (منتدى الأكسس) الموضوع:طلب اتصال الاسكانر مع الفورم اكسيس وعرض الصور بواسطة: (أم خلود) :: (قسم الاعلانات) الموضوع:وفاة سيدة بسبب تناول علبه كولا شاهد السبب بنفسك بواسطة: (ضيااء) :: (قسم الاعلانات) الموضوع:احدث غرف سفره مودرن رووعه وعصرية 2017 معرض الكامل دمياط بواسطة: (رمز الهنا) :: (قسم الاعلانات) الموضوع:سيارات فيات مستعملة بواسطة: (ديزاينر ديزاينر) :: (أخبار التكنولوجيا) الموضوع:مشبات رخام ديكورات مشبات ديكور مشبات بواسطة: (مشبات مدافئ) :: (منتدى الأكسس) الموضوع:[طلب] شرح طريقة تحديث البيانات محطات الوقود بواسطة: (خالد الجزائري) :: (منتدى ADO.NET العام) الموضوع:هل تحب ان تتعلم التصوير؟ بواسطة: (بنوته جاأاده) :: (قسم الاعلانات) الموضوع:مشبات صور مشبات ديكورات مشبات جديده بواسطة: (مشبات مدافئ)


راديو القرآن

المواضيع المثبته: (منتدى Microsoft Visual Basic) الموضوع:برنامج الحسابات مع الكود بواسطة: (د.أنس عباس) :: (منتدى برمجة الشبكات في بيئة الدوت نت) الموضوع:Dot Net Networks & TCP/IP Programming بواسطة: (fmo_82) :: (كتب عن VB.NET) الموضوع:كتب VB.NET عربي بواسطة: (عبد الرحمن) :: (منتدى Microsoft Visual Basic) الموضوع:دروس صوت وصورة للربط بين اسكيوال سيرفر والفجوال بيسيك بواسطة: (wael abed) :: (منتدى تصميم صفحات الويب) الموضوع:أرشيف الدروس المصورة بواسطة: (alanees) :: (منتدى أجاكس(Asynchronous JavaScript and XML)) الموضوع:نبذة مختصرة عن تعريف تقنية أجاكس بواسطة: (عبدالله جابر شقليه) :: (منتدى البرامج) الموضوع:7 اسطوانات لتعليم شهاده ICDL بالصوت والصوره بواسطة: (مستشفى الكمبيوتر) :: (قسم الدروس و الدورات) الموضوع:دوره مجانيه لاحتراف الدوت نت بواسطة: (alaa gomaa) :: (منتدى Microsoft Excel) الموضوع:open office بواسطة: (ramies) :: (منتدى ADO.NET العام) الموضوع:الكامل في قواعد البيانات مع VB.net بواسطة: (المهندس عدي) :: (منتدى الكتب و المقالات) الموضوع:دروس متفرقة خفيفة بواسطة: (أبو أفنان) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:DECODE SQL STATMENT بواسطة: (mshaqalaih) :: (القسم المفتوح) الموضوع:إلا رسول الله صلى الله عليه وسلم بواسطة: (alanees) :: (منتدى التصميم والجرافيكس) الموضوع:الكتابة باللغة العربية في برنامج فلاش بواسطة: (مبرمجة فلسطينية) :: (منتدى تحليل و تصميم نظم المعلومات) الموضوع:ما هو تحليل النظم System analysis بواسطة: (jbsa) :: (منتدى الأكسس) الموضوع:الوصل الي المساعده بشكل سريع وتحميل المرفقات الى المنتدي بواسطة: (startnet) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:مكتبة الأمثلة والتطبيقات للغة #C بواسطة: (النور) :: (قسم الدروس و الدورات) الموضوع:دروس فيديو للمهندس عدي لتعليم فيجوال بيسك دوت نت بواسطة: (المهندس عدي) :: (منتدى التصميم والجرافيكس) الموضوع:سلسلة دروس الفلاش بواسطة: (مبرمجة فلسطينية) :: (منتدى Microsoft Visual Basic) الموضوع:أكبر مشاركة فيجوال بيسك بواسطة: (SkyLight)

إضافة رد إضافة موضوع جديد

> درس بطريقة انشاء Microsoft Access (ملف MDB) بالكود,وانشاء وتصدير واستيراد الجدول بجميع حقوله وبياناته
Bookmark and Share
تقييم الموضوع Label معدل التقيم:5
مشاركةالثلاثاء,29/جمادى الأولى/1429 هـ,08:33 صباحاً
المشاركة #1

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244





السلام عليكم ورحمة الله وبركاته

إخواني الكرام أقدم لكم اليوم درس بطريقة إنشاء Microsoft Access (ملف MDB) بالكود أثناء RunTime
باختيار جدول معين وانشاء وتصدير واستيراد الجدول بجميع حقوله وبياناته التي يحتوي عليها .

مقدمة :

غالباً ما نحتاج إنشاء قواعد البيانات برمجياً ولكن لا توجد كائنات بيانات (ActiveX (ADO أو ADO.NET لإنشاء قواعد بيانات Microsoft Access بشكل تلقائي .

ولكن يمكن إنشاء قواعد بيانات Microsoft Access عن طريق استخدام Microsoft Jet OLE DB Provider و Microsoft ADO Ext. 2.8 For DLL and Security وكذلك يمكن استخدامها لأي فيرجن موجود لديك من 2.1 إلى 2.8 والأداة هي عبارة ملف msADOX.Dll وهي النسخة القديمة قبل أن تظهر ADO.net وأكيد أنها موجودة عند الجميع لأنها احد مكونات Microsoft Data Access Components 2.8 وموجودة من ضمن Windows XP Service Pack 2 و Windows XP Service Pack 3

مثلا لنفترض انه عندنا ملف mdb ويحتوي على عدة Tables ونأخذ هنا مثال ملف المخازنStore.mdb يحتوي على
جدول product جدول Product_detail جدول Employee جدول Orders وجداول أخرى

ولنفترض أننا نرغب بفصل جدول product فقط بكامل حقوله وتعريفاته والسجلات المخزنة به في ملف MDBمستقل.

الدرس :

تم انشاء المشروع على VB.NET 2008 وسيعمل على VB.NET 2005 دون احداث أي تغيير.

انشاء مشروع مفتوح المصدر(أي اننا لن نحدد اسماء الملفات أو الجداول وسنجعلها مفتوحه يمكن ان تعمل على أي ملف MDB) وذلك لانشاء ملف MDB جديد ، تصدير/ استيراد الجداول والحقول والبيانات) وكما في الصورة المرفقة.


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

وبعد تصميم الشاشة نضيف الأداة msADOX وذلك بالضغط كلك يمين على Add References ثم نذهب إلى Tab com ونبحث عن و Microsoft ADO Ext. 2.8 For DLL and Security أي فيرجن موجود عندك من 2.1 إلى 2.8
حيث انه يتم إنشاء ملف MDB على انه Microsoft Access 2000 ، ونضيف ايضا الأداة ADODB وهي موجودة بكل تأكيد عند الجميع لانها من ضمن مكتبات vs.net

المشروع :

في بداية البرنامج نعمل استيراد للمكتبات التالية

 كود
Imports System.IO
Imports System.Data.OleDb
Imports ADOX


ونضيف التعريفات التالية لبداية البرنامج ايضا
 كود

Dim path1 As String = ""
Dim path2 As String = ""
Dim TableName As String = ""
Dim tbl As New ADOX.Table
Dim cat1 As New ADOX.Catalog()
Dim cat2 As New ADOX.Catalog()
Dim conn As New ADODB.Connection
Dim ds As New DataSet
Dim idxLoop As New ADOX.Index
Dim colLoop As New ADOX.Column
Dim con1 As OleDbConnection
Dim Con2 As OleDbConnection
Dim dsStore As New DataSet
Dim dsproduct As New DataSet
Dim PrimKey As String = ""


الان نضغط على زر (من ملف) ونكتب التالي لفتح ملف MDB عن طريق استخدام OpenFileDialog1 وتعبئة ListBox1 باسماء الجداول الموجودة به وسنستخدم هنا ADOX في قراءة اسماء الجداول ، وتفريغ Labels و DataGridView1

 كود

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Label1.Text = ""
Label2.Text = ""
Label3.Text = ""
Label4.Text = ""
TableName = ""
ListBox1.Items.Clear()
Button1.Enabled = False
Button5.Enabled = False

Me.DataGridView1.DataSource = Nothing

If Me.OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
If OpenFileDialog1.FileName.Length = 0 Then Exit Sub
path1 = OpenFileDialog1.FileName
Label1.Text = path1
Else
Exit Sub
End If
Try
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False; Data Source=" & path1
conn.Open()
cat1 = New Catalog
cat1.ActiveConnection = conn

For i As Integer = 0 To cat1.Tables.Count - 1
If cat1.Tables(i).Type = "TABLE" Then ListBox1.Items.Add(cat1.Tables(i).Name)
Next
conn.Close()
cat1.ActiveConnection = Nothing
cat1 = Nothing
Catch ex As Exception
If conn.State = ConnectionState.Open Then
conn.Close()
cat1.ActiveConnection = Nothing
cat1 = Nothing
End If
End Try
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If Me.SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
If Me.SaveFileDialog1.FileName.Length = 0 Then
Label2.Text = ""
Button1.Enabled = False
Exit Sub
Else
path2 = SaveFileDialog1.FileName
Label2.Text = path2
Button1.Enabled = True
End If
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If path1 = path2 Then
MsgBox("لا يمكن انشاء الملف بنفس اسم الفهرس واسم الملف")
Exit Sub
End If
If CreateMDB() Then ' Function لانشاء الملف
Label4.Text = "تم انشاء الملف " & path2
MsgBox("تم انشاء الملف")
Else
MsgBox("حصل خطأ ولم يتم انشاء الملف")
End If
End Sub


بعد ذلك نضغط على زر (الى ملف) ونكتب الكود التالي

 كود

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If Me.SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
If Me.SaveFileDialog1.FileName.Length = 0 Then
Label2.Text = ""
Button1.Enabled = False
Exit Sub
Else
path2 = SaveFileDialog1.FileName
Label2.Text = path2
Button1.Enabled = True
End If
End If
End Sub


الان نضغط على زر (انشاء الملف والجدول والحقول ) وفيه Function لانشاء الملف والجدول والحقول

 كود


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If path1 = path2 Then
MsgBox("لا يمكن انشاء الملف بنفس اسم الفهرس واسم الملف")
Exit Sub
End If
If CreateMDB() Then ' Function لانشاء الملف
Label4.Text = "تم انشاء الملف " & path2
MsgBox("تم انشاء الملف")
Else
MsgBox("حصل خطأ ولم يتم انشاء الملف")
End If
End Sub



نقوم الان بكتابة Function لانشاء الملف والجدول والتعريفات ( فقط ) عملة انشاء دون ترحيل للبيانات وهنا سنستخدم اوامر ADOX لخلق الملف وتعريفاته

 كود

Function CreateMDB() As Boolean
Try
If File.Exists(path2) Then File.Delete(path2)

conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False; Data Source=" & path1
conn.Open()
cat1 = New Catalog
cat1.ActiveConnection = conn

' Create .mdb
Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path2
cat2 = New Catalog
cat2.Create(sConnString)
tbl = New ADOX.Table
tbl.Name = TableName
If cat1.Tables(TableName).Type = "TABLE" Then
'هذا الامر لاضافة اسماء الحقول الى الجدول
For Each col As ADOX.Column In cat1.Tables(TableName).Columns
' حجم الحقل نوع الحقل اسم الحقل
tbl.Columns.Append(col.Name, col.Type, col.DefinedSize)
'هذا الامر لتحديد اي الحقول required وذلك لان اذا لم نضعها adox تجعل قيمة جميع الحقول YES
If Not cat1.Tables(TableName).Columns(col.Name).Attributes = ColumnAttributesEnum.adColNullable Then
tbl.Columns(col.Name).Attributes = ColumnAttributesEnum.adColNullable
End If
Next col
' هذا الامر لتحديد واضافة PrimaryKey و Index
For Each Me.idxLoop In cat1.Tables(TableName).Indexes

For Each Me.colLoop In idxLoop.Columns
Next colLoop

If idxLoop.PrimaryKey Then
tbl.Keys.Append(idxLoop.Name, KeyTypeEnum.adKeyPrimary, colLoop.Name)
Else
tbl.Indexes.Append(idxLoop.Name, colLoop.Name)
End If
Next idxLoop
End If
cat2.Tables.Append(tbl)
tbl = Nothing
conn.Close()
cat1.ActiveConnection = Nothing
cat2.ActiveConnection = Nothing
cat1 = Nothing
cat2 = Nothing
Return True
Catch ex As Exception
If conn.State = ConnectionState.Open Then
tbl = Nothing
conn.Close()
cat1.ActiveConnection = Nothing
cat2.ActiveConnection = Nothing
cat1 = Nothing
cat2 = Nothing
End If
Return False
End Try
End Function


بذلك نكون قد تم إنشاء الملف MDB يحتوي على الجدول الذي قمنا باختيارة من ListBox1 بجميع حقوله وتعريفاته وكما في الملف الأصلي ويخزن على أساس Microsoft Access 2000

وبعد ذلك نقوم بالضغط على زر (تصدير البيانات) ونكتب الكود التالي وهنا سأقوم باستخدام ADO.net بما أنني قد حصلت على ملف mdb جاهز لإضافة البيانات إليه.

 كود

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If path1 = String.Empty Or path2 = String.Empty Or TableName = String.Empty Then
MsgBox("يجب تحديد اسماء الملفات والجدول")
Exit Sub
End If
Dim i As Integer = 0
Label5.Text = ""
Label6.Text = ""
Try
'وتعبئة البيانات الاصلي نقوم هنا بالاتصال بالملف
Dim StrCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;data source=" & path1
con1 = New OleDbConnection(StrCon)
Dim Cmd1 As String = "SELECT * from " & TableName
con1.Open()
Dim dr As OleDbDataAdapter = New OleDbDataAdapter(Cmd1, con1)
dsStore.Clear()
dr.Fill(dsStore, TableName)
Me.DataGridView1.DataSource = dsStore.Tables(TableName)
Label5.Text = dsStore.Tables(TableName).DefaultView.Count
DataGridView1.Refresh()

'الذي قمنا بانشاؤه وتعبئة البيانات نقوم هنا بالاتصال بالملف
Dim ProCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;data source=" & path2
Con2 = New OleDbConnection(ProCon)
Dim Cmd2 As String = "SELECT * from " & TableName
Con2.Open()
Dim drpro As OleDbDataAdapter = New OleDbDataAdapter(Cmd2, Con2)
drpro.MissingSchemaAction = MissingSchemaAction.Add
drpro.Fill(dsproduct, TableName)
Me.ProgressBar1.Value = 0
Me.ProgressBar1.Maximum = dsStore.Tables(TableName).Rows.Count + 100
'نقوم هنا بانشاء اوامر الاضافة والتعديل والالغاء
Dim Comb As OleDbCommandBuilder = New OleDbCommandBuilder(drpro)
' MsgBox(Comb.GetInsertCommand.CommandText.ToString)


ونكمل الان وسنبدأ بقرائة البيانات وهنا استخدمت اسم الحقل وليس index للحقل وذلك لانه عندما انشأنا الحقول عن طريق ADOX يقوم بترتيب الحقول ابجديا وليس كما هي مرتبه في الملف الاصلي . لذلك يجب استخدام اسم الحقل والا سيعطي خطا Type Mismatch

 كود

Dim prNewRow As DataRow
While i < dsStore.Tables(TableName).Rows.Count
prNewRow = dsproduct.Tables(TableName).NewRow()
For j As Integer = 0 To dsStore.Tables(TableName).Columns.Count - 1
prNewRow.Item(dsproduct.Tables(TableName).Columns.Item(j).ColumnName) = _
dsStore.Tables(TableName).Rows(i).Item(dsproduct.Tables(TableName).Columns.Item(j).ColumnName)
Next
dsproduct.Tables(TableName).Rows.Add(prNewRow)
drpro.Update(dsproduct, TableName)
i += 1
Me.ProgressBar1.Value = i
End While

drpro.Update(dsproduct, TableName)
dsproduct.AcceptChanges()
Me.ProgressBar1.Value = Me.ProgressBar1.Maximum
Label6.Text = dsproduct.Tables(TableName).DefaultView.Count
Me.DataGridView2.DataSource = dsproduct.Tables(TableName)
con1.Close()
Con2.Close()
Catch ex As Exception
If con1.State = ConnectionState.Open Then
con1.Close()
End If
If Con2.State = ConnectionState.Open Then
Con2.Close()
End If
Me.ProgressBar1.Value = Me.ProgressBar1.Maximum
MessageBox.Show(ex.Message)
Finally
MessageBox.Show(" لقد تمت عملية تصدير (" & i & ") سجل ", "تمت العملية", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Me.ProgressBar1.Value = 0
End Try
End Sub


وهنا نكون قد انتهينا وأصبح عندنا ملف mdb مخزن فيه الجدول الذي قمنا باختياره وجميع الحقول والبيانات ومتطابق تماما مع الجدول في الملف الأصلي .

بعد ذلك نضغط على زر (استيراد البيانات) لنفترض أننا نرغب في استيراد الملف mdb الذي قمنا بانشاؤه وتصدير البيانات له وتخزين محتوياته في الملف الأصلي . وهنا يوجد عندنا حالتين (اضافة و تعديل) وذلك بافتراض اننا قمنا باجراء تغيير على الملف
MDB الذي قمنا بانشاؤه سواء بإضافة مواد جديدة عليه أو تعديل السجلات الموجودة فيه وأننا نرغب باستيراد الملف وتخزينه في الملف الأصلي أي (يجب مراعاة أن السجل غير موجود في الأصلي فلذلك يجب إضافته والحالة الأخرى أن السجل موجود فيجب تعديله).

لذا نضغط على الزر استيراد ونكتب الحدث التالي:

اولا : نقوم بعمل اجراء لمعرفة ما هو اسم حقل PrimaryKey وذلك عن طريق ADOX وهو مهم جدأ حيث اننا سوف نقوم بترتيب السجلات في كلا الملفين حسب PrimaryKey

 كود

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim dsImp As New DataSet
Dim i As Integer = 0

If path1 = String.Empty Or path2 = String.Empty Or TableName = String.Empty Then
MsgBox("يجب تحديد اسماء الملفات والجدول")
Exit Sub
End If
Label6.Text = ""
Try
Dim conn As New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=" & path1 & ";Jet OLEDB:Engine Type=5"
conn.Open()

Dim cat1 As New ADOX.Catalog
cat1.ActiveConnection = conn
For j As Integer = 0 To cat1.Tables.Count - 1
If cat1.Tables(j).Type = "TABLE" Then
For Each Me.idxLoop In cat1.Tables(TableName).Indexes
For Each Me.colLoop In idxLoop.Columns
Next colLoop
If idxLoop.PrimaryKey Then
PrimKey = colLoop.Name
End If
Next idxLoop
End If
Next
cat1.ActiveConnection = Nothing
conn.Close()
cat1 = Nothing


بعد ذلك نقوم بقراءة الملفين في dataset عن طريق ADO.net ، وبناء أوامر التعديل والإضافة والإلغاء في DataAdapter عن طريق OleDbCommandBuilder وبشكل تلقائي، وتعريف datarow للأصلي والمستورد .

 كود

Dim StrCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;data source=" & path2
con1 = New OleDbConnection(StrCon)
Dim Cmd1 As String = "SELECT * from " & TableName & " ORDER BY " & PrimKey
con1.Open()
Dim dr As OleDbDataAdapter = New OleDbDataAdapter(Cmd1, con1)
ds.Clear()
dr.Fill(ds, TableName)
Me.DataGridView1.DataSource = ds.Tables(TableName)
Label5.Text = ds.Tables(TableName).DefaultView.Count
Label5.Refresh()
DataGridView1.Refresh()
Dim StrImp As String = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;data source=" & path1
Con2 = New OleDbConnection(StrImp)
Dim Cmd2 As String = "SELECT * from " & TableName & " ORDER BY " & PrimKey
Con2.Open()
Dim DrImp As OleDbDataAdapter = New OleDbDataAdapter(Cmd2, Con2)
DrImp.MissingSchemaAction = MissingSchemaAction.Add
DrImp.Fill(dsImp, TableName)

Dim DrComm As OleDbCommandBuilder = New OleDbCommandBuilder(dr)

Dim ImpRow As DataRow
Dim OrgRow As DataRow


بعد ذلك نقوم بعمل CurrencyManager للملف الاصلي وعمل sort له لنستطيع تحديد موقع السجل المراد تعديله عن طريق البحث عنه فإذا موجود نعدله واذا غير موجود نضيفه. واكرر هنا الشرط أننا نعدل حسب اسم الحقل وليس حسب index له لأنهما مختلفان في الترتيب.

 كود


Dim ThisRow As Integer = 0
Dim Rowpostion As CurrencyManager = CType(BindingContext(ds, TableName), CurrencyManager)
ds.Tables(TableName).DefaultView.Sort = PrimKey
Try
Me.ProgressBar1.Value = 0
Me.ProgressBar1.Maximum = Rowpostion.Count + 100
While i < dsImp.Tables(TableName).Rows.Count
ImpRow = dsImp.Tables(TableName).Rows(i)
ThisRow = ds.Tables(TableName).DefaultView.Find(ImpRow.Item(PrimKey))
If ThisRow < 0 Or ThisRow > ds.Tables(TableName).Rows.Count Then
'السجل غير موجود ويجب اضافته
OrgRow = ds.Tables(TableName).NewRow()
For j As Integer = 0 To ds.Tables(TableName).Columns.Count - 1
OrgRow.Item(ds.Tables(TableName).Columns.Item(j).ColumnName) = _
ImpRow.Item(ds.Tables(TableName).Columns.Item(j).ColumnName)
Next
ds.Tables(TableName).Rows.Add(OrgRow)
Else
'السجل موجود ونقوم بتعديله
Rowpostion.Position = ThisRow 'لتحديد ترتيب السجل
OrgRow = ds.Tables(TableName).Rows(ThisRow)
For j As Integer = 0 To ds.Tables(TableName).Columns.Count - 1
OrgRow.Item(ds.Tables(TableName).Columns.Item(j).ColumnName) = _
ImpRow.Item(ds.Tables(TableName).Columns.Item(j).ColumnName)
Next
End If
i += 1
Me.ProgressBar1.Value = i
End While
Catch ex As Exception
Me.ProgressBar1.Value = Me.ProgressBar1.Maximum
MessageBox.Show(Err.Number & ex.Message)
End Try
'لمعرفة السجلات التي اضيفة أو عدلت
Dim ss As DataTable = ds.Tables(TableName).GetChanges(DataRowState.Modified Or DataRowState.Added)

dr.Update(ds, TableName)
ds.AcceptChanges()
Me.ProgressBar1.Value = Me.ProgressBar1.Maximum
Label6.Text = ss.DefaultView.Count
Me.DataGridView2.DataSource = ss 'للتأكد من السجلات المعدلة أو المضافة
con1.Close()
Con2.Close()
Catch ex As Exception
If con1.State = ConnectionState.Open Then
con1.Close()
End If
If Con2.State = ConnectionState.Open Then
Con2.Close()
End If
MessageBox.Show(ex.Message)
Finally
MessageBox.Show(" لقد تمت عملية الاستيراد (" & i & ") سجل ", "تمت العملية", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Me.ProgressBar1.Value = 0
End Try
End Sub


وهكذا نكون قد انتهينا من استيراد الملف الذي قمنا بتصديرة .

والان نقوم بالضغط على Listbox1 مرتين ونكتب الاجراء التالي وهو لتحديد اسم الجدول الذي نرغب في انشاؤه أو تصديره او استيرادة

 كود

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Me.TableName = ListBox1.Text
If Me.TableName <> "" Then
Label3.Text = Me.TableName
Button5.Enabled = True
Else
Button5.Enabled = False
End If
End Sub



ويمكن استخدام امر الاستيراد دون انشاء الملف وتصديره (بشرط ان يكون الجدول المراد استيرادة متطابق تماما مع الملف الاصلي)
وبهذا نكون قد انتهينا من المشروع مع تمنياتي لكم بالتوفيق.

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,29/جمادى الأولى/1429 هـ,09:40 صباحاً
المشاركة #2

مشرف عام
الرتبة في المنتدى:عقيد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 727
سجل في:الثلاثاء,24/فر/1428 هـ,07:30 صباحاً
الدولة:مصر
رقم العضوية: 21334



السلام عليكم
اخى جهاد بارك الله فيك فعلا هذا الموضوع يؤكد خبرتك العاليه فى مجال الدوت نت وان ء الله سيتك تثبيته بعد فتره من العرض على الاعضاء فى المنتدى ليستفيد به الاعضاء فى اى وقت
ورججاء يا جهاد اذا كان لديك الوقت فى ان تقوم بشرح كيفية ظهور اليوسر كنترول فى الخصائص كما فى الصوره اليه او ان تقوم بوضع الكود لكى يستفيد الجميع من الخبره التى لديك


شكرا جزيلا على المواضيع الممتازه
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,29/جمادى الأولى/1429 هـ,09:45 صباحاً
المشاركة #3

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244





السلام عليكم ورحمة الله وبركاته


شكرا لك اخي علاء على هذا الرد الجميل

وانشاء الله اعدك بعمل درس لاضافة usercontrol الى properites

وهي عبارة عن عدة class's متداخلة مع بعضها البعض

وفي اقرب وقت ممكن
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,30/جمادى الأولى/1429 هـ,01:18 صباحاً
المشاركة #4

مشرف لمنتدى الفيجوال 6
الرتبة في المنتدى:لواء

أيقونة المجموعة

المجموعة: مشرفي الأقسام
المشاركات: 1510
سجل في:الخميس,01/ربيع الأول/1427 هـ,12:13 صباحاً
الدولة:مصر
رقم العضوية: 9481



السلام عليكم ورحمة الله وبركاته

موضوع رائع فعلا اخي العزيز jbsa بارك الله فيك


اما بالنسبة لسوال اخي علاء

فعلا ده تبع نوع من انظمة تصنيع الكنترولز في الدوت نت وهيا الادوات المشتقة Derived Controls

وهي عبارة عن تالف مجموعة من الادوات ومن الكلاسات المتوفرة في بيئة الدوت نت مع بعضها مكونة اداة نهائية
ووضع اي اداة في البروبرتس يندرج تحت فئة Support Design Time
وبصراحة ولا اخفي عليك موضوع اضافة اداة في صندوق الادوات موضوع معقد لانه يدخل ضمن الاشتقاقات والوراثة بانك بتشتق كلاس الاداة الا تبي اضافتها كخاصية وبتعمل عليها عمليات الوراثة في كلاس جديد وهي عمليات متداخله وتعتبر من اعلي مراحل التصنيع للادوات لانها تجمع كل شي وفي النهاية بتضفها للخاصية المسماه باسمها في صندوق الادوات ......

زي ما قال الاخ jbsa كلاسات متداخله في بعضها .......

ربنا يسهل ويوفر لي الوقت الكافي للشروع في شرح تصنيع الادوات ان شاء الله بجميع انواعها
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,30/جمادى الأولى/1429 هـ,09:19 صباحاً
المشاركة #5

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244





السلام عليكم ورحمة الله وبركاته


شكرا اخي Max Bayne وبارك الله فيك وجزاك الله خيرا

وربنا يسهل عليك وعلي لنعمل هذه الدروس حتى نرتفع لمستوى التطوير وتطويع الادوات بين ايدينا لنستخدمها كما نرغب.

وكما قلت ان
 اقتباس
اضافة اداة في صندوق الادوات موضوع معقد لانه يدخل ضمن الاشتقاقات والوراثة


ولكني انشاء الله سأقوم بشرح كيفيه اضافة userControl الى property
في اداة label وبالتفصيل في استخدام خصائص الوراثة وصفاتها ونوعيتها
حيث اني بدأت باعداد هذا الدرس.

تمنياتي للجميع بالتوفيق
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,30/جمادى الأولى/1429 هـ,10:08 صباحاً
المشاركة #6

مشرف عام
الرتبة في المنتدى:عقيد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 727
سجل في:الثلاثاء,24/فر/1428 هـ,07:30 صباحاً
الدولة:مصر
رقم العضوية: 21334



مشكورين اخى جهاد وربنا يوفقك ويعينك على تقديم المساعدات للغير

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,14/جمادى الثانية/1429 هـ,02:39 صباحاً
المشاركة #7

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244





السلام عليكم ورحمة الله وبركاته


اخي علاء ،

تم اضافة الدرس الذي وعدتك به على هذا الرابط

http://www.arabmoheet.net/forum/default.asp?codepage=3&topic_no=20789
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,12/شعبان/1429 هـ,03:35 صباحاً
المشاركة #8

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 21
سجل في:الجمعة,18/شعبان/1428 هـ,07:16 صباحاً
الدولة:سوريا
رقم العضوية: 33448



مشكورررررررررررررررررررررر يا أخي


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالسبت,27/جمادى الأولى/1432 هـ,11:55 صباحاً
المشاركة #9

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 29
سجل في:الجمعة,26/جمادى الأولى/1432 هـ,01:29 مساءً
الدولة:أثيوبيا
رقم العضوية: 98011



مشكور يا استاذ درس أكثر من رائع


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

إضافة رد جديد إضافة موضوع جديد



 
الوقت الأن:اليوم,06:42 مساءً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)