السبت، 31 ديسمبر 2011

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

هذا البرنامج عبارة عن قاعدة بيانات ضخمة تضم معلومات وتفاصيل كاملة على كل شخص ضمن المؤسسة(قابلة للتطوير من قبل المستخدم حسب معلومات كل مؤسسة  وحسب مايريدون من جداول)  وكل شخص او موضف ما ضمن هذه المؤسسة له صلاحيات معينة بالدخول على جداول ومعلومات معينة ضمن قاعدة البيانات على اساس ان المؤسسة مربوطة بشبكة محلية حيث كل موضف من مكتبه يستطيع الوصول الى جداول معينة ضمن قاعدة البيانات المركزية  وكتب رسمية موجودة على الحاسبة المركزية  على اساس الصلاحيات التي حددت له ويمكن استخدامه بدون شبكة محلية اي حاسبة واحدة مركزية ويستطيع كل موضف الجلوس عيها وتصفح وتعديل على ماحدد له من صلاحيات ضمنها

شكل توزيع الهمام من قبل المدير
في البداية لنبدء من الحاسبة المركزية والبرنامج المنصب في داخلها
يتيح هذا البرنامج لكل مستخدم بالدخول على الحاسبة المركزية حسب اسمه وكلمة مروره التي ستحدد من قبل المديرالمسؤل عن حسابات المستخدمين مثلا لموضف ما قابلية على دخول على جدول الرواتب وليس له قابلية على الدخول على جدول الضرائب لانه يقع على عاتقة وضيفة توزيع الرواتب وهو بحاجة الى قاعدة بيانات  فليس له داع كل شخص له قاعدة بيانات هنا نعمل قاعدة بيانات ملركزية لكل المؤسسة والوصول او الدخول اليها يتم حسب الصلاحيات
بعد تشغيل برنامج الخادم المركزي على الحاسبة سيضهر التالي
----من هذه الواجه يدخل كل مستخدم كلمة مروره ليدخل الى البرنامج وتمتع بصلاحياته وماخول من جداول بدخولها ومن كتب بتصفحاها وملفات يضيف او يعدل او يحذف او يطبع حسب صلاحياته


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


تستطيع طباعة ماتشاء من صفوف واعمدة حسب طلبك
 وبحث بكل الحقول الموجود لتسهيل الوصول الى اي معلومة بأسرع وقت
كذاك تستطيع اضافة عدد غير محدد من المرفقات (جسية وكتب رسمية وماشابه) لكل شخص

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

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

الهدف من المشروع:  تكوين قاعدة بيانات مركزية تضم كل صغيرة وكبيرة عن كل شيئ في المؤسسة وتمكين كل موضف من الوصول الى ماتخصه من معلومات ضمن هذه القاعدة الضخمة وبذالك تستطيع الوصول الى اي معلومة في المؤسسة بربع ثانية وكذالك تسهل على الموضفين ارق العمل 



السبت، 10 ديسمبر 2011

كيف ارضيك ياعميلي (تكوين قواعد بيانات مرنة قابلة للتطوير من قبل المستخدم)

كثر من العملاء من  يبحث على قواعد بيانات لا يعود اليك بعد ان تصممها له ان احتاج الى تطوير او تغير.
 فتنجه الى طريقة تكون قاعدة البيانات قابلة للتطوير وقابلة لاضافة الجداول والاعمدة  وقت التنفيذ اي متى مااحتاج زبوننا الى جدول جديد يضيفه تلقائيا وهو يتعشق داخل البرنامج ويتواصل مع البقية .....وبذالك يستغني العميل عن المبرمج بعد التصميم ويكون للبرنامج مرونة عالية
--------------تخيل انت مستخدم وبعد سنة احتجت الى اضافة جدول جديد يخص عمليات معينة وهاذا ما يحصل فعلا في المؤسسات الحكومية والشركات تكون قواعد بياناتها بتطوير مستمر وتغير مستمر ....فهل من المنطق ان كل مااحتاج الى تطوير يعود اليك
مثل مايكول العراقي(تطلع البطانة اغلى من الوجه)
اذن فلحل.........؟
نمكنه من اضافة جداول تتعشق بعد اضافتها مع بقية الاجزاء

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

--------في هذا المثال نضيف الادوات كما هي بينة



وهذا كود تكوين جدول حسب طلب المستخدم
 Dim tableName As String = TextBox1.TextTry' Part 2: Create one Table using OLEDB Provider
con.Open()
Dim con As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" & Application.StartupPath & "\sdtdb.mdb")'Get database schema
con.Close()
Dim dbSchema As DataTable = con.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, tableName, "TABLE"})' If the table exists, the count = 1If dbSchema.Rows.Count > 0 Then' do whatever you want to do if the table existsElse'begin creat tabelDim solsaved As String = "CREATE TABLE [" & tableName & "] ([ID] INT PRIMARY KEY"
c1.SelectedIndex = i
CheckedListBox1.SelectedIndex = i
solsaved = solsaved &
For i = 0 To c1.Items.Count - 1" ,[" & c1.SelectedItem & "] " & CheckedListBox1.SelectedItemNextsolsaved = solsaved & ")"'do whatever you want to do if the table does not existMsgBox(solsaved)' e.g. create a table
con.Open()
cmd.ExecuteNonQuery()
MessageBox.Show(
con.Close()
Dim cmd As New OleDb.OleDbCommand(solsaved, con)"Table Created Successfully")End If
MsgBox(ex.Message, MsgBoxStyle.Critical,
Catch ex As Exception"Error")End Try

وهذا كود اضافة عمود من نوع نصي وكذالك بقية الانواع تستطيع عمل switch case لها
c1.Items.Add(TextBox70.Text)
CheckedListBox1.Items.Add("TEXT(50)")

السبت، 8 أكتوبر 2011

مهما أختلفنا تجمعنا ملفات DLL

سبحان من يجمع شخصين برأي واحد ....!
كما قال الشيخ مشاري العفاسي
"مهما اتفقنا في مواقف نختلف هذي الحقيقة نضطر فيها نعترف"
صح لسانك ياشيخ نضطر فيها نعترف....! اذن نحن مبرمجي تحت منصة  netframework. كيف نجتمع فمنا من يبرمج #C  واخر VB.net واخر ++C وأخر #F 
اذن كيف نتفق ونحن كل شخص منا متمسك بلغته المحبوبة
اكيد مايكروسوفت لمت شملنا في
1. ClassLibrary  التي نستطيع منها كل واحد منا يبرمج بلغته المفضلة وذالك بفتح مشروع جديد من نوع ClassLibrary وكتابه اكوادنا وبعدها نحوله ما نكونه الى ملفات DLL ويستطيع زميلنا في الفريق استخدامها بكل سهولة
2. وكذالك نستطيع استخدام اكثر من  مشروع بمختلف اللغات  ببرنامج واحد فقط  من solution explorer  نختار add ثم نختار new project ونختار لغة المشروع 

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

هذه هي من مقدمة طلبات اي عميل عندما تبرمج له برنامج قواعد بيانات يقول لك انه يريد طباعة تقارير مفتوحة المصدر حسب طلب المستخدم وقت التنفيذ اي يختار مايشاء من صفوف واعمدة وقت التنفيذ وهذه طريقة شبه مستحيلة من باب ان التقارير ثابتة في بيئة الدوت نت  وافضل وسيلة لأرضاء المستخدم وتوفير هذا الطلب هي بتكوين عدد من التقارير متشابه في المظهر وتسلسل الاعمدة واكيد في   ورقة A4 لا يتجاوز عدد الاعمدة سبعة اي نكون سبعة تقارير مرتبة كما في الشكل


لاحظ ترتيب ارتباط الحقول في الجادول بقى نفسه
الان نكون نافذة للطباعة ونضع checkbox امام كل مستخدم وقائمة بالاعمدة الموجودة حتى يختار ما يريد المستخدم الطباعة منها

ثم من صفحة العرض في اداة Datagridviwer نكون ما يختاره المستخدم من اعمدة وصفوف بشكل جدول ونرسله الى التقرير الملائم له لطباعته






numberofselected = 0
If CheckedListBox2.Items.Count < 1 Then
MsgBox("لم تقم باختيار اي حقل لطباعته", MsgBoxStyle.Information, "Error Print")
Exit Sub
End If
numberofselected = 0
For i = 0 To DataGridView1.Rows.Count - 1
Try
If DataGridView1.Item(0, i).Value = True Then
numberofselected = numberofselected + 1
End If
Catch ex As Exception
End Try
Next
If numberofselected = 0 Then
MsgBox("لم تقم باختيار اي صف خاص ياي شخص لطباعته", MsgBoxStyle.Information, "Error Print")
Exit Sub
End If
If CheckedListBox2.Items.Count > 7 Then
MsgBox("تجاوز عد الاعمدة التي اخترتها عرضا ورقة الطباعة يجب ان لايتجاوز عدد الاعمدة 7 اعمدة", MsgBoxStyle.Information, "Error Print")
Exit Sub

End If
Me.Cursor = Cursors.WaitCursor
PrintDocumuntFile.Enabled = False
TheArrayOFNamesColoumToPrintIT()
dt = New printFormsDataSet.table1stdDataTable
dt.TableName = "table1std"
Dim count As Integer = 1
Dim dr As DataRow
For i = 0 To DataGridView1.Rows.Count - 1
Try
If DataGridView1.Item(0, i).Value = True Then
dr = dt.Rows.Add
' the tasatsol
dr.Item("a3") = count
dr.Item("a6") = "التسلسل"
For j = 0 To DataGridView1.ColumnCount - 1
' for 2 coloums and above
If Val(ComboBox3.Text) >= 2 Then
If ArrayOFPrintColoum(0) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a2") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a5") = DataGridView1.Columns(j).HeaderText
End If
If ArrayOFPrintColoum(1) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a1") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a4") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 3 coloums and above
If Val(ComboBox3.Text) >= 3 Then
If ArrayOFPrintColoum(2) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a7") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a8") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 4 coloums and above
If Val(ComboBox3.Text) >= 4 Then
If ArrayOFPrintColoum(3) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a9") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a10") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 5 coloums and above
If Val(ComboBox3.Text) >= 5 Then
If ArrayOFPrintColoum(4) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a11") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a12") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 6 coloums and above
If Val(ComboBox3.Text) >= 6 Then
If ArrayOFPrintColoum(5) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a13") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a14") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 7 coloums and above
If Val(ComboBox3.Text) >= 7 Then
If ArrayOFPrintColoum(6) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a15") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a16") = DataGridView1.Columns(j).HeaderText
End If
End If
Next
count += 1
End If
Catch ex As Exception
End Try
Next
Dim dss As New DataSet
dss.Clear()
dss.Tables.Add(dt)
' for select the report will print
Select Case Val(ComboBox3.Text)
Case 2
Dim p3 As New PrintForm3Coloums
p3.table1stdBindingSource.DataSource = dss
p3.Show()
Case 3
Dim p4 As New PrintForm4Coloums
p4.table1stdBindingSource.DataSource = dss
p4.Show()
Case 4
Dim p5 As New PrintForm5Coloums
p5.table1stdBindingSource.DataSource = dss
p5.Show()
Case 5
Dim p6 As New PrintForm6Coloums
p6.table1stdBindingSource.DataSource = dss
p6.Show()
Case 6
Dim p7 As New PrintForm7Coloums
p7.table1stdBindingSource.DataSource = dss
p7.Show()
Case 7
Dim p8 As New PrintForm8Coloums
p8.table1stdBindingSource.DataSource = dss
p8.Show()
End Select
Me.Cursor = Cursors.Default
PrintDocumuntFile.Enabled = True
End Sub



الان جرب المثال سيطبع لك تقرير حسب طلبك










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