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

كود Dbs يحتاج لحل

بدأه hasan@ في 9 يوليو 2008 · 18 رد · 1,164 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لقد استفسار وهو اني كنت اعمل في الأكسس mdb ثم لكبر قواعد البيانات قمت بتحويل البيانات الى السرفر عبر قاعدة البيانات sqlserver وقمت بالإتصال مع قاعدة البيانات السيرفر عبر واجهات الأكسس كمشروع اكسس adp ولكن واجهتني مشكلة حيث ان الوحدة النمطية الخاصة بإلغاء الشفت في الأكسس mdb كانت تعمل وبشكل صحيح ولكن عندما قمت بتحويل نفس الوحدة النمطية الخاصة بإلغاء الشفت الى مشروع اكسس adp يعني رسالة خطأ في dbs .

ارجو التوضيح والسبب ما المشكلة وما الفرق بين الإثنين لنفس الكود في mdb و adp .

وفقكم الله محتاج ردكم العاجل .

#2

أخي الكريم

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

#3

أستاذي العزيز مصلح يحفظه الله

نعم لقد فعلت هذا في بادئ الأمر ولكن عانيت من وجود بطئ شديد في آلية البحث وكذلك الإضافة حيث أن معدل البيانات كبير جداً جداً ويصل إلى مئات الألوف من السجلات . الأمر الذي أضرني لبناء المشروع من جديد على adp .

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

#4

والله يا اخوان اني أحترت عن كيفية العلاج ارجو مساعدتي وفقكم الله .

#5

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

#6

اخي الفاضل حسان

من خلال خبرتي في التعامل مع قواعد البيانات وخاصة التي بصيغة MDB او مشاريع الأكسيس والتي بصيغة ADP فلا اضن هناك فرق في استخدام الكود في الـ VBA لأن كلا الصيغتين تقبلان بذك بدون اخطاء

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

عموما هذه قاعدة بيانات Northwind.mdb التي تأتي مع برنامج الأكسيس وكذلك المشروع NorthwindCS.adp ايضا الذي يأتي مع برنامج الأكسيس وقد وضعت بهما اكواد الغاء الشفت في الوحدات النمطية وكلا الملفين يعملان بشكل سليم بدون اي مشكلة فعند الضغط على مفتاح الشفت لن يعمل مع كلا القاعدتين .

Shift.rar

#7

اخي حسن

مررت بنفس هذه المشكله و كان حلي لها كالاتي

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

http://support.microsoft.com/kb/168336/en-us

و تم حل الاشكال الذي لدي

انظر الى الرابط ربما يكون فيه حل لمشكلتك

يا عيالي كلكم .... افطنوا في حالكم

التنازع ذلكم .... والتصافي منفعه

المحتاج امشوا بحقه .... لو بدت منه المشقه

وانكثر بالقلب دقه .... طوبيتك واشعله

#8

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

أولاً أتقدم بالشكر الجزيز للأستاذة ام عهود على تفضلك بالمساعدة وإفادتي بأن أكواد الـ vba لا تختلف في الإمتداد المختلف بالأكسس وهذه المعلومة كنت بحاجة لها وكذلك عمل مشروع النظام في الأكسس على الكود الخاص بإلغاء الشفت وتوجيهي بوجود خطأ أثناء النقل سوف أعمل على ذلك إنشاء ومن ثم سوف أعرضه ضمن المشاركة . وأسأل الله تعالى أن يجعل ذلك في موازين حسناتك .

ثانياً أستاذيhuman73

أتقدم بالشكر الجزيل لك على مرورك ومحاولة مساعدتي ولاسيما بمرورك بنفس المشكلة وإبداء رأيك بموقع المشكلة فأسأل الله تعالى أن يجعل في ذلك في موازين حسناتك . كما أود توجيهي عن الكود الصحيح في الربط نظراً لأن الرابط لم يعمل معي ولا أدري أين المشكلة كذلك وحبذا لو أرفق لكي كود الإتصال الصحيح ليتم من خلاله المقارنة بوجود العلة مع العلم أني لم أستخدم كود اتصال ولكني أٍتخدم الإتصال العادي من قائمة ملف ثم إتصال وعبر dns لقاعدة البيانات sqlserver هذا هو ما أستخدمه . منتظر ردكم علي أفادكم الله .

#9

سيدي الفاضل حسن هذا هو الكود كما بالموقع بالضبط نقلته لك لتقوم بعملية المقارنه و اسئل الله لك التوفيق و حل المشكله

 Option Explicit

   Private Sub cmdOpen_Click()
	   Dim Conn1 As New adodb.Connection
	   Dim Cmd1 As New adodb.Command
	   Dim Errs1 As Errors
	   Dim Rs1 As New adodb.Recordset

	   Dim i As Integer
	   Dim AccessConnect As String

	   ' Error Handling Variables
	   Dim errLoop As Error
	   Dim strTmp As String

	   AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
					 "Dbq=nwind.mdb;" & _
					 "DefaultDir=C:\program files\devstudio\vb;" & _
					 "Uid=Admin;Pwd=;"

	   '---------------------------
	   ' Connection Object Methods
	   '---------------------------

	   On Error GoTo AdoError  ' Full Error Handling which traverses
							   ' Connection object

	   ' Connection Open method #1:  Open via ConnectionString Property
	   Conn1.ConnectionString = AccessConnect
	   Conn1.Open
	   Conn1.Close
	   Conn1.ConnectionString = ""

	   ' Connection Open method #2:  Open("[ODBC Connect String]","","")
	   Conn1.Open AccessConnect
	   Conn1.Close

	   ' Connection Open method #3:  Open("DSN","Uid","Pwd")
	   Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
				  "DBQ=nwind.mdb;" & _
				  "DefaultDir=C:\program files\devstudio\vb;" & _
				  "Uid=Admin;Pwd=;"
	   Conn1.Close


	   '--------------------------
	   ' Recordset Object Methods
	   '--------------------------

	   ' Don't assume that we have a connection object.
	   On Error GoTo AdoErrorLite

	   ' Recordset Open Method #1:  Open via Connection.Execute(...)
	   Conn1.Open AccessConnect
	   Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
	   Rs1.Close
	   Conn1.Close

	   ' Recordset Open Method #2:  Open via Command.Execute(...)
	   Conn1.ConnectionString = AccessConnect
	   Conn1.Open
	   Cmd1.ActiveConnection = Conn1
	   Cmd1.CommandText = "SELECT * FROM Employees"
	   Set Rs1 = Cmd1.Execute
	   Rs1.Close
	   Conn1.Close
	   Conn1.ConnectionString = ""

	   ' Recordset Open Method #3:  Open via Command.Execute(...)
	   Conn1.ConnectionString = AccessConnect
	   Conn1.Open
	   Cmd1.ActiveConnection = Conn1
	   Cmd1.CommandText = "SELECT * FROM Employees"
	   Rs1.Open Cmd1
	   Rs1.Close
	   Conn1.Close
	   Conn1.ConnectionString = ""

	   ' Recordset Open Method #4:  Open w/o Connection & w/Connect String
	   Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
	   Rs1.Close

   Done:
	   Set Rs1 = Nothing

	   Set Cmd1 = Nothing
	   Set Conn1 = Nothing

	   Exit Sub


   AdoError:
	   i = 1
	   On Error Resume Next

	   ' Enumerate Errors collection and display properties of
	   ' each Error object (if Errors Collection is filled out)
	   Set Errs1 = Conn1.Errors
	   For Each errLoop In Errs1
		With errLoop
		   strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
		   strTmp = strTmp & vbCrLf & "   ADO Error   # " & .Number
		   strTmp = strTmp & vbCrLf & "   Description   " & .Description
		   strTmp = strTmp & vbCrLf & "   Source		" & .Source
		   i = i + 1
		End With
	   Next

   AdoErrorLite:
	   ' Get VB Error Object's information
	   strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
	   strTmp = strTmp & vbCrLf & "   Generated by " & Err.Source
	   strTmp = strTmp & vbCrLf & "   Description  " & Err.Description

	   MsgBox strTmp

	   ' Clean up gracefully without risking infinite loop in error handler
	   On Error GoTo 0
	   GoTo Done
   End Sub

يا عيالي كلكم .... افطنوا في حالكم

التنازع ذلكم .... والتصافي منفعه

المحتاج امشوا بحقه .... لو بدت منه المشقه

وانكثر بالقلب دقه .... طوبيتك واشعله

#10

أستاذي العزيز human73

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

#11

الأستاذة زهرة

أستاذي العزيز human73

الحقيقة الموضوع مو راضي يضبط معايا وما ادري ايه السبب وربما أني لم اتمكن من التعديل على الكود بشكل صحيح أم ماذا .

أرجو اذا امكن التعديل على الكود أخي لكي يتناسب مع الربط معي على النحو التالي :

إٍسم الملقم الذي لدي بإسم sqlserver وهو على السيرفر الرئيسي وليس على نفس الجهاز local .

إسم الـ dsn هو Library

إسم قاعدة البيانات هو Library_WKG1

المشروع من نوع adp

إخواني وأساتذتي أرجو مساعدتي وفقكم الله ومنتظر إفادتي .

#12

الأستاذة زهرة العطاء

الأستاذ human73

مع التحية منتظر فزعتكم معايا تكفى يا اخوان

#13

هذا هو السترغ مع افتراضي انك تستخدم اس كيو ال 2000 و انك متصل فيه ستاندر وليس ترست

"Provider=SQLOLEDB;Data Source=sqlserver;Initial Catalog= Library_WKG1;UserId=Your_Username;Password=Your_Password;" 

or

Set db = OpenDatabase("", dbDriverNoPrompt, False, "ODBC;DSN=" & Library)

تم تعديل هذه المشاركة بواسطة human73 في 23 يوليو 2008 في 23:04

يا عيالي كلكم .... افطنوا في حالكم

التنازع ذلكم .... والتصافي منفعه

المحتاج امشوا بحقه .... لو بدت منه المشقه

وانكثر بالقلب دقه .... طوبيتك واشعله

#14

أستاذي العزيز human73

أولاً أعتذرك منك على الإطالة في الرد نظراً لأن الجهاز عندي صابه جني شكلة وصار يفتح بعض الصفحات والأخرى لا تفتح ومنها هذه الصفحة . فأعتذر مرة اخرى .

ثانياً : أعتذر لأني قد أثقلت عليك ولكن من بدأ المكارم وانتم أهل المكرمات .

ثالثاُ : أود أن أخبرك (وأرجو عدم اطلاع احد على هذا السر) بأني غير متمكن في نظام الأكواد .

رابعاً : كما ذكرت لكم سابقاً بأني أستخدم الإتصال الإعتيادي وهو عن طريق قائمة ملف ثم اتصال ومن ثم أضع عن طريق odbc إسم السيرفر (sqlserver) ثم إسم قاعدة البيانات library_wqg1 وهذا هو في الـ dsn المسمى library علماً بأن أستخدم sqlserver2000 استاندر .

خامساً كنت اريد لو قمت بالتفضل علي وأوضحت طريقة عمل الإتصال عبر الكود وهل أقوم بوضعه في وحدة نمطية أم ماذا لأني مثلما ذكرت لكم في ثالثاُ ولو كان مثالاً تطبيقياً أكون لكم من الشاكرين .

منتظر ردكم علي سائلاً الله تعالى ان يجعل ذلك في موازين حسناتكم .

#15

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

Private Sub Form_Open(Cancel As Integer)
   Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset
   Dim strConnection As String

   strConnection = "ODBC;DSN=library;UID=sa;PWD=;DATABASE=library_wqg1"

   Set cn = New ADODB.Connection

   With cn
	  .Provider = "MSDASQL"
	  .Properties("Data Source").Value = strConnection
	  .Open
   End With


   Set rs = New ADODB.Recordset
   With rs
	  Set .ActiveConnection = cn
	  .Source = "SELECT * FROM Customers"
	  .LockType = adLockOptimistic
	  .CursorType = adOpenKeyset
	  .CursorLocation = adUseClient
	  .Open 
   End With

   'Set the form's Recordset property to the ADO recordset
   Set Me.Recordset = rs
   Set rs = Nothing
   Set cn = Nothing
End Sub

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

والله الموفق

يا عيالي كلكم .... افطنوا في حالكم

التنازع ذلكم .... والتصافي منفعه

المحتاج امشوا بحقه .... لو بدت منه المشقه

وانكثر بالقلب دقه .... طوبيتك واشعله

#16

أستاذي العزيز human73

جزاك الله خيراً على سرعة الإستجابة وإبداء الرأي ومساعدتي في الكود والحقيقة لا اعلم كيف أكافئك ولكن لا أملك سوى الدعاء لكم .

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

أرجو مساعدتي وفقك الله تعالى .

#17

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

اذا افترضنا عندك حقل اسمه

فلان فلابد ان تعرف هذا الفلان على انه حقل في الوحده المطيه حتى يتعامل معه الفورم و الريبورت على هذا الاساس

:)

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

و الله اعلم

يا عيالي كلكم .... افطنوا في حالكم

التنازع ذلكم .... والتصافي منفعه

المحتاج امشوا بحقه .... لو بدت منه المشقه

وانكثر بالقلب دقه .... طوبيتك واشعله

#18

أستاذي العزيز human73

أشكر على تفضلك بالرد ومحاولة المساعدة وفقك الله . كما أود أن أستوضح ما هي الآلية المستخدمة في مثال northwind حيث لاحظت أن يستدعي جميع الجداول والإستعلامات عبر وحدة نمطية ولم يتم الإستدعاء عبر النماذج كلاً حدا .

منتظر ردكم علي وفقكم الله . وأعلم أنه لا يوجد صعب لديكم إن شاء الله .

#19
اقتباس
فعلك تعريف جميع حقولك و بوحده نمطيه عامه لكي يرثها جميع النماذج

مثال ريح الشمال من مايكروسوفت

northwind sql

http://support.microsoft.com/kb/227053/en-us

يا عيالي كلكم .... افطنوا في حالكم

التنازع ذلكم .... والتصافي منفعه

المحتاج امشوا بحقه .... لو بدت منه المشقه

وانكثر بالقلب دقه .... طوبيتك واشعله

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