تقييم الموضوع :
  • 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 ك ب / التحميلات : 112)
الرد }}}}
تم الشكر بواسطة:
#6
جزاك الله خيراً أستاذي الفاضل
لقد قمت بالتعديل قليلاً على الملف المرفق من قبلك لأوضح لك فكرة ما أريده ( حتى لو لم أعدل فالمشكلة موجودة )
المشكلة :
عند إضافة سجل ( طالب ) جديد لو أردنا التحرير السريع ( أعني إدخال البيانات السريع ) فهذا يعني أن أكتب كل البيانات عن الطالب ( إسمه ودوراته ) ثم أضغط زر حفظ ( واحد ) ليحفظ البيانات كلها دفعة واحدة كل شيء في جدوله ...
هنا تكمن المشكلة .. حيث أنه سيجد في بيانات الدورات ( رقم الطالب - بالسالب - قبل الترقيم النهائي) وعند الحفظ سيحفظ أولاً بيانات الطالب برقم جديد ثم لما يصل إلى نقطة حفظ بيانات الدورات لن يجد الفيرجن كي صحيحاً ... فتظهر المشكلة ولا يحفظ بيانات الدورات التي في القريد .. كما هو الحال في الإسم الرابع الذي أضفته ... أما الإسم الثالث فقد كتبت بياناته أولاً ثم حفظته ثم أضفت الدورة ثم حفظته .. وهذا متعب ...

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

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


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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] مساعدة في حفظ بيانات من جدولين mosasaad 5 265 22-08-16, 10:25 AM
آخر رد: سعود
  كيفية التأكد من تعبئة الحقول في جدول بقاعدة البيانات aftfm 6 322 06-04-16, 08:38 PM
آخر رد: aftfm
  إنشاء جريد فيو من جدولين djelloul 4 294 01-04-16, 11:33 PM
آخر رد: djelloul
  مثال على البحث في جدولين بالداتا قريد sql rookan 6 769 12-01-16, 01:17 PM
آخر رد: abdhassan
  [سؤال] طلب مساعدة في طريقة ربط جدولين اكسس 2007 moftah70 1 274 08-01-16, 04:18 AM
آخر رد: boudyonline
Question [سؤال] هل تصميم قاعدة البيانات صحيح و العلاقات alims 0 205 16-12-15, 01:12 AM
آخر رد: alims
  [سؤال] ربط جدولين وجلب صور مصطفى_ظيمة 24 3,224 03-06-15, 01:27 AM
آخر رد: مصطفى_ظيمة
  [سؤال] حفظ عدة صور لسجل واحد باستخدام جدولين abid 19 2,515 09-02-15, 07:46 PM
آخر رد: سعود
  [سؤال] الربط بين جدولين mesm23 9 1,216 21-05-14, 02:58 AM
آخر رد: على رمضان
  حساب عدد الحقول الفارغة في السجلات aftfm 8 1,517 03-05-14, 04:29 PM
آخر رد: aftfm

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


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