الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قاعدة بيانات متخصصة للكريستال ريبورت Vb2005

مغلق
بدأه EGY_Tiger في 1 أكتوبر 2007 · 3 رد · 1,780 مشاهدة · في تصميم وبرمجة التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

كثرت الأحاديث عن موضوع ربط الريبورت من نوع Crystal Report بقاعدة بيانات وإحضار البيانات من القاعدة من خلال الكود ومن ثم إعطاء هذه البيانات للريبورت,,,

والحقيقة أنني ما وجدت أي درس يعلمني شخصيا - وأنا كنت أكره الكريستال أيام vb5.0 - كيف أعمل ريبورت متخصص custom report, وأربطه بمحرك بيانات من نوع Adodb.Recordset أو من أي نوع آخر, وكانت النتيجة أنني كنت بين نارين, فإما أن أعمل برامجي بالدوت نت وأعمل تقاريري بـ vb98, أو أن أعمل برامجي بالكامل بـ vb98,,,

ومع نفسي وبعد تعب ما يقرب من أسبوع, وجدت طريقة , هي غير مباشرة, وربما غير سريعة , وهي بالتأكيد غير الطريقة الطبيعية التي يتعامل معها الريبورت, ولكنها تمتاز بأنها طريقة يدوية, وهو ما يريح مبرمج مثلي يحب أن يتحكم في كل شيء,,,

المهم نبدأ على بركة الله, نعمل مشروع جديد من نوع WindowsApplication ونحفظه في أي مجلد ثم ننشئ قاعدة بياناتنا , وستكون في هذا المثال من نوع MSAccess database, ونضع فيها جدولا باسم Table1, وفيه الحقول التالية:

1- ID ويكون من نوع ترقيم تلقائي

2- uname ويكون من نوع نص

3- uPass ويكون من نوع نص

4- notes ويكون من نوع نص

كما ترون جدول عادي جدا, وشائع في البرامج العادية, والآن نتجه لقائمة Project ثم نختر Add new Item , أو نضغط على الأزرار ctrl+shift+a

ومن الأدوات المتاحة نختر أداة Dataset ونسميها Dataset1,,,

الأمر في غاية البساطة حتى الآن, والآن حان دور رسم جدول تخيلي بداخل الأداة Dataset1 يشبه تماما الجدول الموجود فعليا في قاعدة بياناتنا,,,

من نافذة Data Sources التي يمكن عرضها من قائمة Data ثم نختر Show data sources , أو نضغط Shift+Alt+D, سنجد أن أداة DataSet1 قد تم إضافتها للـ Data Sources ببرنامجك نضغط عليها Right Click ثم نختر Edit Dataset With Designer , سنجد أن الأدوات في toolbox قد تغيرت نختر منها أداة DataTable ثم نسحبها للـ designer window.

سنجد أن الجدول قد تم سحبه لنافذة التصميم نضغط عليه Right Click ثم نختر Add , ومنها Column, ونكتب اسم أول حقل لدينا في جدول Table1 الذي أنشأنها مسبقا في Access وهو الحقل ID.

ثم نكرر العملية السابقة حتى نضيف كل الحقول التي صنعناها في الجدول الأصلي, حتى ننتهي وسنسمي الجدول التخيلي بـ dataTable1,,,

والآن أصبحت الـ dataset جاهزة لتكوين تقرير كريستال, من قائمة Project نختر Add new item, ثم نختر تقرير كريستال ريبورت ونسميه CrystalReport1

من قائمة Choose an expert نختر Standard ثم نضغط OK.

من قائمة Available data sources نختر مجلد Project date, ثم ADO.NET DataSets, ثم yourprojectname.DataSet1 ونضيفها لقائمة Selectd Tables, ثم نضغط Next.

نضيف جميع الحقول الموجودة في Available Fields إلى قائمة Feilds to Display,

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

والآن نريد أن نعرض في هذا التقرير البيانات التي استدرجناها من قاعدة البيانات نذهب إلى نافذة النموذج Form1 ونضيف لها أداة CrystalReportViewer, ونسميها CrystalReportViewer1.

ثم ندخل إلى الكود ونبدأ في حدث Form_Load()...

وقبل أن نكتب أي شيء نذهب من قائمة Project ونختر Add reference ونضيف مرجع adodb...

نعود الآن لنافذة الكود ونبدأ بتصميم الكود, في البداية نقوم بفتح جدول Table1 من قاعدة بيانات data التي صممناها ببرنامج Access في بداية الدرس, وذلك عن طريق الكود التالي:

		Dim Con As New ADODB.Connection
		Dim Rs As New ADODB.Recordset
		Con.Open("Driver={Microsoft Access Driver (*.mdb)};dbq=" & Application.StartupPath & "\data.mdb;")
		Rs.Open("SELECT * FROM table1;", Con, 3, 3)

حسنا الآن فتحنا الجدول ووضعناه في كائن Adodb.RecordSet وحان وقت تفريغ كائن البيانات منه إلى كائن من نوع System.Data.DataTable, ونعلن عنه كالتالي,,,

Dim SDT As New System.Data.DataTable

والآن وقد أنشأنا الكائن يأتي وقت إنشاء حقوله Feilds ليشبه تماما حقول الجدول الموجود في قاعدة بيانات Access, وذلك كالتالي:

SDT.TableName = "anyname"
		For I = 0 To Rs.Fields.Count - 1
			SDT.Columns.Add(Rs.Fields(I).Name)
			SDT.Columns(SDT.Columns.Count - 1).AllowDBNull = False
		Next

والآن وقد أنشأنا الحقول حان وقت إنشاء الصفوف أو records , ويكون ذلك كالتالي:

		Dim I2 As Int16
		For I = 0 To Rs.RecordCount - 1
			Dim S(Rs.Fields.Count) As String
			For I2 = 0 To Rs.Fields.Count - 1
				S(I2) = Rs(I2).Value
			Next
			SDT.Rows.Add(S)
			System.Array.Clear(S, 0, S.Length)
			Rs.MoveNext()
		Next

والآن أصبحت كل بياناتنا في كائن System.data.datatable حان وقت إغلاق كائن Adodb.Recordset

 Rs.Close()

والآن نعلن عن متغير يحمل بيانات التقرير الذي أنشأناه ويكون كالتالي:

Dim Rpt As New CrystalReport1

ثم نضع البيانات فيه, ثم نعرضه من خلال الأداة CrystalReportViewer, كالتالي:

		Rpt.SetDataSource(SDT)
		CrystalReportViewer1.ReportSource = Rpt

وهكذا أنتهى التقرير المتخصص , ويمكنك بالطبع تغيير قاعدة البيانات من Access إلى أي نوع آخر تحبه, وأنا شخصيا عملته على Mysql Server..

بالمرفقات المثال الفعلي للشرح السابق,,,

أرجو أن يكون الدرس نافعا, وأن ينفع به أخوتي آمين

تحياتي

reportApplication.zip

What really progammer can do??? Please answer..

#2

ألف شكر على المثال وحبك لنشر العلم جعله الله في ميزان حسناتك في هذا الشهر الكريم.

ولكن أخي ما الغرض مما فعلت؟ يعني هل فعلت هذا لتتغلب على مشكلة معينة في الكود؟ وما هي؟ أم لتضيف ميزة جديدة في التحكم؟ وما هي؟

لم أفهم الغرض من طريقتك وأتمنى إنك توضح لي.

أخي: تحديد مصدر البيانات للتقرير كله أسطر معدودة لا تشكل مشكلة بالنسية لي.. وأصمم التقرير على راحتي بالطريقة اللي أنا عايزها...

أتمنى توضيح الغرض من الدرس لأني فاهم الدرس ولكني مش فاهم الغرض منه.

شكراً لك مرة أخرى.

أخوك.

In order to understand recursion, one must first understand recursion

alawfiadel@yahoo.com

#3

السلام عليكم أخي العنوان باين من موضوعه ( قاعدة بيانات متخصصة),,,

الغرض هنا هو أن تبني جدولا خاصا للكريستال ريبورت, وفي المثال الذي سأرفقه في الدرس التالي سيكون عدد من الجداول, ولكن السبب هو:ماذا لو كان الاستعلام معقد لا يمكن تنفيذه في سطر واحد؟؟؟

ماذا لو كنت تريد جلب عدة بيانات غير مترابطة من عدة جداول؟؟؟

لأسباب كهذه يعطيك حرية التعديل في Datagridview مثلا ولا يتركها فقط حصرا على البيانات المجلوبة من الجدول أو الجداول!!!

ماذا لو كنت تستخدم أكثر من قاعدة بيانات واحدة؟؟؟

الأسباب كثيرة أخي وشكرا على مطالعة الدرس!!!

إدراج صورة في التقرير,,,

السلام عليكم

في الدرس السابق تكلمنا عن كيفية تكوين جدول مخصص للتقرير, وقيام هذا التقرير بعرض البيانات التي نضعها في الجدول المخصص,وفي هذا الدرس سنتكلم عن: "إدراج صورة في التقرير"حسنا لعل الدارسين للتقارير يعرفون أنني - من خلال الدرس السابق- لا أتعامل مع التقارير بالطريقة المثالية, والحقيقة أنني لم أجد في مصادر المعلومات أي مصادر تعليمية كافية عن هذا الموضوع,,,

التقرير يمكنه أن يقبل حقل معرف بنوع blob ولعل العارفين بقواعد بيانات mysql يعرفون ما هو هذا الحقل, وأنه (لغير العارفين) عبارة عن حقل كبير بخزن قيم من نوع Binary, وهو يشبه حقل (مذكرة) أو (Memo) في أكسيس ولكن بدون Characeter set.

وفي التقرير سنقوم بتحميل صورة من على الهارد ديسك, وليس من قاعدة بيانات, ويمكنك - إن كانت صورك على قاعدة بيانات - أن تحفظ الصورة على الهارد ديسك أولا ثم تعرضها في التقرير,,,

سنعدل على نفي المثال السابق, وأترككم مع المثال:

وشكرا جزيلا

تحياتي

reportApplication.rar

تم تعديل هذه المشاركة بواسطة EGY_Tiger في 2 أكتوبر 2007 في 15:39

What really progammer can do??? Please answer..

#4

شكراً لك.

وضحت الفكرة الآن.

أخوك.

In order to understand recursion, one must first understand recursion

alawfiadel@yahoo.com

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…