تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] مشكلة فى البحث بين جدولين يتم تكرار البيانات عند استدعائها
#1
بسم الله الرحمن الرحيم

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

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

هذا هو كود البحث
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 
يارب اذا اعطيتني علما...اعطني معه حكمه...واذا اعطيتني مالا....اعطيني معها كرما...واذا اعطيتني قوه...اعطني معها رحمه...واذا اعطيتني سلطه...اعطني معها عدلا...واذا اعطيتني مسئوليه...اعطيني معها امانه...واذا اعطيتني نجاحا...اعطني معها تواضعا...اللهم امين
الرد }}}
تم الشكر بواسطة:
#2
Using DataAdapter1 As New SqlDataAdapter("SELECT * FROM [hagz1],[hagz2] WHERE [studntname] = @name ", con)
يجب وجود علاقة بين الجدولين اى حقل رقم الطالب ويكون موجدو فى الجدولين مثل جدول الطلبة والنتائج
select * from student,result
where student.nostudent=result.nostudent
من اعمالنا نخطى ومن اخطائنا نتعلم ولاشى مستحيل
الرد }}}
تم الشكر بواسطة:
#3
اخى الكريم شكرا لاكن لم تحل المشكلة المشكلة وهى ان انا باقوم بالبحث عن الاسم داخل الجدول الثانى وبناء عليه يقوم بئحضار البيانات انا ماليش دخل بالرقم كل الى انا محتاجو انو يظهرلى بيانات الاسم من الجدولين
يارب اذا اعطيتني علما...اعطني معه حكمه...واذا اعطيتني مالا....اعطيني معها كرما...واذا اعطيتني قوه...اعطني معها رحمه...واذا اعطيتني سلطه...اعطني معها عدلا...واذا اعطيتني مسئوليه...اعطيني معها امانه...واذا اعطيتني نجاحا...اعطني معها تواضعا...اللهم امين
الرد }}}
تم الشكر بواسطة:
#4
يمكنك أن تقرأ البيانات الخاصة بالعمود االموجود به الاسماء لا غير و تحوله الي مصفوفة


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 جديد و تضيف له بيانات مصفوفة كل عمود علي هيئة عمود جديد و بهذا تكون تخلصت من التكرار
الرد }}}
تم الشكر بواسطة:
#5
اخى الكريم silverlight اولا شكرا لك ثانيا
وانا اسف دائما ردودك صعبة الفهم اخى انا لسه باول الطريق ما افهم الكلام الكبير ده
وانا اسف تانى مره ممكن تفهمنى ايه المعنى وايه الفكرة
يارب اذا اعطيتني علما...اعطني معه حكمه...واذا اعطيتني مالا....اعطيني معها كرما...واذا اعطيتني قوه...اعطني معها رحمه...واذا اعطيتني سلطه...اعطني معها عدلا...واذا اعطيتني مسئوليه...اعطيني معها امانه...واذا اعطيتني نجاحا...اعطني معها تواضعا...اللهم امين
الرد }}}
تم الشكر بواسطة:
#6
السلام عليكم...

عندما تستخدم جملة استعلام بهذا الشكل:
كود :
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

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

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة:
#7
اخى الكريم ناجى ابراهيم نفس المشكلة يتم التكرار مع العلم اى اعمل على قاعدة بيانات 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 
يارب اذا اعطيتني علما...اعطني معه حكمه...واذا اعطيتني مالا....اعطيني معها كرما...واذا اعطيتني قوه...اعطني معها رحمه...واذا اعطيتني سلطه...اعطني معها عدلا...واذا اعطيتني مسئوليه...اعطيني معها امانه...واذا اعطيتني نجاحا...اعطني معها تواضعا...اللهم امين
الرد }}}
تم الشكر بواسطة:
#8
جدول hagz1

   

جدول hagz2

   
يارب اذا اعطيتني علما...اعطني معه حكمه...واذا اعطيتني مالا....اعطيني معها كرما...واذا اعطيتني قوه...اعطني معها رحمه...واذا اعطيتني سلطه...اعطني معها عدلا...واذا اعطيتني مسئوليه...اعطيني معها امانه...واذا اعطيتني نجاحا...اعطني معها تواضعا...اللهم امين
الرد }}}
تم الشكر بواسطة:
#9
السلام عليكم 
نرجع الى اصل الحكاية من البداية
عند تصميم قاعدة البيانات يتم تقسيم البيانات الى عدة جدوال وهى فى الاصل جدول واحد
مثلا  بيانات الطالب الرقم الاسم تاريخ الميلاد العنوان رقم المادة اسم المادة الفترة النهائى والمجموع
منعا للتكرار يتم فصل البيانات الى جدولين
 جدول طلبة 
الرقم الاسم تاريخ الميلاد العنوان
جدول النتائج
رقم المادة اسم المادة الفترة النهائى والمجموع
ويظهر هنا سوال كيف يتم معرفة نتيجة المادة لاى طالب فيتم اضافة رقم الطالب لجدول النتائج
جدول النتائج
رقم الطالب رقم المادة اسم المادة الفترة النهائى والمجموع
ارجو ان اكون وضحت
من اعمالنا نخطى ومن اخطائنا نتعلم ولاشى مستحيل
الرد }}}
تم الشكر بواسطة:
#10
اخى الكريم والعزيز بارك الله فيك يارب وازادك من علمه
لاكن انت فهمت مشكلتى بالطريقة الخاظئة انا لا اريد اسم الطالب فقط انا اريد عند البحث فى الجدولين مثلا يقوم باحضار
بيانات الطالب من الجدول الثانى وبيانات المدرس فى الجدول الاول مع العلم انا اقوم بحفظ رقم المدرس فى كلا الاثنين مثل ما موضع فى صور الجداول

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

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

   
يارب اذا اعطيتني علما...اعطني معه حكمه...واذا اعطيتني مالا....اعطيني معها كرما...واذا اعطيتني قوه...اعطني معها رحمه...واذا اعطيتني سلطه...اعطني معها عدلا...واذا اعطيتني مسئوليه...اعطيني معها امانه...واذا اعطيتني نجاحا...اعطني معها تواضعا...اللهم امين
الرد }}}
تم الشكر بواسطة:



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


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