تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] البحث عن جزء من الـ Row فقط واستحضار مقابله
#1
Exclamation 
السلام عليكم ورحمة الله وبركاته
أعمل على برنامج قاموس من الإنجليزية للعربية والعكس
وتواجهنى مشكلة فى الترجمة من عربى إلى إنجليزى
حيث يوجد فى قاعدة البيانات أحياناً عدة معانى عربية للكلمة الواحدة مثل:



وبالتالى اعتماداً على الصورة يجب أن أبحث عن (ترتيب-تسوية) كى يطابقها البرنامج مع (arrangement)
أريده عندما أكتب (ترتيب) فقط أو (تسوية) فقط يجد المطابق وهو (arrangement)

كود وظيفة البحث:

كود :
   Function argetword(ByVal content As String) As String
       Try
           Using adp As New OleDb.OleDbDataAdapter("SELECT * FROM [Words]", connectionString)
               Using tbl As New DataTable
                   If adp.Fill(tbl) > 0 Then
                       For Each row As DataRow In tbl.Rows
                           content = System.Text.RegularExpressions.Regex.Replace(content, row.Item("Arabic"), row.Item("English"), System.Text.RegularExpressions.RegexOptions.IgnoreCase)
                       Next
                   End If
               End Using
           End Using
           Return content
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
       argetword = ""
   End Function

وأيضاً كود وظيفة زر الترجمة:

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

TextBox1.Text = argetword(TextBox2.Text)
الرد }}}
تم الشكر بواسطة:
#2
إستخدم contains
اولا تحقق هل تحتوي او يحتوي العمود على الشرطة"-" اذا نعم تحقق هل العمود او الحقل يحتوي الكلمة المطلوبة.
الرد }}}
تم الشكر بواسطة: Doctor GME
#3
بالنسبة للجزء الأول
الحقل لابد أن يحتوى على - فى جميع الكلمات
فلا توجد كلمة لها معنى واحد فقط
أما بالنسبة للجزء الثانى فقد حاولت تغيير عبارة:

Using adp As New OleDb.OleDbDataAdapter("SELECT * FROM [Words]", connectionString)

إلى

Using adp As New OleDb.OleDbDataAdapter("SELECT English FROM [Words] WHERE Arabic LIKE '%" & content & "%'", connectionString)

ولم تنجح أيضاً
يظهر البرنامج رسالة خطأ تقول

Column Arabic doesn't belong to table

مع العلم أننى تأكدت من صحة أسماء الجدول والعمودين
الرد }}}
تم الشكر بواسطة:
#4
اخي الكريم ساجهز باذن الله مثال سريع لتعرف فكرتي بشكل اسرع

كود :
Imports System.Data.OleDb

Public Class Form1
    Dim con As New OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=db.accdb")

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ar.KeyDown
        If e.KeyData = Keys.Enter Then
            Dim cm As New OleDbCommand("", con)
            cm.CommandText = "select * from tb where ar like'%" & ar.Text & "%'"

            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            Dim dr As OleDbDataReader = cm.ExecuteReader
            If dr.HasRows Then
                If dr.Read Then
                    en.Text = dr.Item("en").ToString
                End If
                dr.Close()
            End If
            If con.State = ConnectionState.Open Then
                con.Close()
            End If
        End If
    End Sub

  
End Class
الرد }}}
تم الشكر بواسطة: Doctor GME
#5
سلام

اأنصحك تنسخ اسم العمود وتلصقه في الكود
كود :
Using adp As New OleDb.OleDbDataAdapter("SELECT [English] FROM [Words] WHERE [Arabic] LIKE @Arabic", connectionString)
adp.SelectCommand.Parameters.AddWithValue("@Arabic", "%" & content & "%")

موفقين
متغيب
الرد }}}
تم الشكر بواسطة: Doctor GME
#6
(16-07-15, 05:31 AM)سعود كتب : اخي الكريم ساجهز باذن الله مثال سريع لتعرف فكرتي بشكل اسرع

كود :
Imports System.Data.OleDb

Public Class Form1
   Dim con As New OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=db.accdb")

   Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ar.KeyDown
       If e.KeyData = Keys.Enter Then
           Dim cm As New OleDbCommand("", con)
           cm.CommandText = "select * from tb where ar like'%" & ar.Text & "%'"

           If con.State = ConnectionState.Closed Then
               con.Open()
           End If
           Dim dr As OleDbDataReader = cm.ExecuteReader
           If dr.HasRows Then
               If dr.Read Then
                   en.Text = dr.Item("en").ToString
               End If
               dr.Close()
           End If
           If con.State = ConnectionState.Open Then
               con.Close()
           End If
       End If
   End Sub

 
End Class

شكراً لك أخى
ولكنى لم أستطع تطبيقه على Function الخاصه بى
فكما ترى كود زر الترجمة فقط يحتوى على تطبيق ال function
وهذا كى أسهل على نفسى التعديل على كل وظيفة من البرنامج مستقلة
دون أن أضع كل شىء فى مكان واحد
لذا أرجو أن تحاول وضع المثال ليتلاءم مع ال function

(16-07-15, 06:27 AM)الطالب كتب : سلام

اأنصحك تنسخ اسم العمود وتلصقه في الكود
كود :
Using adp As New OleDb.OleDbDataAdapter("SELECT [English] FROM [Words] WHERE [Arabic] LIKE @Arabic", connectionString)
adp.SelectCommand.Parameters.AddWithValue("@Arabic", "%" & content & "%")

موفقين

شكراً على اهتمامك
وضعته ولم يعمل علماً بأننى قمت من قبل وأيضاً الآن بنسخ إسم العمود
ووضعه داخل الكود ولكن ظهرت رسالة الخطأ كالمعتاد:
Column Arabic doesn't belong to table
الرد }}}
تم الشكر بواسطة:
#7
سلام

هل جربت الكود - لاني جربته قبل وضعه في المشاركه وشغال تمام - اذا ظلت المشكله ضع الكود كامل لنشوف

موفقين
متغيب
الرد }}}
تم الشكر بواسطة: Doctor GME
#8
(16-07-15, 07:46 AM)الطالب كتب : سلام

هل جربت الكود - لاني جربته قبل وضعه في المشاركه وشغال تمام - اذا ظلت المشكله ضع الكود كامل لنشوف

موفقين

البرنامج يقبله بلا مشاكل
ولكن عند استخدام البرنامج تظهر رسالة الخطأ
وها هو الكود بالكامل:

Function argetword(ByVal content As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter("SELECT [English] FROM [Words] WHERE [Arabic] LIKE @Arabic", connectionString)
adp.SelectCommand.Parameters.AddWithValue("@Arabic", "%" & content & "%")
Using tbl As New DataTable
If adp.Fill(tbl) > 0 Then
For Each row As DataRow In tbl.Rows
Dim en As String = row.Item("English")
Dim ar As String = row.Item("Arabic")
content = System.Text.RegularExpressions.Regex.Replace(content, ar, en, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Next
End If
End Using
End Using
Return content
Catch ex As Exception
MsgBox(ex.Message)
Return String.Empty
End Try
End Function

وها هى صورة قاعدة البيانات:


وأيضاً صورة رسالة الخطأ:
الرد }}}
تم الشكر بواسطة:
#9
سلام

انت طلبj في جمله الاستعلام الناتج يكون فقط English فكيف تريد ان تقرا العمود Arabic ولم تطلب ان يكون من ضمن النتائج بعد select
كود :
SELECT [English], [Arabic] FROM [Words] WHERE [Arabic] LIKE @Arabic

موفقين
متغيب
الرد }}}
تم الشكر بواسطة: Doctor GME
#10
(16-07-15, 09:34 AM)الطالب كتب : سلام

انت طلبj في جمله الاستعلام الناتج يكون فقط English فكيف تريد ان تقرا العمود Arabic ولم تطلب ان يكون من ضمن النتائج بعد select
كود :
SELECT [English], [Arabic] FROM [Words] WHERE [Arabic] LIKE @Arabic

موفقين

ههههه لا تؤاخذنى إنه الصيام
شكراً لك يعمل جيداً الآن
ولكن المشكلة التى فى بداية الموضوع كما هى لم تحل
حيث أن الجزء الخاص ب:
WHERE [Arabic] LIKE '%" & content & "%'"
لا يعمل فلو كتبت كلمة (ترتيب) كما فى الصور المرفقة بالموضوع الأصلى
يعيدها البرنامج لى مرة أخرى وكأنه لم يجدها فى قاعدة البيانات
ولكن إذا كتبت الخانة بالكامل (ترتيب-تسوية) يترجمها البرنامج إلى arrangement
وهذا يدل على أن البرنامج متصل جيداً بقاعدة البيانات
فما الحل؟؟؟؟
الرد }}}
تم الشكر بواسطة:



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


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