الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الاستعلام مع dataset

مغلقمُجاب
بدأه mkyh86 في 10 مارس 2014 · 10 رد · 1,513 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لو كان لدي داتاسيت تحتوي على جدولين واريد استرجع القيم الناتجة من الربط منهم من خلال اجراء استعلام بين جداول الداتاسيت

 

جدول 1 داخل الداتاسيت

id

fname

جدول 2 داخل الداتاسيت

id

salary

اريد ان اربطهم واسترجع الراتب الذي اعلى من 10000

 

يرجى المساعدة

مع الشكر والتقدير

#2

Dim SQLstr As String = "SELECT t1.id,t1.fname,t2.salary FROM T1 ,t2 where t2.salary > 10000"

#3

طريقة أخرى للإستعلام باستخدام INNER JOIN

        Dim sql As String = _
            " SELECT *      " & _
            " FROM [table1]     " & _
            "               " & _
            " INNER JOIN [table2]               " & _
            " ON ([table2].[id] = [table1].[id])    " & _
            "               " & _
            " WHERE ([table2].[salary] > 10000) "

تم تعديل هذه المشاركة بواسطة vbnetvbnet في 14 مارس 2014 في 22:09

.

أقوال مميزة من منتدى الفريق العربي للبرمجة (قيد التحديث)

 

الأستاذ: محمد طلال بدوي كتب:

إن صحبة الناجحين تصيب بعدوى النجاح، ويا لها من عدوى جميلة، تشعرك بجو من الحماسة والمنافسة، وتبقيك مشتعلا في بحث مستمر عن المراكز الأولى.

الدكتورة: زهرة (أم عهود) كتب:

والله لا نريد من هذه الدنيا شيء إلا ان نكون اخوة متحابين في الله يجمعنا طلب العلم ومساعدة الآخرين لوجه الله تعالى.

.
#4

إذا كنت تستخدم داتاسيت جاهزة بالبيانات لديك فإليك مثال على طلبك، حاولت فيه التبسيط قدر المستطاع فقط أضف بوتون باسم Button1 وجرب المثال

(ستلاحظ وجود إجراء CreateDataSet لإنشاء داتاسيت برمجياً مع تعبئتة بجداول وبيانات وهو فقط لتجربة المثال ولا يلزمك في النهاية)

(لا تنس بعد التجربة أت تستبدل اسم dataset1 باسم الداتاسيت التي لديك والاستغناء عن الاجراء CreateDataSet)

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '' استخدم اسم الداتاست التي لديك بدلا من
        '' dataset1
        '' واستغن عن الدالة
        '' CreateDataSet
        '' مع حذف السطر التالي
        Dim dataset1 As DataSet = CreateDataSet() '' إنشاء داتاست للتجربة


        '' الذي يهمك من هنا ===============
        Dim resultRows() As DataRow = dataset1.Tables("table2").Select("salary > 10000")

        For i = 0 To resultRows.Count - 1
            Dim fname As String = dataset1.Tables("table1").Select("id=" & resultRows(i).Item("id"))(0).Item("fname")
            Dim salary As String = dataset1.Tables("table2").Select("id=" & resultRows(i).Item("id"))(0).Item("salary")
            ''
            '' عرض السطر الناتج بشكل منسق
            MsgBox(String.Format( _
                "Name: " & vbTab & "{1}{0}" & _
                "Salary: " & vbTab & "{2}{0}" _
                , vbNewLine, fname, salary))
        Next
        '' إلى هنا ===============


    End Sub
دالة CreateDataSet لإنشاء داتاست برمجياً

    '' دالة إنشاء داتاست برمجياً وتعبئتها بجداول وبيانات للتجربة ===============================
    Private Function CreateDataSet() As DataSet
        Dim ds As New DataSet

        ds.Tables.Add("table1")
        ds.Tables("table1").Columns.Add(New DataColumn("id", GetType(Integer)))
        ds.Tables("table1").Columns.Add(New DataColumn("fname", GetType(String)))
        ds.Tables("table1").Rows.Add(1, "ahmed")
        ds.Tables("table1").Rows.Add(2, "salem")
        ds.Tables("table1").Rows.Add(3, "wael")
        ds.Tables("table1").Rows.Add(4, "nabil")
        ds.Tables("table1").Rows.Add(5, "hesham")

        ds.Tables.Add("table2")
        ds.Tables("table2").Columns.Add(New DataColumn("id", GetType(Integer)))
        ds.Tables("table2").Columns.Add(New DataColumn("salary", GetType(Double)))
        ds.Tables("table2").Rows.Add(1, 8252.23)
        ds.Tables("table2").Rows.Add(2, 11254.57)
        ds.Tables("table2").Rows.Add(3, 7253.89)
        ds.Tables("table2").Rows.Add(4, 10120.11)
        ds.Tables("table2").Rows.Add(5, 9802.32)

        Return ds
    End Function
الله يوفقك

تم تعديل هذه المشاركة بواسطة vbnetvbnet في 14 مارس 2014 في 22:23

1

.

أقوال مميزة من منتدى الفريق العربي للبرمجة (قيد التحديث)

 

الأستاذ: محمد طلال بدوي كتب:

إن صحبة الناجحين تصيب بعدوى النجاح، ويا لها من عدوى جميلة، تشعرك بجو من الحماسة والمنافسة، وتبقيك مشتعلا في بحث مستمر عن المراكز الأولى.

الدكتورة: زهرة (أم عهود) كتب:

والله لا نريد من هذه الدنيا شيء إلا ان نكون اخوة متحابين في الله يجمعنا طلب العلم ومساعدة الآخرين لوجه الله تعالى.

.
#5

مشكور على الرد

ولكني اريد ان اسوي استعلام بين الجدولين بدول استخدام for  و if يعني اربط الجدول الاول من الداتاسين مع الجدول الثاني من الداتاسيت من خلال شفرة sql انا حاولت اربط الجدولين باستخدام relation ولكن تستخدم فقط مفتاح ربط واحد وكذلك تستخدم في حالة المفتاح نفس الاسم للجدولين

فهل هناك طريقة للربط بدون استخدام الfor

 

مع الشكر والتقدير

vbnetvbnet كتب:

إذا كنت تستخدم داتاسيت جاهزة بالبيانات لديك فإليك مثال على طلبك، حاولت فيه التبسيط قدر المستطاع فقط أضف بوتون باسم Button1 وجرب المثال
(ستلاحظ وجود إجراء CreateDataSet لإنشاء داتاسيت برمجياً مع تعبئتة بجداول وبيانات وهو فقط لتجربة المثال ولا يلزمك في النهاية)
(لا تنس بعد التجربة أت تستبدل اسم dataset1 باسم الداتاسيت التي لديك والاستغناء عن الاجراء CreateDataSet)

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '' استخدم اسم الداتاست التي لديك بدلا من
        '' dataset1
        '' واستغن عن الدالة
        '' CreateDataSet
        '' مع حذف السطر التالي
        Dim dataset1 As DataSet = CreateDataSet() '' إنشاء داتاست للتجربة


        '' الذي يهمك من هنا ===============
        Dim resultRows() As DataRow = dataset1.Tables("table2").Select("salary > 10000")

        For i = 0 To resultRows.Count - 1
            Dim fname As String = dataset1.Tables("table1").Select("id=" & resultRows(i).Item("id"))(0).Item("fname")
            Dim salary As String = dataset1.Tables("table2").Select("id=" & resultRows(i).Item("id"))(0).Item("salary")
            ''
            '' عرض السطر الناتج بشكل منسق
            MsgBox(String.Format( _
                "Name: " & vbTab & "{1}{0}" & _
                "Salary: " & vbTab & "{2}{0}" _
                , vbNewLine, fname, salary))
        Next
        '' إلى هنا ===============


    End Sub
دالة CreateDataSet لإنشاء داتاست برمجياً
    '' دالة إنشاء داتاست برمجياً وتعبئتها بجداول وبيانات للتجربة ===============================
    Private Function CreateDataSet() As DataSet
        Dim ds As New DataSet

        ds.Tables.Add("table1")
        ds.Tables("table1").Columns.Add(New DataColumn("id", GetType(Integer)))
        ds.Tables("table1").Columns.Add(New DataColumn("fname", GetType(String)))
        ds.Tables("table1").Rows.Add(1, "ahmed")
        ds.Tables("table1").Rows.Add(2, "salem")
        ds.Tables("table1").Rows.Add(3, "wael")
        ds.Tables("table1").Rows.Add(4, "nabil")
        ds.Tables("table1").Rows.Add(5, "hesham")

        ds.Tables.Add("table2")
        ds.Tables("table2").Columns.Add(New DataColumn("id", GetType(Integer)))
        ds.Tables("table2").Columns.Add(New DataColumn("salary", GetType(Double)))
        ds.Tables("table2").Rows.Add(1, 8252.23)
        ds.Tables("table2").Rows.Add(2, 11254.57)
        ds.Tables("table2").Rows.Add(3, 7253.89)
        ds.Tables("table2").Rows.Add(4, 10120.11)
        ds.Tables("table2").Rows.Add(5, 9802.32)

        Return ds
    End Function
الله يوفقك

 

#6 أفضل إجابة

الموضوع أبسط من ذلك أخى

 

استخدم جملة Linq

مثال

Dim qry As IEnumerable(Of DataRow) = From row In ds.Tables("tbl1").AsEnumerable(), row2 In ds.Tables("tbl2").AsEnumerable()
                                              Where (row.Field(Of Integer)("id") = row2.Field(Of Integer)("id")) And row2.Field(Of Integer)("sallary") > 1000
                                              Select row2

ابحث عن Linq to dataset

او ضع ما تريده بالتفصيل لاعطيك الجمله التى تريدها

1

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#7

مع الشكر والتقدير

وكيف اخزن الناتج في الداتاتيبل وثم اعرضة في الكردفيو

Abo_Yossof كتب:

الموضوع أبسط من ذلك أخى

 

استخدم جملة Linq

مثال

Dim qry As IEnumerable(Of DataRow) = From row In ds.Tables("tbl1").AsEnumerable(), row2 In ds.Tables("tbl2").AsEnumerable()
                                              Where (row.Field(Of Integer)("id") = row2.Field(Of Integer)("id")) And row2.Field(Of Integer)("sallary") > 1000
                                              Select row2

ابحث عن Linq to dataset

او ضع ما تريده بالتفصيل لاعطيك الجمله التى تريدها

#8

انا اؤيد طريقة ِAbo_Yossof باستعمال Linq to Dataset 

اقتباس

 

 

وكيف اخزن الناتج في الداتاتيبل وثم اعرضة في الكردفيو

ليس هناك داعي لحفظ النتيجة في datatable

 

اذا افترضنا code كما استعمله Abo_Yossof

Dim qry As IEnumerable(Of DataRow) = From row In ds.Tables("tbl1").AsEnumerable(), row2 In ds.Tables("tbl2").AsEnumerable()
                                              Where (row.Field(Of Integer)("id") = row2.Field(Of Integer)("id")) And row2.Field(Of Integer)("sallary") > 1000
                                              Select row2
                                              
    Dim bs As New BindingSource
        bs.DataSource = qry.ToList
        DataGridView1.datasource = bs
1

Samir Ibrahim

VFP Blog

VB.NET Blog

#9

اشكركم على الرد وجزاكم الله خيراً

#10

السلام عليكم

طبقت الشفرة التالية

FinalDS.Tables.Add(dt_DB1)
        FinalDS.Tables.Add(dt_DB2)
        Dim qry As IEnumerable(Of DataRow) = From row In FinalDS.Tables(0).AsEnumerable(), row2 In FinalDS.Tables(1).AsEnumerable()
                                              Where (row.Field(Of Integer)(feildneeded.Text) = row2.Field(Of Integer)(FieldTo.Text))
        Select row

        Dim bs As New BindingSource
        bs.DataSource = qry.ToList

        Dd.DataSource = bs

ولكن الناتج يظهر الحقول

RowError, Rowstate, Table, HasError

ولا يظهر لي حقول البيانات

فما هو الحل

مع الشكر والتقدير

#11

بامكانك استعمال qty.CopyToDataTable ولكن هذا سوف لن يعطيك نتيجة صحيحة حيث انك لما عملت select row سوف تخنار الحقول من جدول واحد فقط وهي id و name ولن ياتي بي حقل salary

 

هذا الكود ياتيك بهم

        Dim qry = From t1 In ds.Tables(0), t2 In ds.Tables(1)
                     Where t1("id") = t2("id")
                     Select New With {.id=t1("id"),.name=t1("fname"),.salary=t2("salary")}
                     
        Dim bs As New BindingSource
        bs.DataSource = qry
        
        dataGridView1.DataSource = bs
1

Samir Ibrahim

VFP Blog

VB.NET Blog

هذا الموضوع مغلق.

مواضيع مشابهة