كـود نقل البيانات من قاعدة بيانات الى أخرى Database Syncronization

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

إخـواني الأعضـاء الكرام, كيف حال الجميع؟
أسـأل الله العظيم أن تكونوا فى أفضل حال وأتم عافية وكـل عـام أنتم بخير

لقد قُمت ببرمجة إجـراء يقوم بنقل البيانات من قاعدة بيانات أخرى ويدعم التعامل مع قواعد بيانات Access 97, 2000, 2003, 2007 واليـوم أُقدمه لكم هدية مني إليكم بمناسبة عيد الأضحى المبارك

الإجـراء:
'Author: Programmtion(OmarNegm)
Public Sub accessDBSyncronization(ByVal DatabaseFromPath As String, ByVal DatabaseToPath As String, Optional ByVal DatabaseFromPassword As String = "", Optional ByVal DatabaseToPassword As String, Optional ByVal IsAccess2007 As Boolean = False)
On Error GoTo errHandler

Dim frmCN As New ADODB.Connection, toCN As New ADODB.Connection
Dim frmRS As New ADODB.Recordset, toRS As New ADODB.Recordset, tblRS As New ADODB.Recordset
Dim Tbls As String, arrTbls() As String, frmProvider As String, toProvider As String
Dim tblI As Integer, fldI As Integer

If IsAccess2007 = True Then
frmProvider = "Provider=Microsoft.ACE.12.0;JET OLEDB:Database Password=" & DatabaseFromPassword & ";Data Source=" & DatabaseFromPath
toProvider = "Provider=Microsoft.ACE.12.0;JET OLEDB:Database Password=" & DatabaseToPassword & ";Data Source=" & DatabaseToPath
Else
frmProvider = "Provider=Microsoft.JET.OLEDB.4.0;JET OLEDB:Database Password=" & DatabaseFromPassword & ";Data Source=" & DatabaseFromPath
toProvider = "Provider=Microsoft.JET.OLEDB.4.0;JET OLEDB:Database Password=" & DatabaseToPassword & ";Data Source=" & DatabaseToPath
End If

If frmCN.State = 1 Then frmCN.Close
frmCN.Open frmProvider

If toCN.State = 1 Then toCN.Close
toCN.Open toProvider

Set tblRS = frmCN.OpenSchema(adSchemaTables)

Tbls = ""

While Not tblRS.EOF = True
If tblRS.Fields("TABLE_NAME").Value "MSysAccessStorage" And tblRS.Fields("TABLE_NAME").Value "MSysACEs" _
And tblRS.Fields("TABLE_NAME").Value "MSysNavPaneGroupCategories" _
And tblRS.Fields("TABLE_NAME").Value "MSysNavPaneGroups" _
And tblRS.Fields("TABLE_NAME").Value "MSysNavPaneGroupToObjects" _
And tblRS.Fields("TABLE_NAME").Value "MSysNavPaneObjectIDs" _
And tblRS.Fields("TABLE_NAME").Value "MSysObjects" _
And tblRS.Fields("TABLE_NAME").Value "MSysQueries" _
And tblRS.Fields("TABLE_NAME").Value "MSysRelationships" Then
If Tbls = "" Then
Tbls = tblRS.Fields("TABLE_NAME").Value
Else
Tbls = Tbls & "," & tblRS.Fields("TABLE_NAME").Value
End If
End If
tblRS.MoveNext
Wend

arrTbls = Split(Tbls, ",")

For tblI = 0 To UBound(arrTbls)
If frmRS.State = 1 Then frmRS.Close
frmRS.CursorLocation = adUseClient
frmRS.Open "SELECT * FROM " & arrTbls(tblI), frmCN, adOpenDynamic, adLockOptimistic

If toRS.State = 1 Then toRS.Close
toRS.CursorLocation = adUseClient
toRS.Open "SELECT * FROM " & arrTbls(tblI), toCN, adOpenDynamic, adLockOptimistic

If frmRS.RecordCount > 0 Then
frmRS.MoveFirst
toCN.Execute "DELETE * FROM " & arrTbls(tblI)
Do Until frmRS.EOF = True
toRS.AddNew
For fldI = 0 To frmRS.Fields.Count - 1
If IsNull(frmRS.Fields(fldI).Value) = False Then
toRS.Fields(fldI).Value = frmRS.Fields(fldI).Value
End If
Next fldI
toRS.Update
frmRS.MoveNext
Loop
End If
Next tblI

errHandler:
If Not Err.Number = 0 Then
MsgBox "An Error Has Occurred:" & vbNewLine & "Error Description: " & Err.Description
Err.Clear
End If

Set frmCN = Nothing
Set toCN = Nothing
Set frmRS = Nothing
Set toRS = Nothing
Set tblRS = Nothing
End Sub

كيفية التعامل مع الإجـراء:

الإجراء يحتوى على خمسة معاملات إثنين منهم إجبارية والثلاثة الباقية إختيارية وكلهم من النوع String عدا الأخير فهو من النوع Boolean وهم على التوالي:

1 – DatabaseFromPath : (إجباري) ويتم التعويض عنه بمسـار قاعدة البيانات الأساسية (المُنتقل منها البيانات).
2 – DatabaseToPath : (إجباري) ويتم التعويض عنه بمسـار قاعدة البيانات الثانية (المُنتقل إليها البيانات).
3 – DatabaseFromPassword : (إختياري) ويتم التعويض عنه بكلمة مرور قاعدة البيانات الأساسية (إذا كانت تحتوى على كلمة مرور فهو إختياري).
4 – DatabaseToPassword : (إختياري) ويتم التعويض عنه بكلمة مرور قاعدة البيانات الثانية (إذا كانت تحتوى على كلمة مرور فهو إختياري).
5 – IsAccess2007 : (إختياري) ويحمل القيمة True إذا كنت ستتعامل مع قواعد بيانات Access 2007 فيما عدا ذلك فيحمل القيمة False أو تتجاهله حيث أن القيمة الإفتراضية له هي False .

ويُمكنك التعامل معه برمجياً كالتالي:

ضع الكود داخل Module وبعدها يُمكنك إستدعائه من أي مكان داخل المشـروع هكـذا:

الأمر التالي سوف يقوم بنقل جميع البيانات من قاعدة البيانات MyData الموجودة فى المسـار D:\New Folder الى قاعدة البيانات MyData2 الموجودة فى المسـار C:\New Folder وكلا القاعدتين من من نوع Access 2003 القاعدتين تحتويا على كلمة مرور وهي 123 :

accessDBSyncronization "D:\New Folder\MyData.mdb", "C:\New Folder\MyData2.mdb", "123", "123"

لاحظ تجاهل المعامل الأخير IsAccess2007 وذلك لان قيمته الإفتراضية False ومع كُل يُمكنك كتابته بهذه الطريقة إذا كنت لا تُريد تجاهله:

accessDBSyncronization "D:\New Folder\MyData.mdb", "C:\New Folder\MyData2.mdb", "123", "123", False
كلا الطريقتين صحيحة.

الأمر التالي سوف يقوم بنقل جميع البيانات من قاعدة البيانات MyData الموجودة فى المسـار D:\New Folder الى قاعدة البيانات MyData2 الموجودة فى المسـار C:\New Folder وكلا القاعدتين من من نوع Access 2007 القاعدتين لا تحتويا على كلمة مرور :

accessDBSyncronization "D:\New Folder\MyData.accdb", "C:\New Folder\MyData2.accdb", , , True

لاحظ تجاهل معاملى كلمة المرور لعدم وجود كلمة مرور للقاعدتين وأيضاً يُمكنك كتابة الأمر هكذا إذا كنت لا تُريد تجاهلهما:

accessDBSyncronization "D:\New Folder\MyData.accdb", "C:\New Folder\MyData2.accdb", "", "", True

ولا تنسـى أنه يجب أن تكون قاعدتي البيانات متطابقة فى الجداول الموجوده بكليهما وكذلك الحقول فالإجراء يقوم فقط بنقل البيانات وليس الحقول والجداول!

اتمنى أن تسـتفيدوا من الإجـراء, وإذا كان هنـاك أي إستفسار فأنا موجود إنشـاء الله
والسـلام عليكم ورحمة الله وبركاته

Advertisements

2 thoughts on “كـود نقل البيانات من قاعدة بيانات الى أخرى Database Syncronization

  1. جهد عظيم ياآخى الكريم ولكن نتمنى ان كـود نقل البيانات من قاعدة بيانات الى أخرى Database Syncronization مع SQL Server 2000

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s