• 0
حسين احمد طالب

تكوين قواعد بيانات للجوال بكل بساطة

سؤال

01317189183.png

نستطيع تكوين قاعدة بيانات للجوال وبكل سهولة بأستخدام فئة SqlCeEngine Class وهي مكتبة DLL التي تحمل مع نسخة الفجوال ستوديو وهذا class يمكنك من انشاء قاعدة بيانات من نوع sdf الخاص بالجوال وتخزين بيانات في داخله اذا كنت قد استخدمت قواعد بيانات ADO.NET فلن يكون الامر صعبا عليك ستجد انه يستعمل نفس class ولكن بأسماء جديدة منها SqlCeDataAdapter Class لتعبئة البيانات من القاعدة البيانات الى الجداول في البرنامج و SqlCeConnection Class للأتصال بقاعدة البيانات وSqlCeCommand Class لتنفيذ اوامر على قاعدة البيانات

اذن لنبد بتصميم مشروع جديد بشكل التالي بقاعدة بيانات اسماء الاشخاص واعمارهم وعناوينهم نضيف فيه textbox,label,Datagrid ونكون القوائم من خيارات القوائم

vba4a-4b07cce077.png

لكي تتعلم كيف تكون مشروع جديد ادخل برمجة اول برنامج لك بالاجهزة الكفية

بما اننا قلنا ان SqlCeEngine Class وبما اننا قلنا انها تحمل مع نسخة فيجوال ستوديو اي هي غير موجودة في منصة العمل .netframework لذالك يجب اضافتها للبرنامج لكي نستطيع استخدامها وتضاف من Solution explorer واختر المشروع ثم كلك يمين وختر Add Refrences ثم اختر المكتبة بشكل التالي

vba4a-892052a876.png

الكود العامة...............................

بداية نستدعي المكاتب التالية

Imports System.IO
Imports System.Text
Imports System.Data
Imports System.Data.SqlServerCe
Imports System.Collections
Imports System.Windows.Forms
Imports System.Data.Common

في التعريفات العامة نعرف التعاريف التالية

Public DS As New DataSet
Dim conn As SqlCeConnection = Nothing
"Public SQLstr As String = "SELECT * FROM TestTbl
Dim CountDataBaseIndex As Integer = 0

DS هو dataset نخزن فيه قاعدة البيانات للتعامل معها

conn هو للأتصال بقاعدة البيانات

SQLstr هي جملة SQL للختيار من قاعدة البيانات

CountDataBaseIndex يمكننا من التنقل بين السجلات

كود فتح اتصال وتكوين قاعدة بيانات..............................

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

هنا سنكون قاعدة بيانات اسمها test.sdf وجدول اسمه TestTbl واعمدة age,name,tite وID_a

Try
If File.Exists("Test.sdf") Then
File.Delete("Test.sdf")
End If
Dim engine As New SqlCeEngine("Data Source = Test.sdf")
engine.CreateDatabase()
conn = New SqlCeConnection("Data Source = Test.sdf")
conn.Open()
Dim cmd1 As SqlCeCommand = conn.CreateCommand()
cmd1.CommandText = "CREATE TABLE TestTbl ( ID_a INT PRIMARY KEY, name NTEXT ,age INT , tite NTEXT)"
cmd1.ExecuteNonQuery()

Fliidataagrid()
addthenamein_boxs()
Catch ex As SqlCeException
MessageBox.Show("Error load")
Finally
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try

في البداية تحققنا هل الملف موجود حتى يحذفه ثم كونا قاعدة بيانات جديدة اسمها test.sdf

[(code]" Dim engine As New SqlCeEngine("Data Source = Test.sdf

()engine.CreateDatabase

ثم قمنا بالاتصال بها وتكوين جدول اسمه TestTbl واعمدة age,name,tite

[(code]"conn = New SqlCeConnection("Data Source = Test.sdf

()conn.Open

()Dim cmd1 As SqlCeCommand = conn.CreateCommand

"( cmd1.CommandText = "CREATE TABLE TestTbl ( ID_a INT PRIMARY KEY, name NTEXT ,age INT , tite NTEXT)"

()cmd1.ExecuteNonQuery

NTEXT معناه نوع بيانات الحقل هو نصي

INT معناه نوع بيانات الحقل هو integer

PRIMARY KEY هو الحقل الذي نضع عليه مفتاح الرئيسي لقاعدة البيانات

ثم استدعينا دالتين

addthenamein_boxs تقوم بوضع محتوى الصف داخل textbox لكل من الاسم والعمل والعوان

Sub addthenamein_boxs()
On Error Resume Next
Me.TextBox1.Text = DS.Tables(0).Rows(CountDataBaseIndex).Item(1)
Me.TextBox2.Text = DS.Tables(0).Rows(CountDataBaseIndex).Item(2)
Me.TextBox3.Text = DS.Tables(0).Rows(CountDataBaseIndex).Item(3)
End Sub

Fliidataagrid تقوم هذه الدالة بتحديث بيانات datagrid و dataset بعد كل اضافة وحذف وتعديل

Sub Fliidataagrid()
Dim selectCmd As SqlCeCommand = conn.CreateCommand()
selectCmd.CommandText = "SELECT * FROM TestTbl"
Dim adp As New SqlCeDataAdapter(selectCmd)
DS.Clear()
adp.Fill(DS)
DataGrid1.DataSource = DS.Tables(0)
End Sub

الان انتهينا من تكوين قاعدة بيانات والاتصال بها

ازار التنقل......................................

نحتاج لكي نتنقل بين سجلات قواعد البيانات الى الامام او الخلف او الاول او الاخير سنكتب كود ازار التنقل في الاتجاهات الاربعة للجوال

ويكون الكود التالي للتنقل الى السجل الاول والاخير والتالي والسابق

If (e.KeyCode = System.Windows.Forms.Keys.Up) Then
'Up
CountDataBaseIndex = 0
addthenamein_boxs()
End If
If (e.KeyCode = System.Windows.Forms.Keys.Down) Then
'Down
CountDataBaseIndex = DS.Tables(0).Rows.Count - 1
addthenamein_boxs()
End If
If (e.KeyCode = System.Windows.Forms.Keys.Left) Then
'Left
'if he in last item
If CountDataBaseIndex > 0 Then
CountDataBaseIndex = CountDataBaseIndex - 1
Else
CountDataBaseIndex = DS.Tables(0).Rows.Count - 1
End If
addthenamein_boxs()
End If
If (e.KeyCode = System.Windows.Forms.Keys.Right) Then
'Right
If CountDataBaseIndex < DS.Tables(0).Rows.Count - 1 Then
CountDataBaseIndex = CountDataBaseIndex + 1
Else
CountDataBaseIndex = 0
End If
addthenamein_boxs()
End If

ك

كما ترى اننا نستدعي الدالة addthenamein_boxs لكي يضيف محتويات الصف الحالي في textbox للأسم والعمر والعنوان

كود زر الاضافة........................

Try
Dim cmd As SqlCeCommand = conn.CreateCommand()
cmd.CommandText = "INSERT INTO TestTbl (ID_a,name, age, tite) VALUES(" & (DS.Tables(0).Rows.Count) & ",'" & TextBox1.Text & "'," & TextBox2.Text & ",'" & TextBox3.Text & "')"
conn.Open()
cmd.ExecuteNonQuery()
MessageBox.Show("FileSaved")
Fliidataagrid()
Catch ex As Exception
MessageBox.Show("File Dont saved")
End Try
If conn.State = ConnectionState.Open Then
conn.Close()
End If

كود زر التعديل (التعديل هنا كوناه على حقل العمر فقط)........................

Try
Dim cmd As SqlCeCommand = conn.CreateCommand()
cmd.CommandText = "UPDATE TestTbl set age = '" & Val(TextBox2.Text) & "' WHERE ID_a=" & DS.Tables(0).Rows(CountDataBaseIndex).Item(0)
conn.Open()
cmd.ExecuteNonQuery()
MessageBox.Show("File update")
Fliidataagrid()
Catch ex As Exception
MessageBox.Show("File Dont update")
End Try
If conn.State = ConnectionState.Open Then
conn.Close()
End If

كود زر الحذف (يعتمد في الحذف على حقل ID-a).......................

Try
Dim cmd As SqlCeCommand = conn.CreateCommand()
cmd.CommandText = "DELETE FROM TestTbl WHERE ID_a =" & DS.Tables(0).Rows(CountDataBaseIndex).Item(0)
conn.Open()
cmd.ExecuteNonQuery()
MessageBox.Show("File Deleted")
Fliidataagrid()
Catch ex As Exception
MessageBox.Show("File Dont Deleted::" & ex.Message)
End Try
If conn.State = ConnectionState.Open Then
conn.Close()
End If

مدونتي

http://hussienahmmed.blogspot.com/

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

السلام عليكم ورحمه الله وبركاته

شكرا اخي على المجهود الرائع .. تمنياتي لك بالتوفيق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
  • 0

السلام عليكم

أخيرا هناك من يهتم ببرمجة حواسيب الكف!!!

عقبال الإشراف على القسم :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم، أنا جديدة في هذا المنتدى وأريد منكم المساعد في إيجاد حل لمشكلتي.

أنا استخدم " برمجة الاجهزة الكفية الفيجوال ستوديو"

واستخدم في datagrid

"Dans le cas de test "exécution" . DAtaGrid affiche tous les client qui existe dans le table exemple "table Solde

وأنا أريد أن يكون كل client يخرج له بياناته فقط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .