• 0
mkyh86

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

سؤال

السلام عليكم

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

 

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

id

fname

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

id

salary

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

 

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

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

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

10 إجابة على هذا السؤال .

  • 0

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

 

استخدم جملة 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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

        Dim sql As String = _            " SELECT *      " & _            " FROM [table1]     " & _            "               " & _            " INNER JOIN [table2]               " & _            " ON ([table2].[id] = [table1].[id])    " & _            "               " & _            " WHERE ([table2].[salary] > 10000) "
تم تعديل بواسطه vbnetvbnet
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

إذا كنت تستخدم داتاسيت جاهزة بالبيانات لديك فإليك مثال على طلبك، حاولت فيه التبسيط قدر المستطاع فقط أضف بوتون باسم 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
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

 

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

إذا كنت تستخدم داتاسيت جاهزة بالبيانات لديك فإليك مثال على طلبك، حاولت فيه التبسيط قدر المستطاع فقط أضف بوتون باسم 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
الله يوفقك

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

 

استخدم جملة 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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انا اؤيد طريقة ِ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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

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

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

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

فما هو الحل

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

             
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بامكانك استعمال 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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .