تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
العلاقات بين أكثر من جدولين ... وآلياتها ... وتعديل نوع الحقول
#1
السلام عليكم ورحمة الله وبركاته

عندي قاعدة بيانات sql 2008 وبها عدة جداول ....
عملت علاقات بينها ... في الإس كيو إل سيرفر ( هل هذا أفضل أم الأفضل أن أتركها بدون علاقات ثم أعمل العلاقات في الفيجول بيسك )

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

مثال :

الجدول الرئيسي : جدول الطلاب ... فيه مفتاح أساسي : رقم الطالب
جدول فرعي : دورات الطالب ... فيه حقل مرتبط ( رقم الطالب )
جدول فرعي : صفوف الطالب : فيه حقل مرتبط ( رقم الطالب )

عملت فورم رئيسي فيه بينات الجدول ( جدول الطلاب )
ثم عمل 2 داتا قريد أريد أعرض في واحد منهما ( دورات الطالب ) مع إمكانية التعديل والاضافة
وفي الثاني ( صفوف الطالب ) مع التعديل والاضافة .
ماهي أفضل الطرق لعمل ذلك ؟

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

كذلك لا أستطيع تعديل خاصية الـ ( Null ) إلى (not Null) أو العكس ... وتظهر رسالة تخبرني بأنه لابد أن أبني الجدول من جديد!!!!!
هل من حل لتجاوز ذلك ؟
الرد }}}
تم الشكر بواسطة:
#2
هل من مساعد
الرد }}}
تم الشكر بواسطة:
#3
نحمده ونصلي على رسوله الكريم

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

إقتباس :عندي قاعدة بيانات sql 2008 وبها عدة جداول ....
عملت علاقات بينها ... في الإس كيو إل سيرفر ( هل هذا أفضل أم الأفضل أن أتركها بدون علاقات ثم أعمل العلاقات في الفيجول بيسك )

الأفضل صنع العلاقات داخل قاعدة البيانات وليس من الكود.

إقتباس : كذلك كيف أجعل 2 داتا قريد في الفورم الرئيسي كل واحد منهما يظهر بيانات أحد الجداول المرتبطة بالجدول الرئيسي ؟

بعد أن تجلب البيانات بجملة الاستعلام inner join، اسند البيانات لـ bindingsource، وقم باستخدام الـ bindingsource كمصدر بيانات لكلا الجريد، بتغيير اسم الجدول لكل واحده منهن طبعا.

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

كذلك لا أستطيع تعديل خاصية الـ ( Null ) إلى (not Null) أو العكس ... وتظهر رسالة تخبرني بأنه لابد أن أبني الجدول من جديد!!!!!
هل من حل لتجاوز ذلك ؟
توجه لـ:
  • menu
    • tools
      • options
        • database tools
          • table and database designers




ثم أزل الاختيار عن:
prevent saving changes that require table re-creation

الرد }}}
تم الشكر بواسطة:
#4
جزاك الله خيراً أستاذي الفاضل ...

بالنسبة لسيرفر sql فقد اتبعت تعليماتك وانحلت المشكلة ... ولله الحمد ولك جزيل الثواب .

وبالنسبة لعملية الربط فلم أوفق تماماً في إسناد جملة ( inner join ) لـ (bindingsource) ... حيث أنه في الجدول الثاني ( القريد ) يظهر كافة الحقول ... الخ ...

ولقد قمت بعملية الربط باستخدام مطول (لأنني مبتدئ) لجملة Relations وإليك توضيح لمثل ما قمت به في الأكواد التالية

كود :
Dim cmd As SqlCommand = New SqlCommand("SELECT * from stu_data ", con)
            SQLDataAdapter1 = New SqlDataAdapter(cmd)
            Dim builder As SqlCommandBuilder = New SqlCommandBuilder(SQLDataAdapter1)
            SQLDataSet1 = New DataSet()
            SQLDataAdapter1.Fill(SQLDataSet1, "stu_data")

Dim cmd20 As SqlCommand = New SqlCommand("SELECT * from course ", con)
            SQLDataAdapter20 = New SqlDataAdapter(cmd20)
            Dim builder20 As SqlCommandBuilder = New SqlCommandBuilder(SQLDataAdapter20)
            SQLDataSet20 = New DataSet()
            SQLDataAdapter20.Fill(SQLDataSet20, "course")

Dim cmd30 As SqlCommand = New SqlCommand("SELECT * from Family ", con)
            SQLDataAdapter30 = New SqlDataAdapter(cmd30)
            Dim builder30 As SqlCommandBuilder = New SqlCommandBuilder(SQLDataAdapter30)
            SQLDataSet30 = New DataSet()
            SQLDataAdapter30.Fill(SQLDataSet30, "Family")



            BindingSource1 = New BindingSource(SQLDataSet1, "stu_data")
            BindingSource11 = New BindingSource(SQLDataSet20, "course")
            BindingSource12 = New BindingSource(SQLDataSet30, "Family")


            stu_no.DataBindings.Add("Text", BindingSource1, "stu_no", True, 1, "")
            stu_name.DataBindings.Add("text", BindingSource1, "stu_name", True, 1, "")
            stu_zone.DataBindings.Add("text", BindingSource1, "stu_zone", True, 1, "")
            stu_address.DataBindings.Add("text", BindingSource1, "stu_address", True, 1, "")
  stu_contry.DataBindings.Add("SelectedValue", BindingSource1, "stu_contry", True, 1, "")




            data.Locale = System.Globalization.CultureInfo.InvariantCulture
            data2.Locale = System.Globalization.CultureInfo.InvariantCulture

            SQLDataAdapter1.Fill(data, "stu_data")
            SQLDataAdapter20.Fill(data, "course")
            SQLDataAdapter1.Fill(data2, "stu_data")
            SQLDataAdapter30.Fill(data2, "Family")



            Dim relation1 As New DataRelation("stu_datacourse", data.Tables("stu_data").Columns("stu_no"), data.Tables("course").Columns("cou_stu_no"))
            Dim relation2 As New DataRelation("stu_dataFamily", data2.Tables("stu_data").Columns("stu_no"), data2.Tables("Family").Columns("Fam_stu_no"))

            data.Relations.Add(relation1)
            data2.Relations.Add(relation2)

            BindingSource1.DataSource = data
            BindingSource11.DataSource = data2

            BindingSource1.DataMember = "stu_data"
            BindingSource11.DataMember = "stu_data"
            BindingSource13.DataMember = "stu_data"


            'انشاء بندج سورز جديد وادراج الداتاست والجدول بداخله
            BindingSource20 = New BindingSource(SQLDataSet20, "course")
            bindingsource30 = New BindingSource(SQLDataSet30, "Family")

            bindingsource20.DataSource = BindingSource11
            bindingsource20.DataMember = "stu_datacourse"

            bindingsource30.DataSource = BindingSource12
            bindingsource30.DataMember = "stu_dataFamily"


            ' SQL كود ربط داتا جريد بقاعدة البيانات
            DataGridView1.DataSource = BindingSource20
            DataGridView2.DataSource = bindingsource30

أنا أعتقد ( بل أكاد أجزم ) بأنني طولت وكررت في الكود ولكن هذا ما وصل إليه فهمي ....

مشكلتي الآن :
** مثلاً الحقل ( stu_contry ) هو كومبو يأخذ قيمته من جدول الدول بالكود التالي

كود :
Dim cmd1 As SqlCommand = New SqlCommand("SELECT * from contry ", con)
            SQLDataAdapter2 = New SqlDataAdapter(cmd1)
            Dim builder1 As SqlCommandBuilder = New SqlCommandBuilder(SQLDataAdapter2)

            SQLDataSet2 = New DataSet()

            SQLDataAdapter2.Fill(SQLDataSet2, "contry")

            stu_contry.DataSource = SQLDataSet2.Tables("contry")
            stu_contry.DisplayMember = "con_Name"
            stu_contry.ValueMember = "con_no"
ولكنه يظهر أول خيار في الكمبو وإذا انتقلت لسجل طالب ليست مسجلة له دولة يظهر أول دولة في الكومبو ...


** ماذا أكتب في كود الحفظ والحذف... لأنني عند إضافة سجل جديد رقم الطالب ( stu_no ) حقل ترقيم بالكود - يعني يبحث عن أعلى رقم ويزيده 1 - بمعنى أنه في قريد الدورات عندما أضيف سجل جديد أو سجلين لهذا الطالب سيكون حقل الربط ( cou_stu_no ) فاضي ولن يقبل الحفظ ..

لو عدلت الكود الأول إلى ( inner join ) كيف سيكون الاسناد إلى البيندنج سورس وكيف سيكون كود الحفظ .

العفو
الرد }}}
تم الشكر بواسطة:
#5
نحمده ونصلي على رسوله الكريم


الملفات المرفقة
.zip   rohiem.zip (الحجم : 209.91 ك ب / التحميلات : 138)
الرد }}}
تم الشكر بواسطة:
#6
جزاك الله خيراً أستاذي الفاضل
لقد قمت بالتعديل قليلاً على الملف المرفق من قبلك لأوضح لك فكرة ما أريده ( حتى لو لم أعدل فالمشكلة موجودة )
المشكلة :
عند إضافة سجل ( طالب ) جديد لو أردنا التحرير السريع ( أعني إدخال البيانات السريع ) فهذا يعني أن أكتب كل البيانات عن الطالب ( إسمه ودوراته ) ثم أضغط زر حفظ ( واحد ) ليحفظ البيانات كلها دفعة واحدة كل شيء في جدوله ...
هنا تكمن المشكلة .. حيث أنه سيجد في بيانات الدورات ( رقم الطالب - بالسالب - قبل الترقيم النهائي) وعند الحفظ سيحفظ أولاً بيانات الطالب برقم جديد ثم لما يصل إلى نقطة حفظ بيانات الدورات لن يجد الفيرجن كي صحيحاً ... فتظهر المشكلة ولا يحفظ بيانات الدورات التي في القريد .. كما هو الحال في الإسم الرابع الذي أضفته ... أما الإسم الثالث فقد كتبت بياناته أولاً ثم حفظته ثم أضفت الدورة ثم حفظته .. وهذا متعب ...

المطلوب : عند الضغط على زر الحفظ الموجود أسفل القريد يحفظ بيانات الطالب ويقوم بتعديل الفيرجن كي في القريد لتوافق الرقم الصحيح له ويحفظها ( أي الحفظ دفعة واحدة بزر واحد ) ..

العفو على الإزعاج ..


الملفات المرفقة
.rar   rohiem.rar (الحجم : 449.46 ك ب / التحميلات : 140)
الرد }}}
تم الشكر بواسطة:
#7
هل من مساعد
الرد }}}
تم الشكر بواسطة:
#8
وينكم أساتذتي
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] كود اضافة وحفظ وتعديل والحذف فى DATAGRIDVIEW atef_020 9 28,326 31-08-21, 04:59 AM
آخر رد: a7med saba
  مساعدة في كود عرض بيانات من جدولين samira20 1 2,332 18-04-19, 03:03 AM
آخر رد: حريف برمجة
  كيف يمكنني التعامل مع جدولين Ahlam 14 9,985 16-12-18, 09:13 PM
آخر رد: viv
  [سؤال] مساعدة في حفظ بيانات من جدولين mosasaad 5 3,917 22-08-16, 10:25 AM
آخر رد: سعود
  كيفية التأكد من تعبئة الحقول في جدول بقاعدة البيانات aftfm 6 3,265 06-04-16, 08:38 PM
آخر رد: aftfm
  إنشاء جريد فيو من جدولين djelloul 4 2,593 01-04-16, 11:33 PM
آخر رد: djelloul
  مثال على البحث في جدولين بالداتا قريد sql rookan 6 4,249 12-01-16, 01:17 PM
آخر رد: abdhassan
  [سؤال] طلب مساعدة في طريقة ربط جدولين اكسس 2007 moftah70 1 2,247 08-01-16, 04:18 AM
آخر رد: boudyonline
Question [سؤال] هل تصميم قاعدة البيانات صحيح و العلاقات alims 0 1,710 16-12-15, 01:12 AM
آخر رد: alims
Rainbow [سؤال] ملء داتا جريد من جدولين ويؤثر فى الادوات طالب فيجوال بيسك 0 2,449 21-06-15, 06:54 PM
آخر رد: طالب فيجوال بيسك

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم