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

نسخة كاملة : [ تمّ الحل ] : البحث باسم صنف له عدة نوعيات
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السّلام عليكم و رحمة الله و بركاته
سادتي الأكارم
الرجاء التوجيه و المساعدة لحل هذه الإشكالية .. بارك الله فيكم و لكم مقدّمًَا ..
لديّ كومبوبوكس يتم تعبئته باسم اسم الصنف من جدول الأصناف ..
يتم إختيار اسم الصنف من هذا الكومبوبوكس فيتم تعبئة بعض البيانات التي تخص هذا الصنف بالتاكسات بوكس ..
إلى هنا الأمور كلّها تمام ..
المشكلة سادتي الأكارم ..
لما يكون للصنف الواحد عدة نوعيات أو ما يسمى ماركات ..
مثلا .. الصنف ( القهوة ) له عدة نوعيات : أرابيسكا - نيسكافيه - بنت الريف
بالكومبوبوكس ستظهر كلمة القهوة 3 مرات لأني تعمدت عدم إستعمال عبارة DISTINCT
لكن البيانات بالتاكسات بوكس تبقى دائما ثابته للصنف القهوة النوعية الأولى فقط
لو كانت :
أرابيسكا = 125.698
نيسكافيه = 145.698
بنت الريف = 168.954
لما أختار القهوة من الكومبوبوكس تظهر بالتاكسات بكس فقط : أرابيسكا و 125.698
حتى لو إخترت من الكومبوبكس القهوة الثانية فلا تتغير البيانات
بارك الله فيكم و لكم مقدما و جزاكم خير الجزاء
الكود المستعمل :
كود :
Private Sub CmbListItems_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbListItems.SelectedIndexChanged
       Try
           Dim Cmd_Pos As SqlCommand = New SqlCommand()
           Dim Reader_Pos As SqlDataReader = Nothing
           If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
           Conne_2019.Open()
           Dim Query_Pos As String = " SELECT * From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "'"
           Cmd_Pos = New SqlCommand(Query_Pos, Conne_2019)
           Reader_Pos = Cmd_Pos.ExecuteReader()
           While Reader_Pos.Read
               If Reader_Pos IsNot Nothing Then
                   Me.TxtItemName.Text = Reader_Pos.Item("ITEMS_Name")
                   Me.TxtItemQualite.Text = Reader_Pos.Item("ITEMS_Qualite")
                   Me.CmbItemUnite.Text = Reader_Pos.Item("ITEMS_Unite")
                   Me.TxtItemStock.Text = Reader_Pos.Item("ITEMS_Stock")
                   Me.TxtItemPrice.Text = Reader_Pos.Item("ITEMS_Prix_Vente")
                   Me.TxtItemBarcode.Text = Reader_Pos.Item("ITEMS_Barcode")
               End If
           End While
           If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
       Catch ex As Exception
           MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
       End Try
   End Sub

تحياتي
السلام عليكم اخي عبد العزيز اتمنى انك بألف خير 

جرب ربط الكومبو بكس بقاعدة البيانات حيث كل  item  يتم ربطه بالمعرف الخاص به


PHP كود :
cmb.datasource dt
cmb
.DisplayMember="إسم الصنف"
cmb.ValueMember=id 
السّلام عليكم و رحمة الله و بركاته
بارك الله فيك و لك و جزاك خير الجزاء أخي الكريم العربي على المساعدة
للأسف لم تضبط يا غالي ..
تحياتي
(13-12-19, 03:03 AM)عبد العزيز البسكري كتب : [ -> ]
السّلام عليكم و رحمة الله و بركاته
سادتي الأكارم
الرجاء التوجيه و المساعدة لحل هذه الإشكالية .. بارك الله فيكم و لكم مقدّمًَا ..
لديّ كومبوبوكس يتم تعبئته باسم اسم الصنف من جدول الأصناف ..
يتم إختيار اسم الصنف من هذا الكومبوبوكس فيتم تعبئة بعض البيانات التي تخص هذا الصنف بالتاكسات بوكس ..
إلى هنا الأمور كلّها تمام ..
المشكلة سادتي الأكارم ..
لما يكون للصنف الواحد عدة نوعيات أو ما يسمى ماركات ..
مثلا .. الصنف ( القهوة ) له عدة نوعيات : أرابيسكا - نيسكافيه - بنت الريف
بالكومبوبوكس ستظهر كلمة القهوة 3 مرات لأني تعمدت عدم إستعمال عبارة DISTINCT
لكن البيانات بالتاكسات بوكس تبقى دائما ثابته للصنف القهوة النوعية الأولى فقط
لو كانت :
أرابيسكا = 125.698
نيسكافيه = 145.698
بنت الريف = 168.954
لما أختار القهوة من الكومبوبوكس تظهر بالتاكسات بكس فقط : أرابيسكا و 125.698
حتى لو إخترت من الكومبوبكس القهوة الثانية فلا تتغير البيانات
بارك الله فيكم و لكم مقدما و جزاكم خير الجزاء
الكود المستعمل :
كود :
Private Sub CmbListItems_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbListItems.SelectedIndexChanged
       Try
           Dim Cmd_Pos As SqlCommand = New SqlCommand()
           Dim Reader_Pos As SqlDataReader = Nothing
           If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
           Conne_2019.Open()
           Dim Query_Pos As String = " SELECT * From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "'"
           Cmd_Pos = New SqlCommand(Query_Pos, Conne_2019)
           Reader_Pos = Cmd_Pos.ExecuteReader()
           While Reader_Pos.Read
               If Reader_Pos IsNot Nothing Then
                   Me.TxtItemName.Text = Reader_Pos.Item("ITEMS_Name")
                   Me.TxtItemQualite.Text = Reader_Pos.Item("ITEMS_Qualite")
                   Me.CmbItemUnite.Text = Reader_Pos.Item("ITEMS_Unite")
                   Me.TxtItemStock.Text = Reader_Pos.Item("ITEMS_Stock")
                   Me.TxtItemPrice.Text = Reader_Pos.Item("ITEMS_Prix_Vente")
                   Me.TxtItemBarcode.Text = Reader_Pos.Item("ITEMS_Barcode")
               End If
           End While
           If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
       Catch ex As Exception
           MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
       End Try
   End Sub

تحياتي

غير التاكست TxtItemQualite الى كومبوبكس CmbItemQualite
كود :
   Private Sub CmbListItems_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbListItems.SelectedIndexChanged
       Try
           Using da As New SqlDataAdapter("SELECT ITEMS_Qualite From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "'", Conne_2019)
               Dim dt As New DataTable
               da.Fill(dt)
               CmbItemQualite.DataSource = dt
               CmbItemQualite.DisplayMember = "ITEMS_Qualite"
           End Using
       Catch ex As Exception
           MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
       End Try
   End Sub

   Private Sub CmbItemQualite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbItemQualite.SelectedIndexChanged
       Try
           Dim Query_Pos As String = " SELECT * From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "' And ITEMS_Qualite = '" & CmbItemQualite.Text.Trim & "'"
           Using da As New SqlDataAdapter(Query_Pos, Conne_2019)
               Dim dt As New DataTable
               If da.Fill(dt) > 0 Then
                   Me.CmbItemUnite.Text = dt.Rows(0).Item("ITEMS_Unite")
                   Me.TxtItemStock.Text = dt.Rows(0).Item("ITEMS_Stock")
                   Me.TxtItemPrice.Text = dt.Rows(0).Item("ITEMS_Prix_Vente")
                   Me.TxtItemBarcode.Text = dt.Rows(0).Item("ITEMS_Barcode")
               End If
           End Using
       Catch ex As Exception
           MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
       End Try
   End Sub
السّلام عليكم و رحمة الله و بركاته
سلمت أخي الحبيب Smalw و سلم يمينك و دينك
بارك الله فيك و لك و جزاك خير الجزاء و أحسن إليك مثلما أحسنت بهذا العمل و هذه المساعدة المميّزة
بعدما يئست من الحل و قمت بدمج اسم الصنف مع النوعية بحقل واحد
جاء الخلاص و الفرج من عند الله ثم من عندك أخي الغالي
حل أكثر من الرائع و يفي بالغرض و هو المطلوب بالذات
تحياتي واحتراماتي و تقييماتي
السلام عليكم اخي عبد العزيز
انت تستخدم Combobox1.text في البحث وبما ان الاسم قهوة مكرر فالنتيجة واحدة وهي اول قيمة اي اول سجل 
لان القيمة الموجودة في الكومبو هي نص وكلمة قهوة هي نفسها وانت تجلب بالنص 
تحتاج الى البحث باسم المعرف ID  بحيث يساوي  Combobox1.SelectedValue اي ان جملة الاستعلام ستكون هكذا
كود :
"select * from From TBL_ITEMS Where Itm_id = " & ComboBox1.SelectedValue, con
السّلام عليكم و رحمة الله و بركاته
أشكرك جزيل الشكر أخي الغالي " ابراهيم " على الشّرح و التعقيب و التّوضيح
بارك الله فيك يا طيّب
فكّرت في هذا الحل و حلول أخرى لكن لم أتوصّل إلى النتيجة المرجوّة
المشكلة أخي ابراهيم
أنّ هذه العملية كتجربة منّي لفاتورة مبيعات فوريّة
و البحث باسم الصنف إجباري مع الإكمال التلقائي للكومبوبوكس
أمّا استعمال رقم الإيدي للأصناف وسط مئات الأرقام و مئات أسماء الأصناف قد لا يتذكّره البائع
تحياتي واحتراماتي لشخصك القدير
السلام عليكم 
اخي عبد العزيز يبقى الكومبو يعرض اسماء المنتجات كما هي  DisplayMember
ولكن البحث سيأخذ ال ValueMember اي القيمة التي ستعود الى ال Id وهي غير ظاهرة في الكومبو بوكس
لانك عندما تملا الكومبو من الجدول سيأخذ قيمتين واحدة تعرض  هي  DisplayMember واخرى مخفية هي ValueMember
تقصد أخي ابراهيم سيكون بهذا الشكل لو سمحت ..
كود :
   Private Sub Fill_Table_Items()

       Dim InfoTable = New DataTable
       Dim InfoAdapter = New SqlDataAdapter("SELECT * From TBL_ITEMS Where ITEMS_Id = " & ComboBox1.SelectedValue, Conne_2019)
       InfoAdapter.Fill(InfoTable)

       If InfoTable.Rows.Count > 0 Then
           With Me.ComboBox1
               .DataSource = InfoTable
               .DisplayMember = "ITEMS_Name"
           End With
       End If
       Conne_2019.Close()

   End Sub
السلام عليكم اخي عبد العزيز
نقوم بعمل صب لاملاء الكومبوبوكس باسماء المنتجات مثل هذا ولكن حسب الجدول وحقل المعرف والاسم الذي عندك
كود :
 Public Sub fillcmb_from_Items(ByVal cmb As ComboBox)
       'load Items in Combobox
       Dim dt As New DataTable
       Dim da As New OleDbDataAdapter
       dt.Clear()
       da = New OleDbDataAdapter("Select * from Items ", con)
       da.Fill(dt)
       If dt.Rows.Count > 0 Then
           cmb.DataSource = dt
           cmb.DisplayMember = "Itm_Name"
           cmb.ValueMember = "Itm_ID"
       Else
           cmb.DataSource = Nothing
       End If
   End Sub
ثم ننادي عليه في حدث فورم لود ونضع له الباراميتر وهو اسم الكومبو الذي سوف يملأ
لاحظ هناك قيمتين واحدة للعرض DisplayMember اسماء المنتجات والثانية ValueMember وهي للاي دي وهي غير ظاهرة
وفي حدث ComboBox1_SelectedIndexChanged ننشئ جملة البحث بحيث عندما نختار الاسم من الكومبو بوكس يكون الشرط هو ان الاي دي يساوي ال ValueMember  أي  Combobo1.selectedvalue لان كل عنصر مرتبط به وهنا هو الايدي
وبعدها تقوم بعرض النتائج في مربعات النصوص هذه هي الفكرة
افصل بين كود  تعبئة الكومبوبوكس  وكود البحث
ملاحظة اخرى اجعل القيمة الافتراضية للكومبوبوكس في جدث فورم لود بـ  -1 اي لاظهور لاي اسم منتج
كود :
Combobo1.selectedvalue=-1
الصفحات : 1 2