الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن الاتصال بقواعد sql server من خلال اكسيس

بدأه ابو فتحى في 30 يناير 2014 · 19 رد · 2,070 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عند تحويل قاعدة البيانات الي sql server تمتنع جميع اكواد Dao عن العمل سواء بإضافة أو تحديث أو تعدبل البيانات 
فكيف يمكن الاتصال بقاعدة بيانات sql server من خلال الكود .. علما بأن الواجهة اكسس
عرفت انه يمكن من خلال اكواد ado
ولكن ماهو الكود
ارجو المساعدة 

#2

 اخي الكريم : ابو فتحي

 

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

 

لعمل اتصال بقاعدة البيانات SQL SERVER  يلزمك اولا القيام بهذا العمل ( الشرح مقدم من المشرف محمد فؤاد )

 

Linked Database to SQL server with mdb file.rar

 

 

بعد تطبيق الشرح ونجاح الإرتباط  بقاعدة البيانات SQL SERVER

 

يلزمك عمل تعديل على بعض الخيارات ليتم التوافق بين الـ SQL SERVER وبرنامج الأكسيس فيما يخص الإستعلامات والمعايير الخاصة بها

 

post-15367-0-91882200-1391097796_thumb.g

 

post-15367-0-01823800-1391098067_thumb.g

 

post-15367-0-34475300-1391098317_thumb.g

 

 

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

 

بالتوفيق

#3

بالنسبة لي أفضل أن تستخدم (MS Acess Project) للأساب التالية

- يوفر هذا النوع من قواعد البيانات اتصالا مباشرا بملقم الخادم.

- إنشاء ماشر للجداول والاستعلامات من داخل قاعدة البيانات دون الرجوع إلى الخادم.

- عند استراد الجداول من الأكسس التقيدي يتم حفظها مباشرة على الخادم دون الحاجة إلى محولات 

- إمكانية إنشاء الإجراءات المخزنة والبارامترات.

- النماذج والتقارير تدعم نهج  الخادم.

تم تعديل هذه المشاركة بواسطة القحم في 30 يناير 2014 في 22:18

#4

اختى الاستاذه / زهرة 

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

شكر على الرد اما بعد ,,,,,,,

تم عمل الخطوات السابق بنجاح و لكن 

Dim BackObj As TableDef, BackDB As Database
Set BackDB = DBEngine.Workspaces(0).OpenDatabase(strPath, False, False, ";PWD=" & strPwd)
For Each BackObj In BackDB.TableDefs
   Left(BackObj.name, 4) <> "MSys 
Then
DoCmd.TransferDatabase acLink, "Microsoft Access", strPath, acTable, BackObj.name, BackObj.name
End If
Next BackObj
Set FrontDB = Nothing
Set BackDB = Nothing

هذا الكود يعمل بشكل ممتاز للربط البرتامج ( اكسيس ) بالجدوال 

ولكن بعد تحويل (تكبير)قاعدة الجدوال من اكسس 2003 الى اس كيو ال سيرفر2008 بنجاح لايعمل 

حتى ربط البرنامح بطريقة العادي من قوائم اكسيس بظهر البيانات المحول بدون جدوال فى معالجة الاكسيس

#5

اختى الاستاذه / زهرة 

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

شكر على الرد اما بعد ,,,,,,,

تم عمل الخطوات السابق بنجاح و لكن 

Dim BackObj As TableDef, BackDB As Database
Set BackDB = DBEngine.Workspaces(0).OpenDatabase(strPath, False, False, ";PWD=" & strPwd)
For Each BackObj In BackDB.TableDefs
   Left(BackObj.name, 4) <> "MSys 
Then
DoCmd.TransferDatabase acLink, "Microsoft Access", strPath, acTable, BackObj.name, BackObj.name
End If
Next BackObj
Set FrontDB = Nothing
Set BackDB = Nothing

هذا الكود يعمل بشكل ممتاز للربط البرتامج ( اكسيس ) بالجدوال 

ولكن بعد تحويل (تكبير)قاعدة الجدوال من اكسس 2003 الى اس كيو ال سيرفر2008 بنجاح لايعمل 

حتى ربط البرنامح بطريقة العادي من قوائم اكسيس بظهر البيانات المحول بدون جدوال فى معالجة الاكسيس

post-269111-0-36247800-1391192441.jpg

#6

اختى الاستاذ / القحم


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


شكر على الرد اما بعد ,,,,,,,


ما هو (MS Acess Project) ؟؟؟؟؟؟؟؟؟؟؟؟؟؟


ما هو الفرق بين اكسيس  و  (MS Acess Project) ( اسفى على جاهلى بهذا الشئ )


#7
ابو فتحى كتب:

اختى الاستاذه / زهرة 

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

شكر على الرد اما بعد ,,,,,,,

تم عمل الخطوات السابق بنجاح و لكن 

Dim BackObj As TableDef, BackDB As Database
Set BackDB = DBEngine.Workspaces(0).OpenDatabase(strPath, False, False, ";PWD=" & strPwd)
For Each BackObj In BackDB.TableDefs
   Left(BackObj.name, 4) <> "MSys 
Then
DoCmd.TransferDatabase acLink, "Microsoft Access", strPath, acTable, BackObj.name, BackObj.name
End If
Next BackObj
Set FrontDB = Nothing
Set BackDB = Nothing

هذا الكود يعمل بشكل ممتاز للربط البرتامج ( اكسيس ) بالجدوال 

ولكن بعد تحويل (تكبير)قاعدة الجدوال من اكسس 2003 الى اس كيو ال سيرفر2008 بنجاح لايعمل 

حتى ربط البرنامح بطريقة العادي من قوائم اكسيس بظهر البيانات المحول بدون جدوال فى معالجة الاكسيس

 

 

اخي الفاضل : ابو فتحي

 

سؤالك غير واضح وغير مفهوم

 

هل تريد بعد تكبير قاعدة البيانات وتحويل الجداول الى SQL SERVER  ان تستخدم هذا الكود لربط الجداول التي في قاعدة  SQL

 

ام انك تقصد جداول اخرى على قاعدة بيانات ثانية خارجية

 

اذا كنت تقصد ان تستخدم هذا الكود لربط الجداول بقاعدة SQL  فلا يمكن بارك الله بك لأن الوضع اصبح مختلف تماما لأن الجداول في SQL لها خصائص غير التي في قاعدة البيانات اكسيس

 

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

 

 

بالتوفيق

#8

 اختي الاستاذه: زهرة 

 

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

 

طبعا اكيد اريد كود ربط بجدول sql server 

اقتباس

 

اخي الفاضل : ابو فتحي

 

سؤالك غير واضح وغير مفهوم

 

هل تريد بعد تكبير قاعدة البيانات وتحويل الجداول الى SQL SERVER  ان تستخدم هذا الكود لربط الجداول التي في قاعدة  SQL

 

ام انك تقصد جداول اخرى على قاعدة بيانات ثانية خارجية

 

اذا كنت تقصد ان تستخدم هذا الكود لربط الجداول بقاعدة SQL  فلا يمكن بارك الله بك لأن الوضع اصبح مختلف تماما لأن الجداول في SQL لها خصائص غير التي في قاعدة البيانات اكسيس

 

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

 

 

مرفق صورة لجدوال المراد الربط بها     

 

post-269111-0-45192800-1391207747_thumb.

#9

هذه الجداول مرتبطه وجاهزة من sql  الى الأكسيس

 

ما الذي تريد عمله بعد ذلك !!!

 

لم يتبقى عليك سوى وضع مصادر النماذج والتقارير والإستعلامات بناء على هذه الجداول المرتبطة

#10

 اختي الاستاذه: زهرة  ( اسفى على الازعاج و شكر على الرد )

 

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

 

المطلوب : ربط القاعدة 1 ( تماذج و تقارير ) من القاعدة 2 ( جدوال ) بكود مثال ( لا يعمل )

Dim BackObj As TableDef, BackDB As Database
Set BackDB = DBEngine.Workspaces(0).OpenDatabase(strPath, False, False, ";PWD=" & strPwd)
For Each BackObj In BackDB.TableDefs
   Left(BackObj.name, 4) <> "MSys 
Then
DoCmd.TransferDatabase acLink, "Microsoft Access", strPath, acTable, BackObj.name, BackObj.name
End If
Next BackObj
Set FrontDB = Nothing
Set BackDB = Nothing

حتى ربط البرنامح بطريقة العادي من قوائم اكسيس مثلا ملف - احضار بيانات خارجية - ربط جداول بظهرالقاعدة 2 (بدون جداول )

post-269111-0-68531300-1391265392_thumb.

post-269111-0-88172700-1391265979_thumb.

#11

اخي الفاضل : ابو فتحي

 

يبدو انك مبتدأ على مثل هذه الأمور او انك لم تعرف الطريقة اساسا

 

دعني اوضح لك بارك الله بك

 

الان لدينا قاعدتين قاعدة الجداول وقاعدة النماذج  في برنامج الأكسيس العادي  وهذا الأمر لا غبار عليه

 

 

قمنا بعد ذلك بتكبير قاعدة البيانات التي بها الجداول الى SQL SERVER  فأصبحت قاعدة SQL SERVER هي قاعدة الجداول

 

الآن قمنا بعملية ربط الجداول من SQL SERVER الى برنامج الأكسيس وظهرت لدينا جداول  SQL SERVER  

 

الآن كل ما علينا هو اخذ جميع الكائنات من قاعدة النماذج الى القاعدة التي بها الجداول المرتبطة من SQL SERVER

 

ثم نقوم بحذف قاعدة النماذج لأننا لسنا بحاجه لها والسبب ان قاعدة الجداول هي SQL SERVER  والقاعدة الثانية التي

 

استوردنا اليها النماذج وبها الجداول المرتبطة مع SQL SERVER اصبحت هي قاعدة النماذج

 

 

بالتوفيق

#12

اختى الاستاذه / زهرة 

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

تم تنفيذ الخطوات بنجاح ولكن تمتنع جميع اكواد Dao عن العمل سواء بإضافة أو تحديث أو تعدبل البيانات او حذف البيانات 
عرفت انه يمكن من خلال اكواد ado
ولكن ماهو الكود
ارجو المساعدة 

 هذا اكواد البرنامج قبل التحويل الى 
sql server
On Error GoTo err_pic:
Dim db As Database, rec As Recordset, REC1 As Recordset
Dim i As Integer, X As Long, recset As Recordset
Dim frm As Form
Dim ctl As Variant
Dim VarReturn As Variant, str As String
Dim tarek As String, strPwd As String     ' ãÊÛíÑ áßáãÉ ãÑæÑ ÞÇÚÏÉ ÇáÈíÇäÇÊ ÇáÌÏíÏÉ
strPwd = Nz(DFirst("[CopyPassword]", "[OptCopies]"), "")
tarek = Nz(DFirst("[Path2010]", "[OptCopies]"), "")
Set db = OpenDatabase(tarek, False, False, ";pwd=" & strPwd)
Set rec = db.OpenRecordset("Customers", DB_OPEN_TABLE)
rec.Index = "Cust_id
rec.Seek "=", Me![Cust_id]
add:
    With recset
    rec.addnew
    rec![Cust_id] = Me![Cust_id]
    rec![CustomerName] = Me![CustomerName]
    rec![PhoneHome] = Me![PhoneHome]
    rec![Address] = Me![Address]
    rec![Mobile] = Me![Mobile]
    rec![fax] = Me![fax]
    rec![email] = Me![email]
    rec![Debtor] = Me![Debtor]]
    rec.Update
    End With
#13

اخي الفاضل : ابو فتحي

 

ما علاقة هذا الكود او اكواد ADO بالموضوع !!!!!

 

ياسيدي الكريم طالما انك قمت بإستيراد جميع الكائنات الى قاعدة الجداول فهي الآن اصبحت قاعدة النماذج اما الجداول فهي في قاعدة SQL SERVER

 

ولم تعد بعد ذلك بحاجة الى هذه الأكواد في النماذج للإتصال بأي قاعدة بيانات . فكل ما عليك فعله الآن هو تعديل جميع مصادر السجلات

 

للنماذج والتقارير والإستعلامات بما هو موجود لديك من جداول مرتبطه فقط لاغير 

 

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

 

 

بالتوفيق

#14

اختى الاستاذه / زهرة 


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


كل عناصر النموذج غير منضم و هذا الاكواد السبيل الوحيد للتسجيل فى الجداول


post-269111-0-36286700-1391386101_thumb.

#15

up

#16

هون عليك الأمور سهلة جدا.. 

 

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

وهذا السبب هو ما جعل شفرتك لا تعمل بعد الربط بالسيرفر، والأمر الأخر أن أسماء الجداول تغيرت وأصبحت مبدوءة بـ _DBO

 

- بما أنك استعملت الاسلوب الذي أشارة به عليك الاستاذة زهرة فإن الاتصال بقاعدة البيانات سيكون كالتالي

DIM DB AS DATABASE
DIM REC AS RECORDSET

// لكوننا نستخدم الجداول التي في قاعدة البيانات الحالية
// سيكون الاتصال بقاعدة اليانات بهذه الطريقة
SET DB=CURRENDB

// وسيكون الاتصال بالجدول بهذه الطريقة
SET REC=DB.OPENRECORDSET("DBO_CUSTOMERS")

وبعدها يمكنك استخدام  باقي الشفرة التي تتعلق بإسناد حقول النموذج

rec.Index = "Cust_id
rec.Seek "=", Me![Cust_id]
add:
    
    rec.addnew
    rec![Cust_id] = Me![Cust_id]
    rec![CustomerName] = Me![CustomerName]
    rec![PhoneHome] = Me![PhoneHome]
    rec![Address] = Me![Address]
    rec![Mobile] = Me![Mobile]
    rec![fax] = Me![fax]
    rec![email] = Me![email]
    rec![Debtor] = Me![Debtor]]
    rec.Update

غير باقي النماذج بنفس الطريقة مع ملاحظة البادئة التي في أسماء الجداول

تم تعديل هذه المشاركة بواسطة القحم في 6 فبراير 2014 في 01:46

#17

اختى الاستاذ / القحم


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


شكر على الرد 


تم عمل الخطوات 


اولا : تم حذف بـ _DBO من اسماء الجداول ( يعمل بنجاج)


ثانيا : استبدال جملة SET DB=CURRENDB ب جملة Set DB = DBEngine.Workspaces(0).Databases(0) (( فى جملة الاولى يطلب تعرف متغير )


ثالثا : بظهر خطا فى ( مرفق صورة )


 

post-269111-0-18797500-1391691374_thumb.

#18

هذا الخطاء لكون  REC.INDEX تؤثر على بنية الجداول وهذا لا يمكن حدوثه مع جداول SQL المرتبطة

 

استخدم  REC.FINDFIRST بدلا من REC.SEEK راجع ملف المساعدة لمعرفة كيفية عملها

#19

اخي الفاضل : عبدالعزيز

 

بارك الله بك وجزاك الله كل خير على المشاركة

 

 

 

اخي الكريم : ابو فتحي

 

لا اعلم لماذا كل هذا التعقيد وجلب المتاعب لنفسك بالقوة

 

مع ان الأمر بسيط وسهل وفي متناول يدك بدلا من تعقيد الأمور 

 

كل ما عليك فعله هو جعل النماذج والتقارير منضمه ( اي لها مصادر سجلات ) وهي موجوده لديك بالفعل الجداول المرتبطة بقاعدة SQL SERVER

 

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

 

في الحفظ او التعديل او الحذف او البحث او اي شيء تريد عمله في القاعدة .

 

ولهذا فإن اسهل الطرق وابسطها هي جعل النماذج منضمه بحيث تربط كل نموذج بمصادر السجلات الخاصة به ( الجدول الخاص به )

 

وبهذا ستوفر على نفسك الكثير من العناء والتعب والمشاكل واليحث عن حلول لكل مشكلة تواجهك بعد ذلك .

 

 

بالتوفيق 

#20
اقتباس

 

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

 

في الحفظ او التعديل او الحذف او البحث او اي شيء تريد عمله في القاعدة .

اختي الاسناذه : زهرة   و اخى الفاضل : القحم 

 

بارك الله بكم وجزاك الله كل خير على المشاركة و التعب فى الرد 

ولكن اختى الاستاذه / زهرة اكيد تعلمه مشاكل النماذج المنضمة فى الاكسيس و انا من عشاق الاكواد فى البرمجة 

و اكيد فى حل لاتصال بـ 

sql server من خلال اكسيس بالاكواد 

 

والله الموفق وعليه قصد السبيل

مواضيع مشابهة