• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

imadouzoun

الخبراء المعتمدون
  • عدد المشاركات

    938
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل شيء نشر بواسطة imadouzoun

  1. Backup & restore SQl Server

    السلام عليكم و رحمة الله جرب خدمة نسخ قاعدة البيانات من (مصدر إلى هدف) أنظر الى الصورة الموفقة   تحياتي
  2. Backup & restore SQl Server

    السلام عليكم و رحمة الله أخي الكريم من خصائص قاعدة البيانات .. اختر Options كما توضح الصورة أدناه ثم غير توافقية قاعدة بياناتك إلى النسخة التي تحب, ثم قم بعمل Backup: Backup Database MyDB to disk='C:\Folder1\TestDB.bak'   و قم باستعادتها إلى النسخة المتوافقة بعبارة Restore Database أتمنى أن أكون قد أفدتك. تحياتي
  3. السلام عليكم أخي الكريم يمكنك التغلب على هذه المشكلة عن طريق تنفيذ المستخدم الثاني للعبارة التالية قبل استدعاء الـ Select Query:   Set Transaction Isolation Level Read Uncommitted Select * from X و هنا سيقرأ المستخدم الثاني ما يسمى بالـ Dirty Data و المقصود أن ما سيقرأه المستخدم الثاني قد يتم التراجع عنه عن طريق الـ Rollback التي ربما يستدعيها المستخدم الأول.   و اذا اردت أعمل المثال التالي لتبسيط الشرح: أنشأ جدولا سمه  X: Create Table X(id int) أضف بيانات عبثية: Insert T select 1 union select 2 union select 3 الآن دع المستخدم الأول ينفذ التالي: begin tran Insert T select 10000 الآن دع المستخدم الثاني ينفذ التالي: Set Transaction Isolation Level Read Uncommitted Select * from T ثم اجعل المستخدم الأول يتراجع عن المناقلة: rollback Tran و كل الذي سبق يمكنك تنفيذه في الـ SQL Server Management Studio   أتمنى أن أكون قد أجبتك أخي الكريم. تحياتي    
  4. السلام عليكم و رحمة الله مع احترامي لجميع الذين أجابوا على السؤال لكني أظن أن هناك حلقة مفقودة في الإجابات, و هي أن وجود الـ Transaction لا يمنع بقية المستخدمين من استدعاء الإجراء أو من الوصول إلى الجداول التي يتعامل معها الإجراء المخزن ما لم يكن مستوى عزل الـ Transaction محدد كـ Serializable و هي أقوى حالات العزل و تماثل استدعاء Select  مع الخيار HOLDLOCK. Create Proc TestProc AS SET TRANSACTION ISOLATION LEVEL Serializable Begin Tran -- You SQL Statements Here Commit Tran Go تحياتي للجميع
  5. السلام عليكم و رحمة الله   أخي الكريم الـ SQL Server  هو في نهاية الأمر خدمة تعمل على أحد أنظمة تشغيل Windows طبعاً كل Version تدعم أنظمة تشغيل محددة .. و هناك العديد من الروابط التي تفصل ما تدعمه كل نسخة من أنظمة تشغيل .. على كل حال, المسألة ببساطة أنك تحتاج إلى Settings و Configurations لكي تتصل بالخدمة بدءاً من اعداد البروتوكول المستخدم للاتصال و الport الذي يكون بشكل افتراضي 1433 و   عنوان السيرفر (IP Address  أو DNS Name ) مضافاً اليه اسم الـ SQL Server Instance  <=> و هذا السطر يكافئ Database Host   بالاضافة الى أن الاتصال ب SQL Server يتطلب Login عن طريق أحد نوعي الحسابات في SQL Server و هما Windows Account أو SQL Server Account و هذا هو المقصود لديك من User Name و الـ Password   أما الـ Database Name  فكما تعرف أن SQL Server يحتوي أكثر من قاعدة بيانات .. لذا عليك أن تخبر البرنامج أي من قواعد البيانات هذه تريد الاتصال بها .. على سبيل المثال "Master".   الموضوع طويل و له تتمة لذلك أنصحك قبل أن تبدأ بمهمتك هذه أن تقرأ عن كيفية الاتصال بقواعد البيانات SQL Server .. و أظن أن المنتدى يحتوي مقالة لي عن هذا الموضوع و اليك رابطه:     http://arabteam2000-forum.com/index.php/topic/139698-%D9%84%D9%85%D8%AD%D8%A9-%D8%B3%D8%B1%D9%8A%D8%B9%D8%A9-%D8%AD%D9%88%D9%84-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D8%A7%D9%84-sql-server-management-studio/       بالتوفيق
  6. أنصح بشدة بتغيير الـ Collation لعمود جدولك الذي يظهر على شكل اشارات استفهام .. لكن يمكنك أن تنجز المطلوب أيضا عن طريق الـ SQL كالتالي: Select Column_Name Collate Arabic_CS_AI as Column_Name From  Table_NameCollate Arabic_CS_AI: هذه العبارة ستمكنك ببساطة من تحويل الـ Collation أثناء تنفيذ الاستعلام فقط إلى اللغة العربية.. و اذا اردت لغات اخرى فيمكنك أن تختار احداها من ناتج تنفيذ الاستعلام التالي: SELECT name, description FROM fn_helpcollations();بالتوفيق  
  7.   تعقيب على البند الأول: اعذرني فالكلام الذي قلته غير دقيق.. لأنك أخي الكريم ببساطة تستطيع أن تضع السكريبت خاصة أخونا الذي يسأل في اجراء مخزن بعد احاطته بمؤشر للمرور على السجلات مع استخدام جدول مؤقت أو متحول من نوع جدول و تضع النتائج فيه ثم تعمل عليها Select و سيعيد بذلك الإجراء Record Set كنتيجة لتنفيذ الإجراء المخزن و ببساطة ستتمكن من استدعائها من البرنامج عن طريق .Net و عرض النتائج سواء في تقرير أو في GridView.   تعقيب على البند الثاني و الثالث: بالنسبة لجلب السجلات كنت أقصد جلب المفتاح الأساسي فقط و ليكن Identity Column و جلب 10000 سجل منه لن يستغرق سوى أجزاء من الثانية و قد جربت بنفسي الآن الاستعلام من SQL Server عن طريق الشبكة و استغرق جلب السجلات أجزاء من الثانية كما قلت لك.   أما بالنسبة للحل خاصتك هو طبعا أفضل في حال امكانية دمج العبارات في Select Statement واحدة أو أكثر, لكن لم يكن عندي وقت كاف لاستوعب ماذا كان يحاول أخونا أن يصل اليه من السكريبت خاصته.   طبعاً قصدت النقاش لنستفيد كلينا و ليس لأخطئك ..   تحياتي للجميع
  8. السلام عليكم و رحمة الله و بركاته   اخي الكريم عدة حلول و سأقترح عليك بعضا منها:     1- أن تنشئ إجراء مخزن يحتوي على مؤشر يمر على كل السجلات المطلوب تطبيق السكريبت خاصتك عليها (راجع درس المؤشرات خاصتي للتعرف على كيفية  استخدامها).   2- أو تجلب السجلات الى البرنامج الهدف عن طريق SqlDataReader أو SqlDataAdapter أقصد الـ ADO.NET و تنشئ حلقة تمر بها على كل سجل و تستدعي من أجله اجراء مخزن يطبق ما تريد على كل سجل على حدى.   3- باستخدام الـ LINQ To SQL أو الـ Entity Framework لتجلب الـ Records الهدف على شكل ObjectSet و تنشئ حلقة ايضا لتمر على السجلات و تطبق السكريبت خاصتك الذي يجب أن يكون اجراء مخزن تستدعيه في كل مرور للحلقة.   بالتوفيق
  9. تجميع سجلات

    السلام عليكم و رحمة الله     تحتاج الى استخدام تعليمة الـ Group By في الـ SQL.. أظن و لست متأكد أنك أخي الكريم لا تعرف كثيرا اللغة SQL و اذا كان ظني في مكانه إليك هذا الرابط الذي سيعطيك فكرة مبسطة عن تجميع السجلات:     http://www.sqlteam.com/article/how-to-use-group-by-in-sql-server     بالتوفيق
  10. Script Index

    السلام عليكم و حمة الله   يمكن ذلك عن طريق ال Management Studio كما توضح الصورة.   بالتوفيق
  11. الحل بسيط للغاية أخي الكريم..   الغي خاصة الترقم التلقائي و استخدم طريقة برمجية لترقيم السجلات الجديدة كالتالي:     Create Table Employee(Id int primary key, Name Varchar(50))Go-- Create a stored procedure for insertCreate Proc Employee_Insert @Id int = null out, @Name Varchar(50) = nullAS Select @Id = IsNull(max(Id), 0) + 1 from Employee Insert Employee(Id, Name) Values(@Id, 'New Employee')Goبالتوفيق
  12. مجانية مدى الحياة..   طبعا لها امكانيات محدودة ... ولكنها تكفي شركة متوسطة. :)
  13. السلام عليكم و رحمة الله:   حمل هذه النسخة من Windows Management Framework و قم بتنصيبها قبل البدء بتنصيب SQL Server:     http://www.microsoft.com/en-us/download/details.aspx?id=34595     بالتوفيق.
  14. السلام علثيكم و رحمة الله و بركاته   أخي الكريم أنت تحاول - و الله أعلم - عمل Attach لقاعدة بيانات (مبنية باستخدام SQL Server 2012 ) باستخدام نسخة SQL Server 2008 و هذا ما يسمى بالـ Downgrading .. لذلك و لحل المشكلة عليك بتحميل نسخة SQL Server 2012 و تنصيبها على جهازك ثم جرب عمل attach مرة أخرى و بإذن الله ستنحل المشكلة.   على فكرة نفس المشكلة حدثت معي في الماضي و حليتها بتنصيب الـ Service Packs .. لكن مشكلتك تتطلب الذي ذكرته لك حسب الأرقام المذكورة في رسالة الخطأ.   اليك رابط النسخة المطلوبة:   http://www.microsoft.com/en-us/download/details.aspx?id=29062   بالتوفيق.
  15. لا يوجد ما تطلبه حسب معرفتي .. لأن الأمر ببساطة أن تقريبا أي شي تريد فعله بالسكريبت تستطيع توليده عن طريق الواجهة الرسومية للـ SQL Server Management Studio مثلاً نقرة يمين على أي جدول في القاعدة و اختر   "Select Top 100 Rows"..   و سيكتب الـ Studio السكيريب لك و ينفذه.. و هذا حال العديد من المهام ..   أما ميزة الـ Intellisense فهي للأغراض و ليست للكلمات المحجوزة في اللغة T-SQL.. ببساطة تظهر الـ List Members عن طريق الـ CTRL + J     تحياتي و بالتوفيق
  16. السلام عليكم و رحمة الله وبركاته:     هناك اختلاف بين كل نسخة و الأخرى و سأقول لك ببساطة:   عندما تشاهد X86 فالنسخة للأنظمة 32bit عندما تشاهد X64 فالنسخة للأنظمة 64bit عندما تشاهد ADV في الاسم فالنسخة معها مزايا اضافية كالـ Reporting Services و هي الأفضل لكن إذا اردت تبسيط الأمور على نفسك فالزم النسخة :   SQLEXPR_x86_ENU.exe   بالتوفيق.
  17. http://www.microsoft.com/en-us/download/details.aspx?id=30438   بالتوفيق
  18. السلام عليكم   بسيطة جداً.. Declare @SQL Varchar(200) Set @SQL = 'Select * From ' + @TableName Exec(@SQL) بالتوفيق
  19. السلام عليكم و رحمة الله و بركاته :   بعد الأسئلة الكثيرة التي وردتني عن هذا الموضوع قررت أن أضع كيفية التعامل مع هذه المشكلة كمقال بسيط ليستفيد منه كل الإخوة الذين واجهوا هذا الأمر..   المسألة ببساطة أن بعض المبرمجين أرادوا أن يعيدوا ترقيم العمود التلقائي و فوجئوا بصعوبة تحقيق ذلك. أما الحل ببساطة يكمن في إيجاد عمود بديل لعمود الترقيم التلقائي ليأخذ مكانه .. طبعا تنفيذ ذلك يتطلب مراعاة أمور كثيرة سأسردها بالترتيب حتى يتمكن من تطبيقها حتى المبرمجين غير الملمين بقواعد البيانات SQL Server..   و هذا مثال من الألف إلى الياء:  use tempdbgo  -- إنشاء جدول للمثالCreate Table TestTB(Id int identity, Name varchar(50) )Go -- ادخال بيانات Insert into TestTB(Name) Select 'Ahmad' Insert into TestTB(Name) Select 'Smeer' Insert into TestTB(Name) Select 'Ibraheem' Insert into TestTB(Name) Select 'Salem' Insert into TestTB(Name) Select 'Hala' Insert into TestTB(Name) Select 'Nehad' go-- خلق فجوة في الترقيم عن طريق حذف سجلات في الوسطDelete From TestTB Where Name in ('Smeer' , 'Ibraheem')go-- مشاهدة البيانات بعد خلق الفجوة للمعاينةSelect * From TestTBGo-- حل المشكلة-- إضافة عمود جديد للجدول بدون ترقيم تلقائي Alter Table TestTB Add IDNew int Go-- نقل القيم من عمود الترقيم التلقائي إلى العمود الجديدUpdate TestTB Set IDNew = Id Go-- معاينة الجدول بعد إضافة العمودSelect * From TestTBGoخطوات هامة: 1- احذف كل العلاقات ما بين العمود القديم و باقي الجداول على أن تدونها على ورقة لكي تعيد انشائها لكن مع العمود الجديد   2- اجعل العمود الجديد مفتاح رئيسي بدلا من العمود القديم   3- أعد إنشاء المفاتيح الثانوية لكي تتعامل مع العمود الجديد مع تفعيل الخيار On Update Cascade   4- بعد التأكد من أن العلاقات قد تم انشاؤها بشكل صحيح يمكن اعادة ترقيم العمود الجديد بالكامل ..   ملاحظة مهمة يجب أن يكون الخيار On Update Cascade موجود في كل العلاقات التي أعدت إنشاءها بحيث عندما تعيد ترقيم العمود الجديد (الذي أصبح مفتاح رئيسي) فإنها تنعكس على المفتاح الثانوي في الجدول المرتبط بهذا العمود -- إعادة الترقيم باستخدام المؤشر الديناميكيDeclare @C Cursor Set @C = Cursor dynamic for Select IdNew from TestTB for update Declare @NewId int = 1 open @C Fetch Next From @C While (@@FETCH_STATUS = 0) begin Update TestTB Set IdNew = @NewId Where Current of @C Set @NewId = @NewId + 1 Fetch Next From @C end Go -- حذف العمود القديم Alter Table TestTB Drop Column Id Go -- تغيير اسم العمود الجديد ليصبح مطابق لاسم القديم exec sp_rename 'TestTB.IdNew' , 'Id' Go-- معاينة بعد التعديلاتSelect * From TestTBGo-- بدلاً من الترقيم التلقائي أنصح بالقيام بذلك بشكل يدوي لأنه يعطيك ديناميكية أكبر للتعامل مع هذا العمود -- و هذا مثال على إجراء اضافة سجل و اعطاء العمود الرقم التالي المناسب Create proc TestTB_Insert @Id int = null out, @Name Varchar(50) = null AS Select @Id= IsNull(max(Id), 0) + 1 from TestTB Insert TestTB(Id, Name) Select @Id, @NameGO أرجو الفائدة للجميع
  20. السلام عليكم و رحمة الله و بركاته     أخي الكريم وجود التكرار في جدول خطأ بحد ذاته .. و قد تداولنا موضوع حذف البيانات المتكررة من قبل أكثر من مرة و إليك الروابط التي تحوي عدة حلول:   http://arabteam2000-forum.com/index.php/topic/105538-كيف-يمكن-حذف-سجلات-متكررة-و-إبقاء-أحدها-فقط-السج/   http://arabteam2000-forum.com/index.php/topic/136147-معالجة-التكرار-في-البيانات/     أرجو الفائدة
  21. لا يا صديقي لا يكفي بالغرض.. فالمطلوب ليس جلب الأشخاص الذين يملكون الإسم Ahmad بل الذين يملكون نفس مكان الإقامة الخاص بـ Ahmad. إلا إذا كنت تقصد أن توضح لأخونا استعمال الـ Top keyword فهذا شيء آخر و جزاك الله خيرا بكل الأحوال.   تحياتي
  22. لو الموظف نسي كلمة المرور => المدير يطرده لو المدير نسي كلمة المرور  => المدير يرمي نفسو من البلكونة   و هذا الحل الأمثل برأيي الشخصي....................     لكن إذا أردت فعلاً حل بسيط جدا .. أنشئ مستخدم (Built-in) للبرنامج على غرار المستخدم Administrator و ضع له كلمة مرور لا يعرفها إلا أنت ..   و ستجعل هذا الحساب للإستخدامات الطارئة ليستخدمه المدير و يدخل إلى البرنامج و يغير كلمة مرور حسابه عندما ينساها.   تحياتي
  23. السلام عليكم و رحمة الله و بركاته   أخي الكريم أنا شخصيا لم أعمل على برمجة نظام أندرويد كثيراً, لكن يمكنك أن تجد ما تستفيد منه في هذا الرابط .. طبعاً ينبغي ان تكون ضليع بلغة البرمجة جافا.   http://developer.android.com/guide/topics/data/data-storage.html   تحياتي
  24. السلام عليكم و رحمة الله    أخي الكريم ولّد السكريبت الخاص بقاعدة بياناتك و احفظه في ملف SQL .. و بعد الإنتهاء من تجاربك إحذف قاعدة بيانات التجارب و نفّذ السكريبت الذي حفظته جانباً من جديد لتولد القاعدة من جديد كما كانت ..       طريقة أخرى أسهل : اعمل Backup عن قاعدة البيانات و استرجعها عندما تنتهي .. راجع تعليمات :   Backup Database و Restore Database في الـ SQL Server  للحصول على أمثلة سهلة.   بالتوفيق
  25. السلام عليكم و رحمة الله   تأكد من كود جلب البيانات من قاعدة البيانات .. و لتتأكد من الموضوع بسرعة كل ما عليك فعله هو وضع DataGridView على الفورم و إرسال البيانات التي ترسلها للتقرير إليها..  طبعاً لا تنسى ان تربط الـ DataGridView بشكل صحيح .. gridView1.DataSource = DS1;gridView1.DataMember = "TableName"; أو تستخدم الـ MessageBox.Show() لتعرض معلومات عن الـ DataSet التي حملت فيها البيانات و هكذا..   و إذا كنت تستخدم أي Try .. Catch فحاول أن تعلقها (تحطها comments) لتظهر لك جميع الأخطاء كما يصدرها الـ Compiler في وقت التنفيذ.   و لكن ماذا تقصد نقلت البرنامج كسورس كود؟ قصدك نسخت مجلد الـ Debug من الـ Project Folder؟   بكل الأحوال جرب ما قلته لك لعلك تكتشف الخطأ. تحياتي