Crystal Report ADO
كيف اربط كريستال ريبورت مع برنامجي المصمم عن طريق الفيجول 6
علماً بإني أستخدم قاعد بيانات 2000 محمية بكلمة مرور XV
وأستخدام في البرنامج ADO للأتصال بقاعدة البيانات عن طريق الكود
وأصدار الكريستال لدي 8.5
Crystal Report ADO
كيف اربط كريستال ريبورت مع برنامجي المصمم عن طريق الفيجول 6
علماً بإني أستخدم قاعد بيانات 2000 محمية بكلمة مرور XV
وأستخدام في البرنامج ADO للأتصال بقاعدة البيانات عن طريق الكود
وأصدار الكريستال لدي 8.5
مؤخرا طرحت السؤال السابق ولم أجد من يرد عليه وبفضل الله توصلت إلى الأجابة
وأحببت أن أضع الأجابة لتعم الفائدة
قم برسم الأداة CrystalReport
وأعد تسميها إلى cr1
Private Sub cmdreport_Click()
cr1.ReportFileName = App.Path + "\balancesheet.rpt"
cr1.Connect = ";Pwd=" & "XV"
cr1.DiscardSavedData = True
cr1.RetrieveDataFiles
cr1.ReportSource = 0
cr1.WindowTitle = " Balance Sheet "
strformula = "{Balance.sumofbal1} >= 0 "
.cr1.ReplaceSelectionFormula (strformula)
cr1.WindowState = crptMaximized
On Error Resume Next
cr1.Action = 1
End Subوبس ... وراح تعمل التقارير بكل سهولة
تم تعديل هذه المشاركة بواسطة HnHn في 29 ديسمبر 2004 في 09:04
الله يبارك فيك ويزيدك من واسع علمه وفضله
أنا جربت الكود بس ما شغلش التقرير
رغم أنى عدلت اسم التقرير والشرط حسب برنامجى
ويعطينى رسالة غريبة يقول فيها No Error
إذا كان لا توجد أخطاء فلماذا لا يظهر؟
ولى سؤال آخر
هل يمكن إرسال قيمة مباشرة بالكود ؟
فأنا معتاد على الكتابة فى الداتا ريبورت فى أى أداة
هل ممكن عمل ذلك مع الكريستال؟
تم تعديل هذه المشاركة بواسطة abulyaman في 29 ديسمبر 2004 في 10:21
عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :
( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )
رواه الطبراني في الكبير
أخي العزيز HnHn
وأين أكتب اسم قاعدة البيانات المتصل بها التقرير
وشكرا
أخي العزيز هذا الكود يعتمد على الاتصال بقاعدة البيانات عن طريق الكود البرمجي للأداة
ADO وليس بالرسم الأداة على الفورم .. أذا كنت تستخدم هذه الطريقة سينجح معك هذا الكودعلى المعموم
اللصق هذا الكود .. بعد أن عدلت عليه .. وأن شالله يضبط معاك
cr1.ReportFileName = App.Path + "\Report1.rpt"
cr1.Connect = ";Pwd=" & "vb2003"
cr1.DiscardSavedData = True
cr1.RetrieveDataFiles
cr1.ReportSource = 0
cr1.WindowTitle = " HnHn"
strformula = "{Balance.sumofbal1} >= 0 "
'cr1.ReplaceSelectionFormula (strformula)
'cr1.WindowState = crptMaximized
'On Error Resume Next
cr1.Action = 1أما بالنسبة لأرسال قيمة معينة .. تستطيع ذلك بواسطة جملة SQL
أما بالنسبة للأتصال بقاعدة البيانات المفروض يكون كاتة في تحميل الفورم
وسأقوم ببناء مثال كامل ةأنزاله قريبا .. أنتظرني..
تم تعديل هذه المشاركة بواسطة HnHn في 29 ديسمبر 2004 في 16:45
:rolleyes:
اخي العزيز
اريد ان اعرف crystal report حيث اني لم اعمل علية من قبل ولقد بحثت عن هذه الاداة في add component ولم اجدها وانا استعمل ال data report الاعتيادية.
وانا في مشروعي الان في اخرشي وهو التقارير ولم استطع ام اجعل التقارير ديناميكي يعني ارسل له قيمة من خلال text box او من غيرة ويقوم بتفيذة.
فاذا كان هذا هو الافضل فلو سمحت ترسل لي برنامج شغير يكون فية الذي شرحتة لك اعلاة .
:)
أخي العزيز HnHn
عندي مشكلة واحدة بخصوص crystal report وسالت عنها كثيرا ولم أجد لها جوابا، وإن شاء الله أجد الجواب عندك، والسؤال هو:
كيف أربط crystal report مع الداتا بحيث لو غيرت مكانهما يعملان معا، وللتوضيح أكثر فقد عملت crystal report مربوط مع داتا في المسار (C:\MyProgram\data1.mdb) ولكني عندما اشغله على كمبيوتر ثاني لا يتعرف على الداتا لأن هذا المسار غير موجود وهكذا.
وشكرا
بسم الله الرحمن الرحيم
تعب الأعضاء من كثرة السؤال حول كريستال ريبورت وكيفية ربطة والاستفادة منه
وأنا بدوري بعد معاناة وكثرة أسئلة وأجوبة من هنا وهناك حاولت أن أقوم بعمل مثال
يوضح عمل تك التقارير .. وذلك على طريقتي وكل له طريقته في ربط تلك الاداة المتميزة بعضها يختصر على الكود كالذي في الرد السابق لي . .. وبعضها يعتمد على دمج الكريستال بالفيجول والتي سأبد بها وفي تصوري هي الأفضل من ناحية أنها ليست بطيئة في عرض البيانات .. فالنبدأ
ملاحظة : كما قلت سابقاً .. طريقة الربط أو الاتصال بالقاعدة البيانات ستكون بواسطة
الــ ADO وعن طريق الكود . والكريستال ريبورت الاصدار بين 7 وما فوق وقاعدة البيانات
2000 اكسس
سننشأ فورم ونسميه frmMain
أولاً : كود الأتصال بقاعدة البيانات
في التعريف العام General
Dim cn As Connection Dim rs1 As Recordset
Set cn = New Connection Set rs1 = New Recordset path = App.path & "\db1.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Persist Security Info=False" rs1.Open "select * from customer", cn
وللقاعدة المحمية بكلمة مرور الكود هذا ولاحظ الفرق
Private Sub Form_Load() Set cn = New Connection Set rs1 = New Recordset Dim path As String path = App.path & "\db1.mdb" cn.Open "provider=microsoft.jet.oledb.4.0;data source=" & path & ";jet oledb:database password=NIM" cn.CursorLocation = adUseClient rs1.Open "select * from customer", cn, adOpenDynamic, adLockOptimistic End Sub
واعتقد ان كود الاتصال واضح
ننتقل للمرحلة الأهم
ثانياً : نقوم بعمل مديول Module1 ونكتب الشفرة التالية
Declare Function CreateFieldDefFile Lib "p2smon.dll" (lpUnk As Object, _ ByVal filename As String, ByVal bOverWriteExistingFile As Long) _ As Long
وهذا الكود لكي يقوم البرنامج بعمل قاعدة مؤقته لحفظ بيانات الاستعلام الناتج
من عملية المعاينة للتقرير
نتابع ...
ثالثاً : أدراج أداة الكريستال ريبورت
في نافذة project اضغط بالزر الأيمن وأضف الأداة
Crystal Report 8.5 أو الاصدار الموجود عندك
وقم بتبع عملية المعالج في أضافة قاعدة البيانات وأضافة الحقول وإلى آخر
في المثال كتاب يحوي شرح للعملية هذه .. وهي طريقة سهلة جدا ولكن
للمعرفة ... المهم سيقوم المعالج تلقائياً بأنشاء فورم Form1 ويحيوي ما يلي
Dim Report As New CrystalReport1 Private Sub Form_Load() Screen.MousePointer = vbHourglass CRViewer1.ReportSource = Report CRViewer1.ViewReport Screen.MousePointer = vbDefault End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub
كما سيضيف لقائمة الأداوات الاداة Crystal Report Viewer control
المهم ... الشفرة التي أنشائها المعالج وهي مواصفات للتقرير من طول وعرض وآخره
لا نحتاجها وسنستبدلها بالشفرة التالية
Dim Report As New CrystalReport1 Dim cn As Connection Dim rs1 As Recordset Private Sub Form_Load() Set cn = New Connection Set rs1 = New Recordset path = App.path & "\db1.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Persist Security Info=False" rs1.Open "select * from customer", cn Report.DiscardSavedData Report.Database.SetDataSource rs1, 3, 1 CRViewer1.ReportSource = Report CRViewer1.ViewReport Screen.MousePointer = vbDefault End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub
طبعا هذا الكود سيكتب في الفورم المنشء من قبل المعالج
وأخيراً
رابعاً : عرض أداة التقارير
في الفورم الرئيسي Form1 سنقوم بأنشاء زر
ولنسمية Show Report
'HnHn 'عملية أنشاء قاعدة لحفظ نا تج عملية الاستعلام CreateFieldDefFile rs1, App.path & "\customer.ttx", 1 Form1.Show
وهذا الكود مكمل للكود السابق المكتوب في المديول
customer.ttx وهذه هي قاعدة البيانات المؤقته التي يتم
تخزين ناتج الاستعلام فيها
وهذا ملخص لعملية عرض تقرير لأداة الكريستال
وأرجو أن أكون قد أديت رسالة ليستفاد منها الجميع .... وشكراً
وهذا المثال الذي تم شرحه
أريد أن أوضح مسألة ألتباس حدثت في بعض المنتديات وقامت بأتهام هذا المنتدى الأكثر من رائع
بأنه يسرق المواضيع منهم ولن أذكر أسم المنتدى الذي قام بقذف هذا المنتدى وأنما سأوضح المسألة
المسألة كلها أني قمت أنا وعدة أصدقاء لي وهم
vbcodex
vbcodezoom
mov
.. بوضع سؤال بنفس السياق في
عدة منتديات لأيجاد أفضل رد ولأتوصل لأكثر من معلومة وتكوينه في فكرة معينة
وحلها والموضيع أدرجت في المنتديات التالية
وكلها بنفس السياق ... وهذا كله فقط لرد على المشككين في مصداقية هذا المنتدى
أما الشرح التفصيل .. فهو لي بهد مني ولا يوجد إلا في هذا المنتدى فقط
وأهذا ما أرت توضيح وشكراً .... وأعتذاري للأخ العزيز طاق أبراهيم <_<
تم تعديل هذه المشاركة بواسطة HnHn في 31 ديسمبر 2004 في 19:44
شكراً لك أخي HnHn على شرحك الرائع للكود
أعجبني طرحك للجواب الذي وجدته ( بعد البحث ) هنا في المنتدى لمساعدة إخوانك، فبذلك تؤجر على إفادة إخوانك، كما يؤجر كل من ساهم في معرفتك لهذا الكود عن كل واحد يستفيد منك .. وهكذا ..
يجب أن لا ننسى أن رسالة المنتديات هي المساهمة الخيرية في نهضة الأمة وابتغاء الأجر من الله ( علم ينتفع به) ، وجميل أن نرى جميع المنتديات تحقق التكامل ما بينها ..
بالتوفيق
أشكرك وأتمنى الاضافة للموضوع لكي يستفاد منه لجميع
هذا الموضوع مغلق.