منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

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

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