منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
التحويل إلى قاعدة بيانات أكسس - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : التحويل إلى قاعدة بيانات أكسس (/showthread.php?tid=12173)

الصفحات: 1 2


التحويل إلى قاعدة بيانات أكسس - Doctor GME - 26-04-15

بسم الله الرحمن الرحيم
باختصار شديد لدى برنامج قاموس يستخدم ملف 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 هو المسئول على الترجمة
شكراً لكم مقدماً


RE: التحويل إلى قاعدة بيانات أكسس - حريف برمجة - 27-04-15

لو ترفق مثال مصغر // ستجد سرعة في الرد


RE: التحويل إلى قاعدة بيانات أكسس - sami2015 - 27-04-15

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


RE: التحويل إلى قاعدة بيانات أكسس - Doctor GME - 27-04-15

(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


RE: التحويل إلى قاعدة بيانات أكسس - sami2015 - 27-04-15

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


RE: التحويل إلى قاعدة بيانات أكسس - Doctor GME - 27-04-15


أشكرك كثيراً على مجهودك أخى الغالى
قاعدة البيانات الآن متصلة بـ text boxes جيداً
ولكنك أسأت فهمى
فالمفروض أن الزر يستحضر البيانات من القاعدة ولا يضيف عليها
فالبرنامج برنامج قاموس يترجم من العربية للإنجليزية
عذراً لأننى لم أكن واضحاً


RE: التحويل إلى قاعدة بيانات أكسس - sami2015 - 27-04-15

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


RE: التحويل إلى قاعدة بيانات أكسس - Doctor GME - 27-04-15

أشكرك بشدة يا غالى
تم ربط قاعدة البيانات بنجاح
المشكلة الأخيرة أن الكود الأول الذى كنت أستخدمه مع ملف txt
كانت به ميزه أنه يترجم الكلمات التى يتعرف عليها القاموس
أما الكلمات أو الجمل التى ليست موجوده فى قاعدة البيانات
فإنه يكتبها كما هى بالانجليزيه
أما الكود الجديد فإما أن يكون النص مشابه تماماً لإحدى خانات قاعدة البيانات
أو يظهر نتيجة فارغة وهذه الصور توضح لك كلامى أكثر
http://www6.0zz0.com/2015/04/27/18/392743431.jpg
http://www2.0zz0.com/2015/04/27/18/790928400.jpg
ولك جزيل الشكر أخى على مجهودك


RE: التحويل إلى قاعدة بيانات أكسس - sami2015 - 27-04-15

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


RE: التحويل إلى قاعدة بيانات أكسس - Doctor GME - 27-04-15

دعنى أوضح لك أكثر أخى العزيز
لا أقصد أن يكون كل نص فى سطر وإنما كان هذا أحد الأمثلة
إنما أقصد أن يتعرف القاموس على الكلمة أو الجملة
التى تكون محتوى خانة فى جدول قاعدة البيانات فيترجمها
فى حين يضع باقى النص كما هو دون تغيير
قد يكون النص الغير مترجم فى سطر وحده أو داخل العبارة أو حتى جزء من الجملة
وهذه صورة أخرى للتوضيح:
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))

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