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

هل يمكن استخدام الاكسس مع SQL Server 7.0

مغلق
بدأه مفرج في 18 يونيو 2001 · 5 رد · 3,253 مشاهدة · في أرشيف قسم SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته وبعد انا من مستخدمي الاكسس وبدأت اتجه الى استخدام ال SQL Server 7.0 ولكن عندي برامج اريد تحويلها ويرفض استخدام الاوامر الاتية وهي كثيرة ومريحة جدا لي :

dim rec as recoredset
dim db as database
set db = currentdb
set rec = db.openrecoredset("table_name")'a

وكذلك الامر ٍSeek

ارجو التكرم بلاجابة وشكرا سلفا .

تم تعديل هذه المشاركة بواسطة walcom في 6 يونيو 2006 في 15:29

من سار على الدرب وصل

#2

بكل تاكيد تستطيع استخدام الاكسيس مع ال SQL SERVER 7 وايضا استخدام الاكسيس مع قواعد بيانات اخرى , بل تستطيع بناء كافة متطلبات البيانات واستخراجها بكل سهولة عن طريق امكانيات ال SQL SERVER مثل VIEW و STORED PROCEDURE

مع انني شخصيا افضل ان تستخدم SQL SERVER 2000 لامكاته العالية جدا وديناميكية التعامل معه .

كما انك تستطيع في ال SQL SERVER 7 عمل تحويل للجداول في الاكسيس الى SQL SERVER .

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

#3

اعتقد بان الكود السابق شاع استخدامه مع Microsoft Access 97 ، بالطبع يمكن استخدامه من النسخ الاخرى و لكن ذلك تغير قليلا

في Microsoft Access 2000 و SQL Server 7.0

او

في Microsoft Access XP و SQL Server 2000

يجب ان تقوم باستخدام احدث تركيبه لكود ADO و هي كالتالي

يقوم الكود التالي بفتح جدول للقرائة و الكتابة و بطريقة خاصة لحجز السجلات ، فكما تعلم في البرامج المبنية بواسطة SQL Server يمكن لاكثر من مستخدم فتح قاعدة البيانات في نفس الوقت ، بالطبع هذا ممكن في اكسس العادي ، ولكن في ال SQL Server هناك امكانية اكبر في التحكم بطريقة حجز السجلات و طريقة تحديثها

Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset

Set cn = CurrentProject.Connection
rs.Open "[Table Name]", cnn, adOpenDynamic, adLockOptimistic
....
الكود
....
rs.close

طريقة الحجز تحدد عن طريق

adLockOptimistic و adOpenDynamic

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

يمكنك ايضا تمرير عبارات SQL صغيرة و بسيطة ، او مركبة ،مثل الكود التالي (Visual Basic مركب مع SQL)

هذا كود من احد البرامج التي كتبتها

Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset

Set cn = CurrentProject.Connection

Query = "select * from [PY Employee] where ([Kh and A] = 0) and (([Employment Date]" _
        & " <= convert(datetime ,'" & Str(DateAdd("M", 1, iMonth)) & "',103))" _
        & " and ( ([Resignation date] >= convert(datetime ,'" _
        & Trim("1") & Trim("/") & Trim(Str(Month(iMonth))) & Trim("/") & Trim(Str(Year(iMonth))) _
        & "',103))" _
        & "or ([Resignation date] is null)))"
    rs.Open Query, cn, adOpenDynamic, adLockOptimistic

.....

بالطبع يمكن تخذين الكود في Stored Procedure و استدعائها بنفس الطريقة التي تفتح بها الجدول

و يمكن كتابة كود SQL صافي بالطريقة التالية

Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset

Query = "DECLARE "_
	& "@Product_ID numeric, " _
	& "@Quantity numeric(18,4), " _
	& "@Total_Quantity numeric(18,4), " _
	&"@Unit_Price money, " _
	& "@Total_Price money, " _
	& "@Sign nvarchar(1), " _
	& "@Average_Unit_Price money " _
& "DECLARE cr CURSOR FOR " _
	& "SELECT " _
		& "[Product id]" _
	& "FROM 	[INV Products]" _
	& "WHERE 	[Posted] = 1" _
& "OPEN cr" _
& "FETCH NEXT FROM cr INTO @Product_id" _
& "WHILE @@FETCH_STATUS = 0 " _
& "BEGIN" _
	& "DECLARE crsub CURSOR FOR " _
	& "SELECT " _
		& "[Quantity]," _
		& "[Unit Price]," _
		& "[Sign]" _
	& "FROM 	[INV Transactions]" _
	& "WHERE 	([Posted] = 1 and [Product ID] = @Product_ID)" _
	& "Order By [Date] Desc" _
	& "OPEN crsub" _
	& "FETCH NEXT FROM crsub INTO @Quantity, @Unit_Price, @Sign" _
	& "SET @Total_Price = 0" _
	& "SET @Total_Quantity = 0" _
	& "WHILE @@FETCH_STATUS = 0 " _
	& "BEGIN" _
		& "if (@Sign = '+')" _
		& "BEGIN " _
			& "SET @Total_Price = @Total_Price + (@Quantity * @Unit_Price)" _
			& "SET @Total_Quantity = @Total_Quantity + @Quantity" _
		& "END" _
		& "if (@Sign = '-')" _
		& "BEGIN " _
			& "SET @Total_Price = @Total_Price - (@Quantity * @Unit_Price)" _
			& "SET @Total_Quantity = @Total_Quantity - @Quantity" _
		& "END" _
		& "IF ( @Total_Quantity = 0 )" _
			& "BEGIN" _
			& "SET @Average_Unit_Price = 0" _
			& "END" _
		& "ELSE" _
			& "BEGIN" _
			& "SET @Average_Unit_Price = @Total_Price / @Total_Quantity" _
			& "END" _
		& "UPDATE [INV Products] SET [Total Price] = @Total_Price, [Average Unit Price] = @Average_Unit_Price" _
		& "WHERE 	([Posted] = 1 and [Product ID] = @Product_ID)" _
		& "FETCH NEXT FROM crsub INTO @Quantity, @Unit_Price, @Sign" _
	& "END" _
	& "CLOSE crsub" _
	& "DEALLOCATE crsub" _
	& "FETCH NEXT FROM cr INTO @Product_id " _
& "END" _
& "CLOSE cr" _
& "DEALLOCATE cr" 


rs.Open Query, cn, adOpenDynamic, adLockOptimistic

.....

بالنسبة للامر seek فهو للاسف لا يعمل مع ال SQL Server و يفضل اعادة بناء قاعدة البيانات او البرنامج بطريقة تجعلك تتخلى عنه

الحكمة في ذلك بان الامر seek سيجعل ال Access نفسه يحرك كل البيانات عبر الشبكة من ال SQL Server الى Access نفسه لعملية البحث و بذلك ينتهي مفهوم تخفيف حركة البيانات و زيادة السرعة الخاصة بالبرامج

و لكن من جهة اخرى يمكنك استخدام خصائص للنماذج مثل Server Filter و غيرها

#4

أخي علاء البيطار و خضرترزي اشكركم لاهتمامكم ووفقكم الله ولكن مشكلتي ان عندي قاعدة بيانات كبير جدا وهي 27 ميقا بدون البيانات وهي عباره عن 300 شاشة واكواد عدة واستخدم الاوامر اللاتية :

dim rec as recoredset

dim db as database

set db = currentdb

set rec = db.openrecoredset("table_name")'a

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

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

من سار على الدرب وصل

#5

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

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

#6

اخي خضر ترزي اشكرك شكراً جزيلا وهذا كل ماريدة رحم الله والديك ومن يعز عليك

من سار على الدرب وصل

هذا الموضوع مغلق.

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