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

MSDE و TransactSQL

مغلق
بدأه أحمد الحربي في 20 مايو 2002 · 2 رد · 2,744 مشاهدة · في أرشيف قسم SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا الآن اتدرب على MSDE النسخة المصغرة من سيكول سيرفر ولدي بعض الأسئلة :

= هل تعتمد في الاستعلامات على SQL العادية أم أنها مع TRANSECTSQL فقط

= هل توجد كتب في لغة TransactSQL

= أريد مثالاً لقاعدة بيانات بالعربي استخدم فيها MSDE

= شرحاً بسيطاً للإجراء المخزنة ... والمشغلات .. والمخططات

ولكم التحية وخالص التقدير

محبكم

أحمد الحربي

#2

سوف اجاول على بعض الاسئلة فقط، ما يمكنني اجابتها الان

بالنسبة ل SQL الذي يمكن استخدامه مع MSDE فهو SQL و SQL 92 و Transact SQL ، بكلمات اخرى كل الكود الذي يمكن استخدامه في SQL Server باستثنائات بسيطة تعلق بربط اجهزة مركزية معا و DTC و بعض الامور التي تتطلب النسخة الكاملة من SQL Server.

كل الامور لاباقية لا ارى فيها اية مشكلة حيث ان SQL سوف يعمل طبيعيا.

Transact SQL مشروحة بالتفصيل في كتيبات SQL Server و هناك ملف مجاني كبير يمكن انزاله من انترنت به الشرح ايضا اظن في مكان ما في الوصلة التالية

http://www.microsoft.com/sql

و اذا لم ترغب بانزاله و حبيت ان تتفرج عليه من انترنت فسوف تجده في الوصلة التالية

http://msdn.microsoft.com/library

بالنسبة لمثال او كود مثالي من Transact SQL فهذا كود من برنامج لم يكتمل قمت ببنائه بهدف التجارب فقط

/*********************************************
تسجيل الدخول الى المنتديات
عملية تسجيل الدخول الى المنتديات هي عملية فحص اسم الدخول و كلمة المرور و اصدار رقم عشوائي مؤقت في حال صحتهما
و تسجيل هذه العملية في ملف تتبع تسجيل الدخول مع رقم عنوان المستخدم في انترنت
تسجيل الدخول ممكن للاشتراكات الفعالة فقط
الرقم العشوائي لاحقا هو الرقم الذي يرسله المستخدم في حالة طلب اية بيانات من النظام
الرقم العشوائي يضيع في غضون 900 ثانية ان لم تتصفح الموقع
الرقم العشوائي بيضيع لحظة تسجيل الدخول مرة اخرى ، اي ان نسيت تسجيل الخروج في جهاز ما يمكنك تسجيل الدخول مرة اخرى
تسجيل الدخول مرة اخرى يصدر رقم عشوائي جديد و بذلك لا يتعرف النظام على الرقم القديم الذي نسيت ان تسجل الخروج منه
الرقم العشوائي قد يعيش لمدة طويلة حسب اعدادات المستخدم
*********************************************/
ALTER PROCEDURE [LX Security Login] 

/* متغيرات يجب تزويدها */
@User_Name nvarchar(50),  -- اسم الدخول
@Password nvarchar(50),  -- كلمة المرور
@IP_Address nvarchar(15),  -- عنوان المستخدم في انترنت
@User_Host_Name nvarchar(200),  -- اسم المجال الخاص بالزائر
@User_Agent nvarchar(100),  -- ال HTML Header الخاص بالمتصفح
@Browser nvarchar(255),  -- نوع المتصفح
@Beta bit, --  هل المتصفح نسخة تجريبية ؟
@Major_Version numeric,  -- رقم الاصدار الرئيسي للمتصفح
@Minor_Version nvarchar(10),  -- رقم الاصدار الفرعي للمتصفح
@Version nvarchar(10),  -- رقم النسخة كامل للمتصفح
@MS_Dom_Version nvarchar(10),  --  رقم اصدار MSHTML الذي يدعمه المتصفح، يستخدم في حالة بناء متصفح خاص بك و اخذت كائن IE فهذا هو رقم الكائن
@W3C_Dom_Version nvarchar(10),  -- رقم نسخة XML حسب مواصفات W3C التي يدعمها المتصفح
@Type nvarchar(50),  -- اسم المتصفح و رقم النسخة الكامل له
@Platform nvarchar(50),  -- اسم منصة تشغيل التطبيقات المستخدمة ، اسم نظام التشغيل العام تقريبا
@Win16 bit,  -- هل الاتصال يتم من جهاز يعمل عبر تقنية 16 بت ؟
@Win32 bit,  -- هل الاتصال يتم من جهاز يعمل عبر تقنية 32 بت ؟
@CLR_Version nvarchar(10),  -- رقم النسخة الخاصة بتكنولوجيا .نت اذا وجدت
@VBScript bit,  --  هل يدعم تشغيل كود فيجوال بيزك بين كود ال HTML ؟
@Java_Script bit,  -- هل يدعم المتصفح تشغيل كود جافا بين كود ال HTML ؟
@ECMA_Script_Version nvarchar(10),  -- رقم نسخة ال ECMA Script
@Java_Applets bit,  -- هل يدعم المتصفح تشغيل تطبيقات جافا ؟
@Cookies bit,  -- هل يدعم المتصفح استقبال حزمة صغيرة من البيانات لتخزن بداخله لامور المتابعة
@ActiveX_Controls bit, -- هل يدعم المتصفح تركيب و تشغيل برمجيات من الجهاز المركزي ؟
@AOL bit,  -- هل المتصل يستخدم متصفح America Online 
@Background_Sounds bit,  -- هل يدعم المتصفح تشغيل اصوات خلفية مثل نغمات و غيرها ؟
@CDF bit,  -- هل يدعم تقنية CDF اختصار ل Channel Difinition Format for Webcasting استخدمت هذه التقنية لارسال التعديلات مباشرة الى المستخدم سابقا
@Crawler bit,  -- هل يدعم تقنية Crawler و التي تبين هل المتصفح  هو محرك للبحث
@Frames bit,  -- هل يدعم ال Frames و هي تقسيم الصفحة الى اجزاء مختلفة تحمل كل واحدة بداخلها صفحة اخرى ؟
@Tables bit,  -- هل يدعم المتصفح عرض الجداول ؟
@Is_Secure_Connection bit,  -- هل الاتصال بين الجهاز المركزي و المتصفح مشفر ؟
@User_Languages numeric,  --  عدد اللغات التي يدعمها جهاز الزائر
@Language_Desciption nvarchar(255),  --  تفاصيل عن كل اللغات التي يدعمها مفصولة بفواصل منقوطة
@Login_From nvarchar(100),   -- الصفحة التي اتى منها لعمل تسجيل الدخول
@Public_Terminal bit  -- هل تم تسجيل الدخول من موقع عام على انترنت ؟

AS
/*
 نظام متابعة الاخطاء في قاعدة البيانات
 النظام سوف يتابع جميع التعديلات و في حالة حدوث خطاء سوف يحفظ رقمه و يلغي التنفيذ
 سوف يجفظ الخطاء في جدول في قاعدة البيانات و سوف تلغى كل العمليات باثر رجعي الى اول الكود
*/ 
DECLARE 
   @ERR NUMERIC,  -- تسجيل رقم الخطاء
   @LINE_ERROR NVARCHAR(100)  -- تسجيل السطر الذي حدث به الخطاء
BEGIN TRANSACTION  -- بداية التتبع

DECLARE @User_ID numeric  -- رقم المستخدم
DECLARE @GUID uniqueidentifier  -- الرقم العشوائي الجديد 
-- تعريف مؤشر لحلقة تكرارية
-- المؤشر يطلب المستخدم الذي تطابق كلمة السر الخاصة به و اسم الدخول البيانات المدخلة كما انه يجب ان يكون فعال
DECLARE cUsers CURSOR FOR 
   SELECT [KEY] FROM Users where [User Name] = @User_Name and [Password] = @Password and [Is Active] = 1

-- احفظ الخطاء لو وجد
SET @ERR = @@error
IF @ERR <> 0 
BEGIN
   SET @LINE_ERROR = 'LX Security Login: DECLARE cUsers CURSOR'
   GOTO Error_Rollback
END

-- فتح المؤشر
OPEN cUsers

-- احفظ الخطاء لو وجد
SET @ERR = @@error
IF @ERR <> 0 
BEGIN
   SET @LINE_ERROR = 'LX Security Login: OPEN cUsers'
   GOTO Error_Rollback
END

-- اخذ رقم المشترك اذا موجود
FETCH NEXT FROM cUsers INTO @User_ID 

-- احفظ الخطاء لو وجد
SET @ERR = @@error
IF @ERR <> 0 
BEGIN
   SET @LINE_ERROR = 'LX Security Login: FETCH NEXT FROM cUsers'
   GOTO Error_Rollback
END

-- اغلاق المؤشر
CLOSE cUsers

-- احفظ الخطاء لو وجد
SET @ERR = @@error
IF @ERR <> 0 
BEGIN
   SET @LINE_ERROR = 'LX Security Login: CLOSE cUsers'
   GOTO Error_Rollback
END

-- حذف المؤشر من الذاكرة
DEALLOCATE cUsers

-- احفظ الخطاء لو وجد
SET @ERR = @@error
IF @ERR <> 0 
BEGIN
   SET @LINE_ERROR = 'LX Security Login: DEALLOCATE cUsers'
   GOTO Error_Rollback
END

/* في حال رجوع رقم للمستخدم فهذا يعني انه موجود في قاعدة البيانات */
if (@User_ID IS NOT NULL)
   -- نجاح تسجيل الدخول
   Begin

	-- تحديث جدول تسجيل الدخول بمتغيرات عشوائية جديدة
	Update Users SET 
	@GUID = NewID() ,
	[GUID] = @GUID, 
	[Last Synchronize]= GetDate(),
	[Last IP Address] = @IP_Address,
	[is Logged In] = 1
	Where [KEY] = @User_ID

	-- احفظ الخطاء لو وجد
	SET @ERR = @@error
	IF @ERR <> 0 
	BEGIN
    SET @LINE_ERROR = 'LX Security Login: Update Users SET'
    GOTO Error_Rollback
	END

	-- اضافة تسجيل الدخول الى ملف التتبع
	Insert into [Users Log](
  [User Name], 
  [Password], 
  [IP Address],
  [User ID] ,
  [GUID], 
  [User Host Name],
  [User Agent],
  [Browser],
  [Beta],
  [Major Version],
  [Minor Version],
  [Version],
  [MS Dom Version],
  [W3C Dom Version],
  [Type],
  [Platform],
  [Win16],
  [Win32],
  [CLR Version],
  [VBScript],
  [Java Script],
  [ECMA Script Version],
  [Java Applets],
  [Cookies],
  [ActiveX Controls],
  [AOL],
  [Background Sounds],
  [CDF],
  [Crawler],
  [Frames],
  [Tables],
  [Is Secure Connection],
  [User Languages],
  [Language Desciption],
  [Login From],
  [Public Terminal],
  [is Login])
	Values (@User_Name, 
  @Password, 
  @IP_Address, 
  @User_ID,
  @GUID, 
  @User_Host_Name,
  @User_Agent,
  @Browser,
  @Beta,
  @Major_Version,
  @Minor_Version,
  @Version,
  @MS_Dom_Version,
  @W3C_Dom_Version,
  @Type,
  @Platform,
  @Win16,
  @Win32,
  @CLR_Version,
  @VBScript,
  @Java_Script,
  @ECMA_Script_Version,
  @Java_Applets,
  @Cookies,
  @ActiveX_Controls,
  @AOL,
  @Background_Sounds,
  @CDF,
  @Crawler,
  @Frames,
  @Tables,
  @Is_Secure_Connection,
  @User_Languages,
  @Language_Desciption,
  @Login_From,
  @Public_Terminal,
  1)

	-- احفظ الخطاء لو وجد
	SET @ERR = @@error
	IF @ERR <> 0 
	BEGIN
    SET @LINE_ERROR = 'LX Security Login: Insert into [Users Log] : 1'
    GOTO Error_Rollback
	END

	-- ارجاع الرقم العشوائي المؤقت
	SELECT @GUID as GUID
   End
Else
   Begin
	-- فشل تسجيل الدخول
	Insert into [Users Log](
  [User Name], 
  [Password], 
  [IP Address],
  [User ID] ,
  [GUID], 
  [User Host Name],
  [User Agent],
  [Browser],
  [Beta],
  [Major Version],
  [Minor Version],
  [Version],
  [MS Dom Version],
  [W3C Dom Version],
  [Type],
  [Platform],
  [Win16],
  [Win32],
  [CLR Version],
  [VBScript],
  [Java Script],
  [ECMA Script Version],
  [Java Applets],
  [Cookies],
  [ActiveX Controls],
  [AOL],
  [Background Sounds],
  [CDF],
  [Crawler],
  [Frames],
  [Tables],
  [Is Secure Connection],
  [User Languages],
  [Language Desciption],
  [Login From],
  [Public Terminal],
  [is Login Error])
	Values (@User_Name, 
  @Password, 
  @IP_Address, 
  @User_ID,
  @GUID, 
  @User_Host_Name,
  @User_Agent,
  @Browser,
  @Beta,
  @Major_Version,
  @Minor_Version,
  @Version,
  @MS_Dom_Version,
  @W3C_Dom_Version,
  @Type,
  @Platform,
  @Win16,
  @Win32,
  @CLR_Version,
  @VBScript,
  @Java_Script,
  @ECMA_Script_Version,
  @Java_Applets,
  @Cookies,
  @ActiveX_Controls,
  @AOL,
  @Background_Sounds,
  @CDF,
  @Crawler,
  @Frames,
  @Tables,
  @Is_Secure_Connection,
  @User_Languages,
  @Language_Desciption,
  @Login_From,
  @Public_Terminal,
  1)

	-- احفظ الخطاء لو وجد
	SET @ERR = @@error
	IF @ERR <> 0 
	BEGIN
    SET @LINE_ERROR = 'LX Security Login: Insert into [Users Log] : 2'
    GOTO Error_Rollback
	END

	-- ارجاع رقم عشوائي فارغ
	SELECT null as GUID
   End

/*
 الجزء الخاص بتحليل الاخطاء و تسجيلها في قاعدة البيانات لو وجدت
*/
Error_Rollback:
IF @ERR <> 0 
BEGIN
   -- رفض جميع التعديلات و الاضافات التي تمت على قاعدة البيانات في حالة وجود خطاء
   rollback transaction
   -- حفظ الخطاء في قاعدة البيانات
   Insert into [Error Log]([Error Number], [Severity Level], [Description], [LINE NUMBER])
   Select  [error], [severity], [description], @LINE_ERROR AS LE From master.dbo.sysmessages Where error = @err
END
-- حفظ الحركات كلها في حال نجاحها
ELSE
BEGIN
   COMMIT TRANSACTION
END

الكود السابق خصص للاستخدام من خلال صفحات ASP.NET و يعتمد على اكواد اخرى لذلك ربما الشرح اوله لا يشمل الكود بالكامل

الان الاجرائات المخزنة هي عبارة عن برامج صغيرة تنفذ و ترجع قيم او لا ترجع قيم و تنفذ في بداخل ال MSDE نفسه، اي اذا اتصلت به من Access من جهاز ثاني و شغلت اجراء مخزن فالتنفيذ سوف يتم في الجهاز الذي به ال MSDE او ال SQL Server

و يمكن للاجراء المخزن ان يرجع سجلات مثل الاستعلام ايضا و يمكن برمجته ليرسل قيم استعلامات كثيرة معا ، يمكن القيام من داخله بادارة MSDE بالكامل، اي ان هناك امر Transact SQL لعمل النسخ الاحتياطي لكل قاعدة البيانات، او صناعة مستخدم او .... (كل ما يمكن ان يعمله برنامج ادارة ممكن عمله ب Transact SQL و هناك اوامر له حتى تغير الخصائص الداخلية ل SQL Server).

سوف تجد عدة جداول مخفية في قاعدة البيانات، بعضها يحتوي على قيم لو غيرتها سوف تتغير خصائص ال MSDE ، هذه احدى الحيل التي تستخدم لتغير خصائصه :)

و هناك قاعدة بيانات master دير بالك عليها كثير لانها تحتوي على بيانات قواعد البيانات الاخرى و التغير في جداولها يضيع قواعد بيانات كاملة :D

Access XP عند دمجه مع MSDE يخزن كل الاجرائات المخزنة و الاستعلامات و ال Funtcion في نفس المكان، ما عدا ال Triggers تخزن في مكان ثاني، و لكنها على العموم جميعها تخزن في اماكنها الصحيحة في SQL Server او MSDE

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

ال Triggers و سوف تجدها في الجداول هي اوامر SQL مصغرة تنفذ لحظة اضافة او ازالة بيانات من الجداول

العلاقات هي المخططات ايضا، و هي بناء علاقاتبين الجداول ، تختلف كثيرا بين MSDE و MSDE 2000 في الثاني هي اقوى نظرا لانها تسمح بحذف تلقائي لسجلات مترابطة، لم يكن ذلك موجودا في MSDE القديم، اي اذا مسحت موظف من سجل الموظفين النظام سوف يمسح كل سجلاته في سجل الاجازات ايضا، جميل اليس كذلك;) ، فقط ان لم تستخدمها في برامج المحاسبة لان هناك راح تحدث مصايب

يفترض ان تجد في Access ملف اسمه بين الامثلة Northwind SQL بمجرد تشغيلها سوف تبني لك قاعدة بيانات في Access و في SQL Server معا مليئة بالامثلة المختلفة.

هذا كتاب ايضا قديم عن SQL Server 6.5 و هو يتحدث عن Transact SQL بالطبع الكثير من المفاهيم اختلفت ، بعض المفاهيم تغيرت بالكامل ، و لكن امور SQL الاساسية لا تزال نفسها

http://freebooks.by.ru/view/TransactSQLin2...1day/ewtoc.html

و هناك امور متقدمة لم تتغير ايضا

تم تعديل هذه المشاركة بواسطة walcom في 10 مارس 2005 في 12:29

#3

أشكرك أيها الاستاذ الكريم .. وبورك فيك

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

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