اخواني الأعزاء
السلام عليكم ورحمة الله وبركاته
شكرا على جهودكم جميعا وخاصة اخواننا المشرفين على الموقع والمنتدى
قرأت كثيرا عن ADO
وأنها أسرع من DAO
ولكنني لم ألمس ذلك بشكل عملي
فأرجو ممن لديه معلومات ومواضيع عن فرق الأداء أن يزودني بها
وشكرا
اخواني الأعزاء
السلام عليكم ورحمة الله وبركاته
شكرا على جهودكم جميعا وخاصة اخواننا المشرفين على الموقع والمنتدى
قرأت كثيرا عن ADO
وأنها أسرع من DAO
ولكنني لم ألمس ذلك بشكل عملي
فأرجو ممن لديه معلومات ومواضيع عن فرق الأداء أن يزودني بها
وشكرا
اخي الفاضل
السلام عليكم ورحمة الله وبركاته
دعني اناقش معك هذا الموضوع طالما انك قرأت الكثير عن ADO و DAO
س : ماذا تعني ADO و DAO
ج :
DAO
تعني Data Access Objects ( كائنات الوصول إلى البيانات )
1. هذه التقنية ظهرت قديما مع اصدارات اكسيس حتى عام 1997 .
2. وتستخدم فقط مع قاعدة بيانات واحدة فقط
3. كما انها واجهة وصول إلى البيانات تتصل بـ Microsoft Jet ومصادر البيانات المتوافقة مع ODBC للاتصال بالبيانات وبنيات قواعد البيانات واستردادها وتحديثها والتعامل معها.
4. ابطأ بكثير من التقنية الجديده ADO
مثال لعمل قاعدة بيانات بهذه التقنية وهي تحتاج لمرجع MDAC2.0 ليكون مثبت على الجهاز
At least MDAC2.0 installed is required to run next code. Const Jet10 = 1
Const Jet11 = 2
Const Jet20 = 3
Const Jet3x = 4
Const Jet4x = 5
Sub CreateNewMDB(FileName, Format)
Dim Catalog
Set Catalog = CreateObject("ADOX.Catalog")
Catalog.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Jet OLEDB:Engine Type=" & Format & _
";Data Source=" & FileName
End Sub'Create Access2000 database
CreateNewMDB "G:\a2000.mdb", Jet4x
ADO
تعني ActiveX Data Object ( كائنات بيانات آكتيف أكس )
1. ظهرت هذه التقنية بداية العام 1998 واستطاعت التغلب على جميع المشاكل السابقة
2. تستخدم مع جميع قواعد البيانات ومع اي قاعدة بيانات
3. واجهة وصول إلى البيانات تسمح للبرامج العميلة بالوصول إلى البيانات الموجودة في قواعد البيانات المستندة إلى ملف أو ملقم والتعامل معها.
4. اسرع بكثير من سابقتها نظرا لتعدد الكائنات الموجوده بها
مثال لعمل قاعدة بيانات بإستخدام ADO وتحتاج لمرجع DAO 3.6
DAO 3.6 is required to run the code (You can also use other version of DAO, for example DAO.DBEngine.35) Const dbVersion10 = 1
Const dbVersion11 = 8
Const dbVersion20 = 16
Const dbVersion30 = 32
Const dbVersion40 = 64
Sub CreateNewMDB(FileName, Format)
Dim Engine
Set Engine = CreateObject("DAO.DBEngine.36")
Engine.CreateDatabase FileName, ";LANGID=0x0409;CP=1252;COUNTRY=0", Format
End SubCreate Access2000 database
CreateNewMDB "G:\a2000.mdb", dbVersion40
اذا رغبت بالشرح المفصل بين التقنيتين فإقرأ الروابط التالية
الشرح الوافي بين التقنيتين
http://www.officena.com/Tips/AC3-ADO&DAO.htm
شرح من موقع الدعم لمايكروسوفت
http://support.microsoft.com/default.aspx?...product=acc2002
http://office.microsoft.com/ar-sa/assistan...1866451025.aspx
بمعنى انك تقوم بمقارنة برنامج الاكسيس 97 مع اكسيس 2003 فهل هناك فرق في الاداء
اختكم
زهره
ماذا عن OLEDB؟ هل هي مختلفة؟ وهي هي أفضل؟
وما هي أفضل تقنية لإعطاء أفضل أداء للاتصال بقاعدة بيانات على السيرفر سواء MS SQL أو Oracle أو غيرهما؟
اخي الفاضل
السلام عليكم ورحمة الله وبركاته
لقد اخذتنا بزاوية انحراف 180 درجة عن السؤال السابق في المشاركه فنحن نتحدث عن تقنية ADO و DAO
وانت الان تشطح بنا الى OLE DB ولكن حسنا لا يوجد لديك مشكلة سنشرح لك هذه الخدمة
ماذا تعني OLE DB
تعني Object Linking and Embedding Database ( ريط الكائنات وتضمينها ) مع نفسها وتسمى الان automation الأتممه التي ظهرت في عام 1996
كما انها تعتبر جزء من مصدر البيانات المفتوح ODBC = Open Data Base Connectivity
وهي الاسلوب القياسي للمشاركة بالبيانات بين قواعد البيانات والبرامج. وتستخدم برامج تشغيل ODBC لغة الاستعلام الهيكلية (SQL) القياسية للوصول إلى بيانات خارجية.) (ODBC) .
في معمارية ODBC، يتصل أحد التطبيقات مثل Access أو برنامج Microsoft Visual Basic، بإدارة برنامج تشغيل ODBC، الذي يستخدم بدوره برنامج تشغيل ODBC معين مثل، برنامج تشغيل Microsoft SQL ODBC للاتصال بمصدر بيانات قاعدة بيانات Microsoft SQL Server
كما يمكنك استخدام برامج تشغيل ODBC للارتباط بقواعد بيانات Microsoft SQL Server وقواعد بيانات Microsoft FoxPro وبيانات من برامج أخرى توفر برامج تشغيل ذات 32 بت المتوافقة مع ODBC Level 1 للوصول إلى ملفات البيانات. يثبت Microsoft Access تلقائياً برنامج تشغيل Microsoft SQL Server ODBC (Sqlsrv32.dll) وبرنامج تشغيل Microsoft FoxPro ODBC (vfpodbc.dll) وبرنامج تشغيل Oracle ODBC (msorcl32.dll) وبعض ملفات دعم ODBC (ملفات التعليمات ورمز لوحة التحكم/الأدوات الإدارية لمصادر بيانات (ODBC)).
استخدام خصائص الاتصال في موفر Microsoft OLE DB لـ Jet
لتخصيص إعدادات "تسجيل Microsoft® Windows®"، يمكنك استخدام خصائص الاتصال في موفر Microsoft OLE DB لـ Jet. يتم تنفيذ ذلك بواسطة الرجوع إلى إحدى الخصائص في كائن الاتصال وتغيير قيمتها. على سبيل المثال، بافتراض أن كائن الاتصال يسمى ADOConnection، سيقدم ما يلي نفس النتائج أثناء استخدام كائنات البيانات النشطة (ADO):
ADOConnection.Properties("Jet OLEDB:Max Locks Per File") = 20000
تكون أسماء الخصائص مختلفة عن إعدادات التسجيل وثوابت DAO. وتكون أسماء الخصائص كما يلي:
Jet OLEDB:Max Locks Per File
Jet OLEDB:Implicit Commit Sync
Jet OLEDB:Flush Transaction Timeout
Jet OLEDB:Lock Delay
Jet OLEDB:Max Buffer Size
Jet OLEDB:User Commit Sync
Jet OLEDB:Lock Retry
Jet OLEDB:Exclusive Async Delay
Jet OLEDB:Shared Async Delay
Jet OLEDB:Page Timeout
Jet OLEDB:Recycle Long-Valued Pages
مثال
ينشئ الإجراء Sub جدولاً، ذو حقل واحد، OrderID. ويوفر مثالاً للتصريح بالكائنات وتعيين قيمة والإشارة إلى هذه الكائنات في التعليمات البرمجية:
Public Sub ADOXCreateTable() ' The ADOX Catalog object corresponds to the DAO Database ' object Dim cat As ADOX.Catalog Dim tbl As ADOX.Table ' Open the catalog cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=<full path to your database>\<your database name>.mdb;" ' Create a new Table object. With tbl .Name = "Old Invoices" ' Create a field and append it to the new Table ' object. This must be done before appending the ' Table object to the Tables collection of the ' Catalog. .Columns.Append "OrderID", adVarWChar End With ' Add the new table to the database. cat.Tables.Append tbl 'Clean up the references Set cat = Nothing Set tbl = Nothing End Sub
تكوين مشغل قاعدة بيانات Microsoft Jet للوصول إلى ODBC
تصف الأجزاء التالية إعدادات "تسجيل Microsoft® Windows®" الخاصة بمشغل قاعدة بيانات Microsoft Jet للاتصال بقاعدة بيانات ODBC.
تهيئة الإعدادات لـ Microsoft Jet المتصل بقواعد بيانات ODBC
يحتوي المجلد \HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\ODBC على إعدادات تهيئة لمشغل قاعدة بيانات Microsoft Jet.
ملاحظة يتم عرض الإعدادات النموذجية للإدخالات الموجودة في المجلد Jet\4.0\Engines\ODBC في المثال التالي.
LoginTimeout=20
QueryTimeout=60
ConnectionTimeout=600
AsyncRetryInterval=500
AttachCaseSensitive=0
AttachableObjects='TABLE','VIEW','SYSTEM TABLE','ALIAS','SYNONYM'
SnapshotOnly=0
TraceSQLMode=0
TraceODBCAPI=0
DisableAsync=1
TryJetAuth=1
PreparedInsert=0
PreparedUpdate=0
FastRequery=0
FatBlastRows=-1
FatBlastTimeout=3
ODBCISAMAttach=0
لمزيد من المعلومات الرجاء الانتقال الى هذا الرابط
اختكم
زهره
شكرا جزيلاً على الشرح
أختي الفاضلة زهرة
شكرا جزيلا على الردود
ولكن كنت أريد مثال فعلي عن فرق الأداء(من ناحية الزمن) في معالجة البيانات ما بين ADO وDAO
وشكرا
اخي الفاضل
السلام عليكم ورحمة الله وبركاته
كما تعلم ان الامثله في المنتدى محدوده وصغيرة الحجم وهي لغرض ايضاح فكره معينه
وقد لا تلاحظ ابدا ان هناك فرق بين الاداء على مستوى قاعدة بيانات صغيره فسيكون الزمن المقارن في اجزاء صغيره جدا من الثانية
ولكن يتضح الفرق في قواعد البيانات الضخمة التي تتعدى حوالى 100000 سجل وهنا يمكنك المقارنه وستعرف الفارق الزمنى بين التقنيتين
وقد قمت بالتجربة بواسطة كود طويل جدا ومعقد لست بحاجة له واتضح منه التالي
TableName = tblCompany
RowsQty = 1000
1000 cycles.
DAO: STime = 2006.03.15 22:48:29, ETime = 2006.03.15 22:48:45, Avg = 0,016
ADO: STime = 2006.03.15 22:49:02, ETime = 2006.03.15 22:49:11, Avg = 0,009
كما تلاحظ ان الفارق ضئيل جدا بينهما في البحث عن سجل معين في جدول يحتوي 1000 سجل وبسرعة دوران حوالى 1000 دوره في الثانية فلاحظ 0,016 ثانية للـ DAO و 0,009 ثانية للـ ADO
عموما اخي الكريم انا لا اعلم لماذا تشغل نفسك بمثل هذه الامور لانها امور تقنية اكثر منها تعليميه بحته
لهذا من الافضل استخدام اكسيس 2003 فهو يفي بالمتطلبات وزيادة .
اختكم
زهره
أختي الفاضلة/ زهرة
حقيقة لابد من أن نذكرها في أننا دائما نستمد الجديد من عبق علمك المزدهر شكرأ لك أختى زهرة وجزاك الله كل خير وجعل كل هذا في ميزان حسناتك
الله هو الموفق لسواء السبيل
أختي الفاضلة زهرة
السلام عليكم ورحمة الله وبركاته
شكرا على جهودك في المنتدى
أعتذر على اعادة اثارة هذا الموضوع بعد هذه الفترة الزمنية الطويلة،
ولكنني الى الآن لم أجد الفارق بين التقنيتين...آسف مجداا
علما أنني أتعامل مع قواعد بيانات فيها عشرات الالاف ومئات الالاف من السجلات.....!!!!!
قد يكون العذر من طريقة الكود التي أكتبها
لذا هل يمكنك تزويدي بالكود الذي قمت بتجريبه
مع الشكر الجزيل
هذا الموضوع مغلق.