منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] مشكلة مع التطابق مع قاعدة البيانات - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40)
+--- قسم : قسم أسئلة قواعد البيانات تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=41)
+--- الموضوع : [VB.NET] مشكلة مع التطابق مع قاعدة البيانات (/showthread.php?tid=13019)

الصفحات: 1 2


مشكلة مع التطابق مع قاعدة البيانات - Doctor GME - 22-08-15

السلام عليكم ورحمة الله وبركاته
أعمل على برنامج قاموس وتواجهنى مشكلة عند استحضار الترجمة من قاعدة البيانات
فمثلاً هذا أحد الصفوف فى قاعدة البيانات:

يجب أن أكتبه فى ال textbox الخاص باللغة الإنجليزية داخل البرنامج
كما هو تماماً من غير تقسيم هكذا:

ولكن إذا قسم السطر وكتب هكذا:

فالبرنامج لا يطابقه مع قاعدة البيانات
علماً بأن الجملتين متشابهتين تماماً بلا فواصل ولا علامات ترقيم
أريد تعديلاً للكود على هذه النقطة فمن غير المنطقى أن أضيف الجملة عدة مرات
داخل قاعدة البيانات حتى أغطى جميع أشكالها

كود ال function الخاص بالترجمة:
كود :
   Function getexactsubtitles(ByVal content As String) As String
       Try
           Dim count As Integer = 0
           Using adp As New OleDbDataAdapter("SELECT * FROM [Subtitles]", connectionString)
               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").Replace("?", "\?")
                           Dim ar As String = row.Item("Arabic")
                           count += Regex.Matches(content, en, RegexOptions.IgnoreCase).Count
                           content = Regex.Replace(content, en, ar, RegexOptions.IgnoreCase)
                       Next
                   End If
               End Using
           End Using
           MsgBox(IIf(count = 0, "لم يتم العثور على أى تطابق تام داخل قاعدة البيانات", "عدد الحالات المطابقة تماماً التى عثر عليها داخل قاعدة البيانات (" & " " & count & " " & ") من الجمل والكلمات"))
           Return content
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
       getexactsubtitles = ""
   End Function

كود زر الترجمة:
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = getexactsubtitles(TextBox1.Text)



RE: مشكلة مع التطابق مع قاعدة البيانات - أبو عمر - 22-08-15

بص هقول لك فكرة وانت شوف
هتسخدم Spilt
وهتخلي بوكس البحث يطلع لك مصفوفة تاخذ كل قيمة وتبحث عنها
وتعمل Append في بوكس الترجمة
وما تنساش تعكس المصفوفة لما تبحب بالعربي عن الانجليزي
--------------------------------------
Catch not sane hunt or fishing
موفق يا برنس


RE: مشكلة مع التطابق مع قاعدة البيانات - Doctor GME - 22-08-15

ياريت إيضاح الفكره عملياً
فأنا لسه مبتدئ فى البرمجة ولا يمكننى التطبيق
ولازم أوضح إن البوكس بتاع الانجليزى
بيتكتب فيه أكتر من جملة ممكن نص يوصل طوله ل 5000 سطر
فمش معقول أى تنفيذ يدوى للترجمة
لأن ده بيخلى البرنامج ملوش لازمه


RE: مشكلة مع التطابق مع قاعدة البيانات - سعود - 26-08-15

ماهو الاشكال اخي الكريم؟
شيء طبيعي جدا الدقة في البحث.
ضمن تعليمات استخدام البرنامج نبه لهذه النقطة.


RE: مشكلة مع التطابق مع قاعدة البيانات - Doctor GME - 26-08-15

عذراً أخى لم أفهم قصدك
أرجو التوضيح


RE: مشكلة مع التطابق مع قاعدة البيانات - Youssef1313 - 27-08-15

قم بعمل replacement للـ new lines
يعنى بالاحرى تجاهل الاسطر الجديدة المكتوبة في الـ textbox .


RE: مشكلة مع التطابق مع قاعدة البيانات - Doctor GME - 27-08-15

لا يصلح هذا الحل يا أخى
المفترض أصلاً من البرنامج أن يترجم نصوص يصل طولها لآلاف الأسطر
فلا يمكن اقتصار الترجمة على سطر واحد
ولكن كل ما أريده هو أن يطابق البرنامج الجمل مع قاعدة البيانات
ولو كان الفرق هو السطر الجديد فقط يطابقها كما لو كان غير موجود


RE: مشكلة مع التطابق مع قاعدة البيانات - سعود - 27-08-15

(26-08-15, 09:15 PM)Doctor GME كتب : عذراً أخى لم أفهم قصدك
أرجو التوضيح

اخي الكريم الم تقل انت العبارة التالية:
إقتباس :ولكن إذا قسم السطر وكتب هكذا:

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

(27-08-15, 06:27 PM)Doctor GME كتب : لا يصلح هذا الحل يا أخى
المفترض أصلاً من البرنامج أن يترجم نصوص يصل طولها لآلاف الأسطر
فلا يمكن اقتصار الترجمة على سطر واحد
ولكن كل ما أريده هو أن يطابق البرنامج الجمل مع قاعدة البيانات
ولو كان الفرق هو السطر الجديد فقط يطابقها كما لو كان غير موجود

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


RE: مشكلة مع التطابق مع قاعدة البيانات - Doctor GME - 27-08-15

سأوضح لك الأمر أخى العزيز
المفترض أن يترجم البرنامج نصوص مثلاً كترجمات الأفلام
والتى تكون على الشكل التالى:

23
00:05:36,200 --> 00:05:40,400
And we only wish
To catch a fish

24
00:05:40,800 --> 00:05:43,900
So juicy sweet

25
00:05:49,800 --> 00:05:53,800
And we forgot the taste of bread...

من السهل على جداً أن أجعل البرنامج يحول vbnewline إلى space مثلاً
ولكن بعد الترجمة لن يتم قراءة النص كما كان حيث سيصبح سطراً واحداً
وسيكون من الضرورى تعديله على الشكل السابق
وهناك ترجمات تتكون من آلاف الأسطر
لذا فأى تعامل يدوى مع البرنامج لا يفيد
كل ما أريده أن يرى البرنامج مثلاً جملة:

And we only wish
To catch a fish

كأنها:

and we only wish To catch a fish

بلا أى فرق حتى يستطيع مطابقتهم فى قاعدة البيانات

تم إرفاق مثال يشبه قاعدة بيانات البرنامج
وشكراً جزيلاً لك على المجهود


RE: مشكلة مع التطابق مع قاعدة البيانات - سعود - 27-08-15

إقتباس :من السهل على جداً أن أجعل البرنامج يحول vbnewline إلى space مثلاً
طيب اخي الكريم ممكن تجرب الكلاس او المثال هذا
PHP كود :
Public Class Form2

    Dim str 
As String "provider=microsoft.ace.oledb.12.0;data source=Database.accdb"
 
   Dim con As New OleDb.OleDbConnection(str)
 
   Dim cm As New OleDb.OleDbCommand(""con)

 
   Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        cm
.Parameters.Clear()
 
       cm.CommandText "select [Arabic] from [Subtitles] where [English]='" & (TextBox1.Text.ToString.Replace(vbNewLine" ")) & "'"
 
       If con.State ConnectionState.Closed Then con.Open()
 
       Dim dr As OleDb.OleDbDataReader cm.ExecuteReader
        If dr
.HasRows Then
            If dr
.Read Then
                TextBox2
.Text dr("Arabic")
 
               dr.Close()
 
           End If
 
           dr.Close()
 
       End If
 
       dr.Close()
 
   End Sub
End 
Class