بسم الله الرحمن الرحيم
باختصار شديد لدى برنامج قاموس يستخدم ملف txt كقاعدة بيانات كالتالى:
وأريد أن أحوله لقاعدة بيانات أكسس تحتوى على عمودين وأريد مساعدة فى تعديل الكود
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If RadioButton1.Checked = True And CheckBox1.Checked = True And ComboBox1.Text = "Eng to Ar" Then
Using reader As StreamReader = New StreamReader("Subtitles.txt")
Dim line As String = reader.ReadLine
Dim translatedText As String = TextBox1.Text
While (line IsNot Nothing)
Dim words As String() = line.Split("\")
Dim word As String
For Each word In words
If words.Length = 2 And translatedText.Contains(word) Then
translatedText = translatedText.Replace(word, words(+1))
End If
Next
line = reader.ReadLine
End While
TextBox2.Text = translatedText
End Using
علماً بأن button1 هو المسئول على الترجمة
شكراً لكم مقدماً
لو ترفق مثال مصغر // ستجد سرعة في الرد
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database1.accdb")
con.Open()
Dim txt As String = IO.File.ReadAllText("Subtitles.txt")
For Each line As String In txt.Trim.Split(vbNewLine)
If line.Trim.Split("\").Count = 2 Then
Using cmd As New OleDb.OleDbCommand("INSERT INTO [table] ([ar], [en]) VALUES (@ar, @en)", con)
Dim ar As String = line.Trim.Split("\").First.Trim
Dim en As String = line.Trim.Split("\").Last.Trim
cmd.Parameters.AddWithValue("@ar", ar)
cmd.Parameters.AddWithValue("@en", en)
cmd.ExecuteNonQuery()
End Using
End If
Next
con.Close()
End Using
End Sub
(27-04-15, 12:16 AM)حريف برمجة كتب : [ -> ]لو ترفق مثال مصغر // ستجد سرعة في الرد
هذه يا أخى صورة من قاعدة بيانات أكسس التى أود استخدامها بدلاً من ملف txt
http://www12.0zz0.com/2015/04/27/00/615433999.jpg
علماً بأن العمود الأول المسمى id لا أحتاجه فى البرنامج وإنما تركته لأعرف مدى تطور قاعدة البيانات مع مرور الوقت
ولذا أريد تنفيذ الكود الذى وضعته ولكن بعد أن أستغنى على ملف txt وأستعمل العمودين arabic و english فى الأكسس
شكراً لاهتمامك
(27-04-15, 12:50 AM)sami2015 كتب : [ -> ]Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database1.accdb")
con.Open()
Dim txt As String = IO.File.ReadAllText("Subtitles.txt")
For Each line As String In txt.Trim.Split(vbNewLine)
If line.Trim.Split("\").Count = 2 Then
Using cmd As New OleDb.OleDbCommand("INSERT INTO [table] ([ar], [en]) VALUES (@ar, @en)", con)
Dim ar As String = line.Trim.Split("\").First.Trim
Dim en As String = line.Trim.Split("\").Last.Trim
cmd.Parameters.AddWithValue("@ar", ar)
cmd.Parameters.AddWithValue("@en", en)
cmd.ExecuteNonQuery()
End Using
End If
Next
con.Close()
End Using
End Sub
شكراً لمجهودك يا غالى
ولكنى أريد أن أستغنى تماماً عن ملف txt وأنا سانقله يدوياً إلى قاعدة بيانات الأكسس
كل ما أريده هو ربط قاعدة الأكسس بالبرنامج بنفس طريقة الكود السابق
علماً بأن إسمها (Subtitles.accdb)
وكما بالصورة بها عمودين English و Arabic
http://www12.0zz0.com/2015/04/27/00/615433999.jp
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
If TextBox1.Text.Trim <> "" And TextBox2.Text.Trim <> "" Then
Using con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Subtitles.accdb")
con.Open()
Using cmd As New OleDb.OleDbCommand("INSERT INTO [Subtitles] ([Arabic], [English]) VALUES (@Arabic, @English)", con)
cmd.Parameters.AddWithValue("@Arabic", TextBox1.Text.Trim)
cmd.Parameters.AddWithValue("@English", TextBox2.Text.Trim)
cmd.ExecuteNonQuery()
End Using
con.Close()
End Using
MsgBox("Saved")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
أشكرك كثيراً على مجهودك أخى الغالى
قاعدة البيانات الآن متصلة بـ text boxes جيداً
ولكنك أسأت فهمى
فالمفروض أن الزر يستحضر البيانات من القاعدة ولا يضيف عليها
فالبرنامج برنامج قاموس يترجم من العربية للإنجليزية
عذراً لأننى لم أكن واضحاً
Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Subtitles.accdb"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = GetTranslate(TextBox1.Text)
End Sub
Function GetTranslate(ByVal word As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter(Nothing, connectionString)
Using tbl As New DataTable
adp.SelectCommand.CommandText = "SELECT [Arabic] FROM [Subtitles] WHERE [English]=@English"
adp.SelectCommand.Parameters.AddWithValue("@English", word)
If adp.Fill(tbl) > 0 Then Return tbl.Rows(0).Item("Arabic")
adp.SelectCommand.CommandText = "SELECT [English] FROM [Subtitles] WHERE [Arabic]=@Arabic"
adp.SelectCommand.Parameters.AddWithValue("@Arabic", word)
If adp.Fill(tbl) > 0 Then Return tbl.Rows(0).Item("English")
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
أشكرك بشدة يا غالى
تم ربط قاعدة البيانات بنجاح
المشكلة الأخيرة أن الكود الأول الذى كنت أستخدمه مع ملف txt
كانت به ميزه أنه يترجم الكلمات التى يتعرف عليها القاموس
أما الكلمات أو الجمل التى ليست موجوده فى قاعدة البيانات
فإنه يكتبها كما هى بالانجليزيه
أما الكود الجديد فإما أن يكون النص مشابه تماماً لإحدى خانات قاعدة البيانات
أو يظهر نتيجة فارغة وهذه الصور توضح لك كلامى أكثر
http://www6.0zz0.com/2015/04/27/18/392743431.jpg
http://www2.0zz0.com/2015/04/27/18/790928400.jpg
ولك جزيل الشكر أخى على مجهودك
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each line As String In TextBox1.Text.Split(vbNewLine)
TextBox2.Text &= GetTranslate(line) & vbNewLine
Next
TextBox2.Text = TextBox2.Text.Trim
End Sub
Function GetTranslate(ByVal word As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter(Nothing, connectionString)
Using tbl As New DataTable
adp.SelectCommand.CommandText = "SELECT [Arabic] FROM [Subtitles] WHERE [English]=@English"
adp.SelectCommand.Parameters.AddWithValue("@English", word.Trim)
If adp.Fill(tbl) > 0 Then Return tbl.Rows(0).Item("Arabic")
adp.SelectCommand.CommandText = "SELECT [English] FROM [Subtitles] WHERE [Arabic]=@Arabic"
adp.SelectCommand.Parameters.AddWithValue("@Arabic", word.Trim)
If adp.Fill(tbl) > 0 Then Return tbl.Rows(0).Item("English")
Return word.Trim
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
دعنى أوضح لك أكثر أخى العزيز
لا أقصد أن يكون كل نص فى سطر وإنما كان هذا أحد الأمثلة
إنما أقصد أن يتعرف القاموس على الكلمة أو الجملة
التى تكون محتوى خانة فى جدول قاعدة البيانات فيترجمها
فى حين يضع باقى النص كما هو دون تغيير
قد يكون النص الغير مترجم فى سطر وحده أو داخل العبارة أو حتى جزء من الجملة
وهذه صورة أخرى للتوضيح:
http://www6.0zz0.com/2015/04/27/19/591703890.jpg
سألفت نظرك لبعض الجمل فى الكود القديم مثل
Dim translatedText As String = TextBox1.Text
ثم فى كود تنفيذ النص:
If words.Length = 2 And translatedText.Contains(word) Then
translatedText = translatedText.Replace(word, words(+1))
مما يجعل البرنامج يبدل الكلمة أو الجملة بمقابلها تاركاً باقى النص بنفس الشكل
عاجز عن شكرك بما يكفى لهذا المجهود