منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة فى البحث بين جدولين يتم تكرار البيانات عند استدعائها
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم

السلام عليكم شباب

عندى مشكله فى البحش بين جدولين يتم تكرار البيانات اذا كان بالجدولين صف واحد يتم استدعائه صف عادى لاكن اذا كان صفين يتك استدعائه اربع مرات يعنى يتم تكراره مرتين كمان

هذا هو كود البحث
PHP كود :
Using DataAdapter1 As New SqlDataAdapter("SELECT * FROM [hagz1],[hagz2] WHERE [studntname] = @name "con)
            
DataAdapter1.SelectCommand.Parameters.AddWithValue("@name"txt.Text)
            
Using DataTable As New DataTable
                DataAdapter1
.Fill(DataTable)
                
DataGridView1.DataSource DataTable
            End Using
        End Using

        DataGridView1
.Columns(0).Visible False
        DataGridView1
.Columns(1).Visible True
        DataGridView1
.Columns(2).Visible False
        DataGridView1
.Columns(3).Visible False
        DataGridView1
.Columns(4).Visible True
        DataGridView1
.Columns(5).Visible False
        DataGridView1
.Columns(6).Visible False
        DataGridView1
.Columns(7).Visible False
        DataGridView1
.Columns(8).Visible False
        DataGridView1
.Columns(9).Visible True
        DataGridView1
.Columns(10).Visible True
        DataGridView1
.Columns(11).Visible True
        DataGridView1
.Columns(12).Visible True
        DataGridView1
.Columns(13).Visible True

        
'''''''''''''''''''''
        DataGridView1.Columns(1).Width = 100
        DataGridView1.Columns(4).Width = 100
        DataGridView1.Columns(9).Width = 140
        DataGridView1.Columns(10).Width = 105
        DataGridView1.Columns(11).Width = 140
        DataGridView1.Columns(12).Width = 105
        DataGridView1.Columns(13).Width = 135
        ''''''''''''''''''''''''''''''''''''''''''''''''

        DataGridView1.Columns(1).HeaderText = "اسم المدرس"
        DataGridView1.Columns(4).HeaderText = "اسم المزكرة"
        DataGridView1.Columns(9).HeaderText = "اسم الطالب"
        DataGridView1.Columns(10).HeaderText = "دفع"
        DataGridView1.Columns(11).HeaderText = "تاريخ الدفع"
        DataGridView1.Columns(12).HeaderText = "استلام"
        DataGridView1.Columns(13).HeaderText = "تاريخ الاستلام"
        '''''''''''''''''
        
DataGridView1.ColumnHeadersDefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
        DataGridView1
.MultiSelect False
        With Me
.DataGridView1
            
.RowsDefaultCellStyle.BackColor Color.White
            
.AlternatingRowsDefaultCellStyle.BackColor Color.White
            
.RowsDefaultCellStyle.ForeColor Color.Black
            
.AlternatingRowsDefaultCellStyle.ForeColor Color.Black
        End With 
Using DataAdapter1 As New SqlDataAdapter("SELECT * FROM [hagz1],[hagz2] WHERE [studntname] = @name ", con)
يجب وجود علاقة بين الجدولين اى حقل رقم الطالب ويكون موجدو فى الجدولين مثل جدول الطلبة والنتائج
select * from student,result
where student.nostudent=result.nostudent
اخى الكريم شكرا لاكن لم تحل المشكلة المشكلة وهى ان انا باقوم بالبحث عن الاسم داخل الجدول الثانى وبناء عليه يقوم بئحضار البيانات انا ماليش دخل بالرقم كل الى انا محتاجو انو يظهرلى بيانات الاسم من الجدولين
يمكنك أن تقرأ البيانات الخاصة بالعمود االموجود به الاسماء لا غير و تحوله الي مصفوفة


PHP كود :
' تعريف الجدول
        Dim dt As DataTable
        ' 
تعريف اسم العمود المراد استرجاع بياناته
        Dim columnName 
As String "إسم العمود المراد استرجاع بياناته"

 
       ' الحصول علي مصفوفة هذا العمود
        Dim names = dt.AsEnumerable().Select(Function(r) r.Field(Of String)(columnName)).ToArray()

        ' 
يمكنك استخدام الهاش ست لضمان عدم تكرار المدخلات
        Dim hash 
As HashSet(Of String) = New HashSet(Of String)()
 
       ' تعبئة الهاش 
        For Each name As String In names
            hash.Add(name)
        Next

        ' 
استخدم الهاش في تعبئة الكومبوبوكس

        For Each s 
As String In hash
            ComboBox1
.Items.Add(s)
 
       Next 


علي فكرة يمكنك استخدام نفس الاسلوب مع كل عمود موجود في Table الأصلي ثم تبني DataTable جديد و تضيف له بيانات مصفوفة كل عمود علي هيئة عمود جديد و بهذا تكون تخلصت من التكرار
اخى الكريم silverlight اولا شكرا لك ثانيا
وانا اسف دائما ردودك صعبة الفهم اخى انا لسه باول الطريق ما افهم الكلام الكبير ده
وانا اسف تانى مره ممكن تفهمنى ايه المعنى وايه الفكرة
السلام عليكم...

عندما تستخدم جملة استعلام بهذا الشكل:
كود :
SELECT * FROM [hagz1],[hagz2] WHERE [studntname] = @name

دون تحديد علاقة بين الجدولين، فأنت تلقائياً تنشئ علاقة من النوع Cross Join أي علاقة تقاطع بين الجدولين حيث يتم ربط كل سجل من الجدول الأول بجميع السجلات من الجدول الثاني (لأن محرك قواعد البيانات في هذه الحالة لا يعرف كيف يربط بين السجلات). عدد السجلات الناتجة سيكون حاصل ضرب عدد السجلات المسترجعة من الجدولين. فإذا مثلاً أعاد الاستعلام سجلين من الجدول الأول و ثلاثة سجلات من الجدول الثاني فإن الناتج سيكون ستة سجلات (2 × 3).

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


كود :
SELECT * FROM hagz1
INNER JOIN hagz2 ON hagz1.student_id = hagz2.student_id
WHERE studntname = @name

موضوع علاقات الربط موسع قليلاً، و لكن أساسياته متشابهة في كل قواعد البيانات.

نرجو الاستفادة و السلام.
اخى الكريم ناجى ابراهيم نفس المشكلة يتم التكرار مع العلم اى اعمل على قاعدة بيانات sql server

هذا هو الكود

PHP كود :
Using DataAdapter1 As New SqlDataAdapter(" SELECT * FROM hagz1 INNER JOIN hagz2 ON hagz1.idtet = hagz2.idtet WHERE hagz2.studntname = @name "con)
            
DataAdapter1.SelectCommand.Parameters.AddWithValue("@name"txt.Text)
            
Using DataTable As New DataTable
                DataAdapter1
.Fill(DataTable)
                
DataGridView1.DataSource DataTable
            End Using
        End Using 
جدول hagz1

[attachment=9213]

جدول hagz2

[attachment=9214]
السلام عليكم 
نرجع الى اصل الحكاية من البداية
عند تصميم قاعدة البيانات يتم تقسيم البيانات الى عدة جدوال وهى فى الاصل جدول واحد
مثلا  بيانات الطالب الرقم الاسم تاريخ الميلاد العنوان رقم المادة اسم المادة الفترة النهائى والمجموع
منعا للتكرار يتم فصل البيانات الى جدولين
 جدول طلبة 
الرقم الاسم تاريخ الميلاد العنوان
جدول النتائج
رقم المادة اسم المادة الفترة النهائى والمجموع
ويظهر هنا سوال كيف يتم معرفة نتيجة المادة لاى طالب فيتم اضافة رقم الطالب لجدول النتائج
جدول النتائج
رقم الطالب رقم المادة اسم المادة الفترة النهائى والمجموع
ارجو ان اكون وضحت
اخى الكريم والعزيز بارك الله فيك يارب وازادك من علمه
لاكن انت فهمت مشكلتى بالطريقة الخاظئة انا لا اريد اسم الطالب فقط انا اريد عند البحث فى الجدولين مثلا يقوم باحضار
بيانات الطالب من الجدول الثانى وبيانات المدرس فى الجدول الاول مع العلم انا اقوم بحفظ رقم المدرس فى كلا الاثنين مثل ما موضع فى صور الجداول

بمعنى مثلا الطالب (احمد ) تم شراء (مزكرة لغة عربية) من المدرس(محمد)
بوجد بيانات مثل هذا واكثر فى الجداول اريد احضار اسم الطالب احمد مثلا عند البحث عنه فى مربع النص مع العلم انلا لست عامل علاقات بين الجدولين غير بالكود فقط

اخوانى الاعزاء شكرا جزيلا لكم لاكن المشكلة تم حلها
لاكن ظهرت لى مشكلة اخرى ما اعرف ما هى
بعد ما قمت بعمل علاقة بين الجدولين فى قاعدة البيانات

[attachment=9218]