الثلاثاء، 27 سبتمبر 2011

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



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


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




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


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




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

















 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
(" Dim engine As New SqlCeEngine("Data Source = Test.sdf
            ()engine.CreateDatabase
ثم قمنا بالاتصال بها وتكوين  جدول اسمه TestTbl واعمدة age,name,tite 
 ("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

الاثنين، 26 سبتمبر 2011

برمجة اول برنامج بألاجهزة الكفية

من أجمل ما جاء في منصة .net framework هو برمجة برامج للأجهزة المحمولة بدون تعلم لغة جديد بلغتك المفضلة تستطيع أن  تبني إي برنامج محمول بشكل التالي

ولكي تعمل البرامج المصممة تحت منصة  عمل الجوالات وهي     .NET Compact Framework

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

NET Compact Framework3.5. لان المشروع سيكون visual Stdio2008


خطوات تكوين برنامج للجوال :
               فتح مشروع جديد في فيجوال ستوديو وبلغتك المفضلة تختر smart Device ثم موافق








 من Target platform نختار نوع نضام تشغيل الموبايل الذي سيعمل عليه البرنامج وثم نختار منصة العمل



سوف يفتح نشروع جديد بشكل التالي ما نريد الان هو تكون برنامج يعرض شريط اخباري
نضيف الادوات التالية في الفورم











الأن نضيف   Timer  ونجعل(500=interval ) لكي يكون عرض الشريط واضح
 نضغط على   Timer ونكتب الكود التالي لعرض شريط اخباري
Label1.Text = Mid(Label1.Text, 2)
Label1.Text = Label1.Text
If Len(Trim(Label1.Text)) = 0 Then
Label1.Text = TextBox1.Text
End If
ونعمل قائمة نضيف فيها زر لتشغيل الشريط الاخباري واخر لأيقافه
في زر تشغيل الشريط نكتب الكود التالي
Label1.Text = TextBox1.Text
Timer1.Enabled = True
وفي زر الايقاف نكتب الكود التالي
 Timer1.Enabled = False
الأن لنجرب البرنامج على الحاسوب نضغط تنفيذ ونختار  تنفيذ على الحاسوب
 الان نحول البرنامج الى تطبيق يعمل على الموبايل كما في الشكل واختيار Build حمله الى جوالك الان

السبت، 24 سبتمبر 2011

تعامل مع الدوال داخل التقارير

  دائما ما نحتاج إلى استخدام دوال في التقرير وقت التنفيذ منها إيجاد اكبر رقم في حقل معين أو جمع عناصر العمود وترتيب نصوص    وغيرها من الدوال الجاهزة التي قد نحتاجها وقد نحتاج إلى دوال نحن نكونها داخل التقارير
هنال نوعين من الدوال التي نستطيع استخدامها داخل التقرير :
1. دوال جاهزة نستطيع الوصول اليها عن طريق اي خاصية وضغط على expression وا ختيارCategory  ثم common Function   استخدام الدوال الموجودة في داخله علما هوا يعطيك مثال على استخدام اي دالة عن الضغط عليها




2. قد نحتاج إلى دوال نستخدمها داخل التقرير وتؤدي مهام معينة غير تلك الدوال الجاهزة مع التقرير هذه الدوال نحن نكونها بأنفسنا ونضيفها إلى التقرير لكي يتمكن التقرير من استخدامها  مثلا نحتاج دالة لمعرفة هل العدد في الحقل أولي أم لا  وغيرها من الدوال التي قد نحتاجها وتكون طريقة استخدام وكتابة الدوال  بشكلين


    دوال مضافة داخل التقرير:
 تكتب هذه الدوال في تبويبCode  داخل التقرير الذي نصل إليه عن طريق اختيار قائمة   Report









ثم  Report properties ثم  تبويب Code

 وتستدعى الدوال المكتوبة داخل  Code من داخل إي خاصية لأي دائن داخل التقرير بضغط على خاصيه واختيار expression وكتابة التالي








 Code.FunctionName=
مثال:  نريد كتابة دالة تقوم بمعرفة هل العدد في الحقل  أولي أم  لا وعرض  في داخل الحقل في التقرير بشكل التالي  اسم  الحقل وبعدها نوعه هل هو أولي أم لا
خطوات العمل
     1.نقوم باختيار قائمة Report ثم  Report properties ثم  تبويب Code ونكتب دالة إيجاد العدد  الاولي
كما نرى هذه الدالة تستقبل قيمة الحقل وتعيد قيمته مع نوعه هل أولي أم لا



          1.نستدعي الدالة ابت كوناها من خاصية  value   بعد أن نرسل لها محتويات الحقل بشكل التالي
 ((Code.primenumber(val(Fields!depart.Value= 

      سترى انه سيطبع لك الشكل التالي مثلا إذا كان محتويات الحقل 32 سيطبع
23is prime  


       دوال مضافة عن طريق تكوين ملف DLL:

       خطوات العمل
               1. تكتب الدوال داخل ملف DLL  نكونه بطريقة التالية نفتح مشروع جديد بأي لغة ونختار Class  Library  ونكتب الدوال            التي نحتاجها في داخله ونضغط Build لتحويل Class الى ملف  DLL
من داخل التقرير نفتح  تبويب References  الذي نصل إليه عن طريق اختيار قائمة       Report   ثم  
  ثمReport properties   تبويب 
ثم References
        نضيف ملف  DLL الذي كوناه عن طريق ضغط على (...) ثم اختيار تبويب Brouse وجلب الملف
        2.لكي نستخدم الدوال الموجودة داخل ملف DLL من داخل التقرير نصل إليه بطريقة التالية
ClassLibraryName.ClassName.FunctionName =





الأحد، 18 سبتمبر 2011

التعشق بين الماتلاب وفيجوال ستوديو ( MATLAB and visual Stdio)


لكثرة احتياج المبرمجين الى تطبيقات الماتلاب في برمجة تحت اطار نت فريم ورك تم الاتفاق مؤخرا بين شركة مايكروسوفت وشركة ماتلاب حول مشروع اسمه  MATLAB Builder NE for Microsoft .NET Framework  
هذا المشروع وفر خدمة كبيرة جدا لمبرمجي دوت نت بحيث يستطيع الاستعادنة بدوال الماتلاب وتطبيقها في برامجه وتوفير برامج ذات سمات عالية ذو متانة رياضية تحليلية وواجهات جملية وتستخدم في اي حاسوب دون وجود برنامج الماتلاب

فكرة عمل هذه المكتبة هي:
اننا نضع مانحتاجه من دوال داخل function تم نضعها كلها داخل class ونحوله الى ملف DLL  وندرج هذا الملف داخل تطبيقات الدوت نت وننفذ مافي داخلها من دوال حالها كحال اي ملف DLL اخر 

خطوات العمل هي  في بيئة الماتلاب نبدء بما يلي............!!!!


1.   نفتح ملف جديد (M-file) و تقوم بتكوين دوال function   في داخله 


(function [outputparameter]=functionName(inputparameter   


end








2..نكتب في (command windows) امر  deploytool  ونظبط التالي
نكتب اسم الملف DLL  ومكان حفظه
(target)  نجعله  net assembly.


3. الان نكون كلاس جديد نسمية ( class1)  او اي اسم  ونضيف اليه function التي كونها بسحب والأفلات داخل ( class1)


ونكون ملف DLL بشكل الذي نريده وعدد  class التي نحتاجها 

 4. بعد ان ننتهي  نعمل build من قائمة الخيارات 



سوف يكون لنا ملف امتداده DLL  ويخزنه في الامتداد الذي  اخترنا لحفظه فيه

الان انتهينا من تكوين ملف DLL له القدرة على العمل داخل بيئة الدوت نت

خطوات العمل هي  في بيئة الدوت نت نبدء بما يلي............!!!!

1. نفتح مشروع جديد بفيجوال vb.net2008 او #C

2. ونضيف الدالة التي كونها بصيغة (dll) الى البرنامج عن طريق  عن طريق Add refrence

3. نضيف mwArray Class   وهي متخصصة بتعامل مع مترجم C++  MATLAB  وهو مسؤل عن تحويل البيانات الى مصفوفات    وسنضيف نحن  ملف ال DLL الموجود بهذا المسار الخاص بالتعامل مع المصفوفات وهو MWArray.dll  موجود في المسار التالي
\C:\Program Files\MATLAB\R2010a\toolbox\dotnetbuilder\bin\win3 2\v2.0

4. في قسم التصريحات العامة نستدعي ملف DLL الذي  كوناه ومكاتب الماتلاب الخاصة بشكل التالي
code in vb.net








Imports MathWorks.MATLAB.NET.Arrays
Imports MathWorks.MATLAB.NET.Utility
Imports DLL_File_Name

5. تم نشتق كائن من اي class موجود في  ملف DLL ونتعامل معه بشكل التالي
code in vb.net
  Dim test As New Class1
 6.الان نستطيع التعامل مع اي دالة موجودة داخل بشكل التالي
code in vb.net
            (test.functonName(parameter

ولكي يعمل البرنامج على اي حاسوب دون توفر  الماتلاب يجب ارفاق مترجم الماتلاب MATLAB Compiler Runtime  مع البرنامج


وهاذان مثالان عمليان على الشرح
1.برنامج رسم اي معادلة رياضية مع الشرح