تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] إضافة مربع بحث للفورم
#1
Question 
السلام عليكم ورحمة الله تعالى وبركاته
لدي برنامج مبيعات، وأريد إضافة مربعي بحث؛ إحداهما للباركود (أرقام فقط) والآخر للاسم (أرقام وحروف)، فهل أجد لديكم كودا يفي بالغرض؟
برنامج فيجوال ستوديو 2012، وقاعدة بيانات من نوع أكسس 2010
الرد }}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

قم بتعديل الكود التالي ليناسب برنامجك 
هذا يسمى كود البحث المتعدد ويعتبر اسرع كود للبحث عن نتيجة ما في البيانات التي تريد البحث فيها
سواء كنت تستخدم البرنامج على جهاز كمبيوتر رئيسي أو فرعي(ستحصل على النتيجة بنفس السرعة)
وسواء تبحث عن رقم الفاتورة أو اسم العميل بالعربي أو الانكليزي :

كود :
    Dim Con As New OleDb.OleDbConnection


    Dim Adapter1 As OleDb.OleDbDataAdapter
    Dim DtAct1 As New DataTable
    Dim Dx As New DataGridView     '  جدول افتراضي

    Sub FillDGV()

        Con.ConnectionString = ("Provider=Microsoft.Ace.Oledb.12.0; Data Source =" & Application.StartupPath &
                "\Activities.accdb;Jet OLEDB:Database Password=")
        Con.Open()

        Adapter1 = New OleDb.OleDbDataAdapter("Select Inv_No, CustomerNameAr, CustomerNameEn, Date From Invoices", Con)
        Adapter1.Fill(DtAct1)

        Dx.DataSource = DtAct1

        Con.Close()
    End Sub

    Sub SearchData()        '  البحث ضمن الداتاجريد
        Dim dv As DataView = DtAct1.DefaultView

        If Len(TextBox1.Text) <= 2 Then
            dv.RowFilter = "Inv_No Like '%12A12%'"   ' قيمة غير موجودة
            DataGridView1.DataSource = dv
            Exit Sub
            ' اذا كانت الادخال أقل من ثلاث أحرف فلا يتم البحث ويفرغ الداتاجريد من البيانات
        End If

        If RadioButton1.Checked = True Then
            ' Invoice No
            dv.RowFilter = "Inv_No Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton2.Checked = True Then
            ' Custmer Name (Arabic Name)
            dv.RowFilter = "CustomerNameAr Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton3.Checked = True Then
            '  Custmer Name (English Name)
            dv.RowFilter = "CustomerNameEn Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton4.Checked = True Then
            ' ALL
            dv.RowFilter = "Inv_No+CustomerNameAr+CustomerNameEn Like '%" & TextBox1.Text & "%'"
        End If

        DataGridView1.DataSource = dv

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FillDGV()
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        SearchData()
    End Sub

قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}
تم الشكر بواسطة: أحمد الغرباوي
#3
(08-03-22, 01:04 AM)Taha Okla كتب : وعليكم السلام ورحمة الله وبركاته

قم بتعديل الكود التالي ليناسب برنامجك 
هذا يسمى كود البحث المتعدد ويعتبر اسرع كود للبحث عن نتيجة ما في البيانات التي تريد البحث فيها
سواء كنت تستخدم البرنامج على جهاز كمبيوتر رئيسي أو فرعي(ستحصل على النتيجة بنفس السرعة)
وسواء تبحث عن رقم الفاتورة أو اسم العميل بالعربي أو الانكليزي :

كود :
    Dim Con As New OleDb.OleDbConnection


    Dim Adapter1 As OleDb.OleDbDataAdapter
    Dim DtAct1 As New DataTable
    Dim Dx As New DataGridView     '  جدول افتراضي

    Sub FillDGV()

        Con.ConnectionString = ("Provider=Microsoft.Ace.Oledb.12.0; Data Source =" & Application.StartupPath &
                "\Activities.accdb;Jet OLEDB:Database Password=")
        Con.Open()

        Adapter1 = New OleDb.OleDbDataAdapter("Select Inv_No, CustomerNameAr, CustomerNameEn, Date From Invoices", Con)
        Adapter1.Fill(DtAct1)

        Dx.DataSource = DtAct1

        Con.Close()
    End Sub

    Sub SearchData()        '  البحث ضمن الداتاجريد
        Dim dv As DataView = DtAct1.DefaultView

        If Len(TextBox1.Text) <= 2 Then
            dv.RowFilter = "ActivityNo Like '%12A12%'"   ' قيمة غير موجودة
            DataGridView1.DataSource = dv
            Exit Sub
            ' اذا كانت الادخال أقل من ثلاث أحرف فلا يتم البحث ويفرغ الداتاجريد من البيانات
        End If

        If RadioButton1.Checked = True Then
            ' Invoice No
            dv.RowFilter = "BusinessCategory Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton2.Checked = True Then
            ' Custmer Name (Arabic Name)
            dv.RowFilter = "BusinessSubCategory Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton3.Checked = True Then
            '  Custmer Name (English Name)
            dv.RowFilter = "Activity Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton4.Checked = True Then
            ' ALL
            dv.RowFilter = "Inv_No+CustomerNameAr+CustomerNameEn+Date Like '%" & TextBox1.Text & "%'"
        End If

        DataGridView1.DataSource = dv

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FillDGV()
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        SearchData()
    End Sub
بارك الله فيك وشكرًا لك، لدي مشكلة في هدا الجزء فقط:

 '
 If BtnSearchBarcode.Checked = True Then
            ' باركود المنتج
            dv.RowFilter = "ItemBarcode Like '%" & TextSearch.Text & "%'"

'
فتظهر الرسالة التالية:

Cannot perform 'Like' operation on System.Int16 and System.String.

وقد قمت بحذف 
(  '    ' اذا كانت الادخال أقل من ثلاث أحرف فلا يتم البحث ويفرغ الداتاجريد من البيانات)
فهل هذا يؤثر على عمل الكود
الرد }}
تم الشكر بواسطة: رضوان الجماعي , رضوان الجماعي
#4
(08-03-22, 01:04 AM)Taha Okla كتب : وعليكم السلام ورحمة الله وبركاته

قم بتعديل الكود التالي ليناسب برنامجك 
هذا يسمى كود البحث المتعدد ويعتبر اسرع كود للبحث عن نتيجة ما في البيانات التي تريد البحث فيها
سواء كنت تستخدم البرنامج على جهاز كمبيوتر رئيسي أو فرعي(ستحصل على النتيجة بنفس السرعة)
وسواء تبحث عن رقم الفاتورة أو اسم العميل بالعربي أو الانكليزي :

كود :
    Dim Con As New OleDb.OleDbConnection


    Dim Adapter1 As OleDb.OleDbDataAdapter
    Dim DtAct1 As New DataTable
    Dim Dx As New DataGridView     '  جدول افتراضي

    Sub FillDGV()

        Con.ConnectionString = ("Provider=Microsoft.Ace.Oledb.12.0; Data Source =" & Application.StartupPath &
                "\Activities.accdb;Jet OLEDB:Database Password=")
        Con.Open()

        Adapter1 = New OleDb.OleDbDataAdapter("Select Inv_No, CustomerNameAr, CustomerNameEn, Date From Invoices", Con)
        Adapter1.Fill(DtAct1)

        Dx.DataSource = DtAct1

        Con.Close()
    End Sub

    Sub SearchData()        '  البحث ضمن الداتاجريد
        Dim dv As DataView = DtAct1.DefaultView

        If Len(TextBox1.Text) <= 2 Then
            dv.RowFilter = "ActivityNo Like '%12A12%'"   ' قيمة غير موجودة
            DataGridView1.DataSource = dv
            Exit Sub
            ' اذا كانت الادخال أقل من ثلاث أحرف فلا يتم البحث ويفرغ الداتاجريد من البيانات
        End If

        If RadioButton1.Checked = True Then
            ' Invoice No
            dv.RowFilter = "BusinessCategory Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton2.Checked = True Then
            ' Custmer Name (Arabic Name)
            dv.RowFilter = "BusinessSubCategory Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton3.Checked = True Then
            '  Custmer Name (English Name)
            dv.RowFilter = "Activity Like '%" & TextBox1.Text & "%'"
        ElseIf RadioButton4.Checked = True Then
            ' ALL
            dv.RowFilter = "Inv_No+CustomerNameAr+CustomerNameEn+Date Like '%" & TextBox1.Text & "%'"
        End If

        DataGridView1.DataSource = dv

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FillDGV()
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        SearchData()
    End Sub

الأخ Taha Okla بارك الله فيك وجعله في ميزان حسناتك، الكود يعمل على أكمل وجه
الرد }}
تم الشكر بواسطة: رضوان الجماعي , رضوان الجماعي
#5
السلام عليكم
الغاية من جعل الكود لا يبحث ولا يعطي نتيجة في حال كان عدد أحرف البحث أقل من ثلاث أحرف 
أن تجعل البرنامج خفيف الاستخدام وسريع الاستجابة لك في النتائج
فعندما يصبح المدخلات في قاعدة البينانات بالالاف ستلاحظ بطئ في الاستجابة في بعض الأجهزة
وأي نتيجة سيعطيها البرنامج ستكون فعلاً غير النتيجة التي تريد منه :  فما معنى أن تبحث عن اسم معين ويعطيك أكثر من ألف نتيجة
فالغاية من البحث الدقة وسرعة الاستجابة والوصول للفاتورة أو السجل الهدف.
فكلما زادت عدد أحرف المدخلات في مربع البحث كلما أعطى دقة أكبر في النتيجة.

قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}
تم الشكر بواسطة:
#6
(08-03-22, 11:04 PM)Taha Okla كتب : السلام عليكم
الغاية من جعل الكود لا يبحث ولا يعطي نتيجة في حال كان عدد أحرف البحث أقل من ثلاث أحرف 
أن تجعل البرنامج خفيف الاستخدام وسريع الاستجابة لك في النتائج
فعندما يصبح المدخلات في قاعدة البينانات بالالاف ستلاحظ بطئ في الاستجابة في بعض الأجهزة
وأي نتيجة سيعطيها البرنامج ستكون فعلاً غير النتيجة التي تريد منه :  فما معنى أن تبحث عن اسم معين ويعطيك أكثر من ألف نتيجة
فالغاية من البحث الدقة وسرعة الاستجابة والوصول للفاتورة أو السجل الهدف.
فكلما زادت عدد أحرف المدخلات في مربع البحث كلما أعطى دقة أكبر في النتيجة.

هل يوجد كود لتجاهل الهمزات والتاء المربوطة والهاء داخل مربع البحث
الرد }}
تم الشكر بواسطة:



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


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