• الإعلانات

    • فيصل الحربي

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

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

vbzaidan

اعضاء جدد
  • عدد المشاركات

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

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

السمعه بالموقع

0 عادي

عن vbzaidan

  • الرتبة
    عضو جديد

طرق الإتصال

  • ICQ 0
  1. عرض السجلات المتشابهة داخل جدول

    وعليكم السلام ورحمة الله وبركاته : أخي الكريم على ما أعتقد أنك لم تحسن إختيار المفتاح الرئيسي لقواعد بيانات لذلك ترى تكرار في قواعد البيانات هناك طريقتين لحل هذه المشكلة : 1- أنك تختبر البيانات المدخلة بعد أن يضغط المستخدم زر حفظ وتقارنها مع قاعدة بيانات فإذا كان هناك تكرار لاتقبل الحفظ وتوضح للمستخدم أن هناك سجل بنفس هذه البيانات وهذه الطريقة ليست عملية أبدا ومتعبه . 2- الطريقة الثانية أن تختار المفتاح الرئيسي بدقة مثال : السيناريو : عندك جدولين الجدول الأول : أصناف رئيسية وبه عامود واحد فقط يحمل إسم الصنف وهذا العمود pk الجدول الثاني : أصناف فرعية وبه عمودين إسم الصنف الرئيسي FK وإسم الصنف الفرعي ( تأخذ هذين العمودين على أساس أنهما pk ويسمو هذا النوع من composite pk ) مثال للإدخال : في جدول الأصناف الرئيسية : أدخلت سيارة في جدول الأصناف الفرعية : أدخلت سيارة في عمود الأسماء الرئيسية وأدخلت بترول في عمود الأصناف الفرعية ( هذا مقبول ) في جدول الأصناف الفرعية : أدخلت سيارة في عمود الأسماء الرئيسية وأدخلت بترول (مرة ثانية ) في عمود الأصناف الفرعية ( هذا مرفوض ) في الفيجول سيتديو : تقوم إما بتحويل الخطأ التي سترسله قاعدة بيانات إلى رسالة تنبيه أن هذا الصنف الفرعية السيارة مكررر وترفض هنا عملية الحفظ ( كود الإختبار سطر واحد تقريبا ) أو تقوم بفحص البيانات المدخلة وتقارنها بهذه العمودين فإذا كانت البيانات متاشبهة رسالة تنبيه أن هذا الصنف الفرعية السيارة مكررر وترفض هنا عملية الحفظ ( كود الإختبار 5 سطور أو 4 ) بالنسبة للـ AutoNumber فالأخ Bashar Rabat أوضح المسألة لن يكون هناك تكرار إذا كان نوع العمود pk وتلقائي الترقيم ( التكرار لن يحصل فقط في عمود id وليس إلى العواميد الأخرى في نفس الجدول ) مثال : جدول الزبون id (pk ), cus name , cus address بيانات عمود id لن تتكرر بيانات عمود الإسم والعنوان قابلة للتكرار لمنع هذه المشكلة : مثل أردت أن لا يتكرر الإسم أيضا فعليك : id , cus name (pk),cus adress العنوان ممكن يتكرر لكن الإسم + الـ id لن يتكرر في نفس الجدول أرجو أن نكون أن وضحنا لك سبب المشكلة ورجائي الخاص أن تأخذ وقت في تصميم قاعدة البيانات و عمل العلاقة بينها وبين برنامجك قبل الشروع إلى البرمجة . أخووك زيدان
  2. أولا شكر على ردك السريع بخصوص الموضوع ثانيا أعتذر عن هذا الخطأ الغير مقصود ... إنما فقط أردت معرفة الحلول الممكنة من الطرفين لأن الموضوع على جزئين sqlserver & ado.net وكل جزء مرتبط ببعضه فجمعتهم جميعا في موضوع واحد ..وأعتذر مرة أخرى .
  3. السلام عليكــم ورحمـة الله وبركاتــه ،، إستفسار : أريد أن أقوم بإدخال عدد من السجلات دفعة واحدة بمجرد الضغط على زر حفظ من واجهة البرنامج المتصلة بقاعدة البيانات ( واجهة البرنامج مصممة بواسطة فيجول ستيدو2005 C# وقاعدة البيانات مصممه ببرنامج sql server 2005 ) حل الشخصي ( الذي قمت أنا بإستخدمه ) : 1-في برنامجي هناك زرين : زر حفظ و زر إضافة 2- المستخدم يضغط على زر إضافة يعبئة البيانات الخاصة بالسجل حالات الحفظ بعد الضغظ لى زر حفظ الحالة الأولى : إدخال سجل واحد وحفظه 3- في حالة الضغط على حفظ يقوم البرنامج بحفظ السجل الواحد الذي قام بإضافته المستخدم على المستخدم الآن أن يضغط على زر إضافة مرة أخرى ثم يسجل البيانات ثم حفظ وهذه علمية متعبة الحالة الثانية : إضافة عدد من السجلات إلى الذاكرة ثم الضغط مرة واحدة على زر الحفظ 4-في حالة الضغط على زر إضافة ** مرة أخرى بعد إدخال بيانات السجل الأول ** يقوم البرنامج بحفظ بيانات السجل الأول في مصفوفة ويضع رقم 1 تحت زر حفظ معلنا أن هناك سجل تم إضافته لدينا فقط في الذاكرة وتمسح البيانات السابقة من ال textbox لإستقبال بيانات السجل الثاني وهكذا فرضا أكتفى المستخدم بإضافة 10 سجلات للذاكرة والآن يريد الحفظ بمجرد الضغط على زر * حفظ* مرة واحدة يقوم البرنامج بإدخال جميع السجلات المحفوظة في المصفوفة إلى قاعدة البيانات ( تسهيلا للمستخدم بدل من أي يضغط زر إضافة 10 مرات وز حفظ 10 مرات ) سيضغط هنا على زر إضافة 10 مرات وزر حفظ مرة واحدة فقط . (( النتيجة )) : لقد قمت فعليا بتطبيق هذه الفكرة ونجحت لكن ميكانيكة الحفظ بطىء نوع معا أقصد السرعة لأنني ساقوم بإستدعاء الإجراء الذي يقوم بعمل insert 10 عند طريق حلقة تكرارية وبعد إدخال السجلات العشرة أقوم بعمل filling to the dataset الحل الآخر ( الذي أريد مناقشته معكم ) هو بإستخدام sql copy bulk ? السؤال هل سيفي هذا الأمر بالغرض يدخل السجلات مرة واحدة وهل سيكون هناك سرعة إذا ماقارنه بطريقتي التي عرضتها بالأعلى . شكرا لتعاونكم وأعذورني للإطالة وبمناقشة هذا الموضوع سيتفيد الكثير .. بإذن الله .. أخوكم زيدان
  4. السلام عليكــم ورحمـة الله وبركاتــه ،، الإستفسار : عندي برنامج أن طور تصميمه من ضمن عمليات البرنامج إنشاء قاعدة بيانات لكل مستخدم ( كل مستخدم ستخلق له قاعدة بيانات متشابه ) ووضع حماية عن طريقة كلمة مرور سؤالي هو : 1- هل علي القيام بإنشاء قاعدة بيانات خاصة لكل مستخدم ؟ إذا كان الإجابة بنعم كيف أحمي قاعدة البيانات الخاصة بمستخدم معين عن طريق برنامجي front end 2- أو هل يجب علي إنشاء مفتاح أساسي primary key وأسميه user id إضافة إلى حقل آخر أسميه password ويكون حقل الـ user id هو الـ FK لبقة الجدوال الأخرى في البرنامج التي سيتم فيها المستخدم بإدخال بياناته وبيانات أخرى خاصة به هو فقط عن طريق كود معين ( بهذه الطريقة لن أقوم بإنشاء قاعدة بيانات خاصة لكل مستخدم وإنما سيكون الإتصال ببياناته عن طريق user id ) أعلم أن الطريق الأولى هي الأفضل لكن كيف يضع المستخدم كلمة سر لقاعدة البيانات هذه عن الطريق front end وهو هنا فيجول ستديو 2005 أستخدم C# كبرمجة front end وأكون شاكر لكم لو وضعتم لي كود أنفذ فيه هذه العملية كود sql server شاكر لكم حسن تعاونكم وآسف على الإطالة أخوكم زيدان
  5. السؤال : هل أستطيع إرجاع قيم لأكثر من صف واحد عند إستدعاء الإجراء أكثر من مرة مثال : هذا كود الإستدعاء من داخل الفيجول ستديو : sqlcmd = frm.sqlConnection1.CreateCommand(); sqlcmd.CommandType = CommandType.StoredProcedure; sqlcmd.CommandText = "test"; foreach (string i in array_result) { sqlcmd.Parameters.Add("@main", SqlDbType.NVarChar, 50).Value = i; } frm.sqlConnection1.Open(); SqlDataReader MyDataReader = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection); DataTable dt = new DataTable("entry"); dt.Load(MyDataReader); dataGridView1.DataSource = dt; frm.sqlConnection1.Close(); هذا كود الـ stored procedure من داخل الـ sql server 2005 ALTER PROCEDURE [dbo].[test] (@main nvarchar(50)=null ) as begin select main_name , sum(cost) from entry where daydate between '7/1/2008' and '8/1/2008' and main_name = @main group by main_name end هل هناك خطأ .... تحياتي للجميع ...
  6. السؤال : هل أستطيع إرجاع قيم لأكثر من صف واحد عند إستدعاء الإجراء أكثر من مرة مثال : هذا كود الإستدعاء من داخل الفيجول ستديو : sqlcmd = frm.sqlConnection1.CreateCommand(); sqlcmd.CommandType = CommandType.StoredProcedure; sqlcmd.CommandText = "test"; foreach (string i in array_result) { sqlcmd.Parameters.Add("@main", SqlDbType.NVarChar, 50).Value = i; } frm.sqlConnection1.Open(); SqlDataReader MyDataReader = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection); DataTable dt = new DataTable("entry"); dt.Load(MyDataReader); dataGridView1.DataSource = dt; frm.sqlConnection1.Close(); هذا كود الـ stored procedure من داخل الـ sql server 2005 ALTER PROCEDURE [dbo].[test] (@main nvarchar(50)=null ) as begin select main_name , sum(cost) from entry where daydate between '7/1/2008' and '8/1/2008' and main_name = @main group by main_name end هل هناك خطأ .... تحياتي للجميع ...
  7. المعاهد لاتكفي أخي لإجتيار الإختبار .. وأنصح بتعليم نفسك بنفسك هناك سي دي هات تعليمية أفضل من ألف معهد وأرخص بنفس الوقت والشركات التي أنصحك بها : appdev , Nugget , Testout أيضا لاتنسى الكتب وأنصحك بي : teach your self T-sql server 2005 in 10 min وهناك كتب كثيرة بهذا المجال .. لاتنسى أيضا تطبيق ما تعلمته وهو الأهم قم بتطبيق ما تعلمته حتى لو أخذ منك سنة ... لاتقلق بشأن الشهاد ة كثيرا الأهم هو أنت تكون MCDBA قبل الإمتحان .. وليس بعده .. إبحث في المنتديات بخصوص السي الدي هات التعليمية ستجد الكثير من الروابط التي ستقودك إليها .... وفق الله الجميع لما يحبه ويرضاه ...
  8. عندما أنهي عملي مع الوالد .. سأرفع لك مثال حي للبرنامج كامل وكيفية إستخدمه .. وكيف تتم علمية تخصيص الفترة والأصناف في صفحة الجرد الذي يختار المستخدم بالسي شارب المثال سيكون بالفلاش حركي .. أعتقد لم تفهم قصدي جيدا .. لابأس سأرى كيف ستكون عملية الجرد التي سوف تقوم بعملها .. شكرا لك عزيزي وآسف على إشغالك بالموضوع ..
  9. لم أنتبه لذلك إلا اليوم ... كنت مشغولا الأيام الماضية مع والدي في بعض الأعمال .. واليوم وجدت وقت فراغ فجلست أعيد ترتيت الأوراق فوجدت الإستنتاج الذي كتبته في آخر رد لي .. لذلك أرجو منك حاليا ( إذا كان لديك بعض الوقت ) أن تجد كيفية عرض تفاصيل الجرد بالطريقة الثاني وليست الأولى ... وهأنذا أنشغل مرة أخرى لعمل لي مع الوالد ولولا ذلك لجلست عليها الآن وحللت هذ اللغز الذي بدا سهلا لي ... بالنسبة لوضع إيميلي للتواصل هنا هل مخالف لقوانين المنتدى ؟؟
  10. لن تستطيع إدخال صنفين فرعيين لهما نفس الإسم إذا كان المفتاح أساسي .... ( في الحقيقة ليست هناك أي ضرورة لجعل عمود الأصناف الفرعية مفتاح أساسي لإحتمالية عملية التكرار وهذا من الثوابت المتفق عليها ) ـ فرحت كثيرا لأنك إستفدت ... ـ هل رأيت صورتي البرنامج التي أرفتها في الموضوع في الصفحة الأولى ألقي نظرة عليها ... (( قضية عملية الجرد )) ـ لقد تعبت كثيرا في البحث عن الحل وقررت أن أغير طريقة عرض الإجراء كالتالي : صنف رئيسي ------------- صنف فرعي ------------- مجموع الصنف في شهر محرم ------------- مجموع الصنف في شهر صفر ------------- بالأمس كانت : صنف رئيسي / فرعي ------------------ مجموع الصنف في شهر محرم ------------- مجموع الصنف في شهر صفر ------------- أخي Vbm لقد أعدت النظر في قضية عرض الأصناف الفرعية و الأصناف الرئيسية في نفس العامود فقررت إلغاء هذه الطريقة ( عرضهما معا في نفس العمود ) لذا سأجعلها بالشكل التالي : صنف رئيسي ------------- صنف فرعي ------------- مجموع الصنف في شهر محرم ------------- مجموع الصنف في شهر صفر ------------- الأسباب التي دعتني لذلك هي : قد يتكرر الصنف الفرعي المراد جرده مرتين ( هذه ليست عملية إدخال هذه عملية جرد تذكر ذلك ) وهذا الشيء قد يحدث إلتباس للمستخدم لانه لن يعرف هذا الصنف الفرعي المتكرر لأي صنف رئيسي تابع مثال : الصنف--------- مجموع مصاريف الصنف في شهر محرم بترول ------- 1000 بترول ------ 500 لاحظت الآن كيف يحصل الإلتباس إذا وضعتها في نفس العمود ... لاحظ معي بترول في الصف الأول تابع للسيارة والصف الثاني تابع للموتوريسكل
  11. حسنا هل وجدت حلا لمشكلة الخطأ التي تحدث عند تغيير التاريخ إلى هجري ....
  12. هناك نقاط مهمة سأوضحها : 1 - عامود sub_name يجب أن لايكون مفتاح أساسي لأن ذلك يخالف وظيفة عمل البرنامج مثال للتوضيح : لديك : صنف رئيسي - > سيارة صنف فرعي -> بترول صنف رئيسي - > موتورسيكل صنف فرعي -> بترول هنا سيرفض الـ sql server 2005 تكرار حقل الصنف الفرعي أريت حقل الأصناف الفرعية يحتوي على أسماء متكررة ( بترول ) الحالة الثانية : في حالة عدم جعل sub_name مفتاح رئيسي لذلك قمت بعمل إجراء إسمه : XinsertXupdateXdelete_subcat هذا الإجراء يضمن لك هذه العملية : صنف رئيسي - > سيارة صنف فرعي -> بترول صنف فرعي آخر -> بترول ( يخرج البرنامج رسالة خطأ في هذه الحالة ) صنف رئيسي - > موتورسيكل صنف فرعي -> بترول هنا لن يرفض الـ sql server هذه العملية مهما كررت وسيتم الإجراء بالقيام بمهمة ( عدم تكرار صنفين فرعيين لهما نفس الإسم تحت صنف رئيسي واحد سيرسل الإجراء قيمة false ) شكرا لك على الرابط ...
  13. أعتقد يا إستاذي vbm أن الحل سيكون بإستخدام #C وليس بإستخدام T-sql ... لحل مشكلة عرض الأصناف الفرعية والرئيسية في عمود واحد فقط .... لإتمام عملية الجرد بنجاح ...
  14. أشكرك على هذه الملاحظات القيمة ... 1- بالنسبة للعلاقات الغرض من العلاقة بين الـ mainitem_T و entry تمكين عملية الحذف النهائي إذا حذف مثلا الصنف الرئيسي ( ا لمواد الغذائية ) سيتم حذف كل سجل له علاقة بهذا الصنف الرئيسي بإستخدام خاصية casecade تحت وظيفة Delete Rule . بالنسبة الأصناف الفرعية ( الحذف سيكون برمجيا في هذه الحالة ) فلم أجد بدا من الحذف التلقائي كما في الأصناف الرئيسية لعدم وجود علاقة بينها وبين entry لذا قمت بذلك برمجيا ( store procedure ) (( قد أكون أخطأت في عمل الـ كاسكيد في قاعدة البيانات التي رفعتها لك على الموقع المذكور )) لأن لدي نسخة مماثلة من قاعدة البيانات . 2- يوجد Trigger تحت الجدول entry هذا فقط لتحديث المجموع عند الإضافة أو الحذف أو التحديث .. 3- ( لملاحظة الثانية هى قيامك بعدم إستخدام حقول المفتاح بصورة صحيحة ) لماذا هل توضح لي السبب أكون لك شاكرا ؟