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

كيف أظهر ناتج استعلام بداخل تقرير كريستال10؟

مغلق
بدأه Dena22 في 12 سبتمبر 2005 · 22 رد · 4,632 مشاهدة · في قسم التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كأن يكون الشرط ( رقم القسم = 10 ) أو( اسم الموظف = محمد ) وهكذا؟

بانتظار آرائكم العاجلة :wacko:

وشكرا

#2

معقول لا يوجد أحد واجهته نفس المشكلة؟؟؟؟؟؟؟؟؟؟؟

#3

هل تستخدمين التقارير من داخل الفيجوال مثل الداتا ريبورت أم منفصلة

إذا كانت مبنية داخل الفيجوال مثل الداتا ريبورت فعملية الفلترة لا تختلف كثيرا عن الداتا ريبورت أما إذا كانت خارج الفيجوال أي بملف مستقل يحمل لاحقة rpt فأعتذر لا يمكنني الاجابة عليه

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

تحياتي

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#4

أخي omani شكرا على الرد

ولكن أرجو منك توضيح طريقة

اقتباس
إذا كانت مبنية داخل الفيجوال

كيف تكون تقارير الكريستال مبنية داخل الفيجوال بيسك كما ذكرت؟؟؟؟

#5

أختي الكريمة بالنسبة لتقارير الكريستال المبنية داخل الفيجوال هي نفس تقارير الداتا ريبورت تقربا ولكن بإمتيازات تحكم أفضل بكثيير من الداتا ريبورت وتضاف من قائمة Project ستجدين تبويب الكريستال ريبورت من ضمن القائمة والصورة التالية توضح الطريقة :

16_09_05_02_30_14_1126863014sss.JPG

أتمنى أن تكون تفي بالغرض .

ولكيفية التعامل معها فالأخ Major له ابداعات متميزة لشرح الكريستال ريبورت وكيفية التعامل معه بسلسلة دروس مكونة من ثلاثة عشر درسا تجدينها هنا :

/index.ph...unce&f=158&id=2

وهنا شرح لبيئة التصميم من داخل الفيجوال

/index.php?showtopic=55882

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

تم تعديل هذه المشاركة بواسطة omani في 16 سبتمبر 2005 في 12:24

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#6

الأخ omani

معذرة على الازعاج ولكنني لازلت غير قادرة على ربط تقرير كريستال بالفيجوال ومن ثم الاستعلام

من نفس التقرير

ذكرت لي بأنه اذا تم الربط من داخل الفيجوال فسيكون نفس الطريقة الخاصة بالداتا ريبورت

كيف ذلك؟

مثلا عند الربط بالداتا ريبورت اقوم بكتابة كود الاستعلام كالتالي

Set rs = New ADODB.Recordset
If Combo1.Text = "محمد" Then
sql = sql = "select field1,field2,field3, from table1 where field2='" & Combo1.Text & " ' "
rs.Open sql, db, adOpenStatic, adLockOptimistic
Set dr.DataSource = rs
dr.Show

علما بأن dr هو اسم تقرير المصنوع بالداتا ريبورت

كيف اقوم بذلك باستخدام الكريستال وبالذات في وجود الاكواد التلقائية التي تظهر في نافذة جديدة؟؟

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

كل ما استطعت فعله هو اظهار الشاشة التي يحويها التقرير

form2.show

ولم اعرف طريقة اظهار نتائج الاستعلام في نفس التقرير

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

على الفلترة من نفس التقرير، وليس الاستعلام من داخل الفيجوال واظهار الناتج في التقرير

ارجو منك توضيح الطريقة اكثر اوارفاق مثال صغير جدا

للضرورة :( ولك جزيل الشكر والامتنان

#7

هلأ اسمعيني ..

اول شيء بتعملي Module

بتكتبي فيه

Public N1 as String

وبعدين بتروحي .. على الصفحة اللي فيها القائمة المنسدلة

وتضغطي على حدث

Combo1_Click

وتستدعي ال

Form

الموجود فيه الكود هذا

Dim Report As New CrystalReport1

Private Sub Form_Load()
Screen.MousePointer = vbHourglass

Set rs = New ADODB.Recordset
If N1= "محمد" Then
sql = sql = "select field1,field2,field3, from table1 where field2='" & N1 & " ' "
rs.Open sql, db, adOpenStatic, adLockOptimistic

    Set Report = New CrystalReport1
    Report.Database.SetDataSource RS
    CRViewer1.ReportSource = Report
    CRViewer1.ViewReport
    CRViewer1.Zoom 100
    Set RS = Nothing

End Sub

Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub

وبس

هلأ جربي

#8

اختي رزان الف شكر على الرد والذي افادني كثيرا

ولكن لدي استفسار هو ان الشاشة التي تحوي القائمة المنسدلة (combo1) تحوي اكثر من قائمة

لذلك قمت بعمل اجراء منفصل خاص بكل كومبو ومن ثم قمت باستدعائه من حدث

Form_load التني تحوي التقرير الا انه عند الاستعلام من باقي القوائم تظهر رسالة الخطأ التالية

Method 'Report Source' of object 'ICrystalReportViewer10' failed

ويظهر الخطأ على

CRViewer1.ReportSource = Report

ماسببها علما بأن الاستعلام من اول قائمة يعمل بشكل صحيح ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#9

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

أعتقد والله أعلم يا أخت Dena22 أن عندك مشكلة فى مكتبات الكريستل ريبورت التى تعمل فى برنامجك (أقصد ملفات الـ .dll )

راجعى إعداد الكريستال ريبورت أن كان كل برامج الكريستال لا تعمل

أو راجعى اسم الملف فى خصائص المشروع أن كان بعضها يعمل وبعضها لا يعمل لتعرفى الملفات التى تناسبك

هذا والله أعلى وأعلم

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

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

رواه الطبراني في الكبير

#10

:s :s :s :s :s

ما الحل اذن؟؟؟

#11

أختي الكريمة دينا

رد الاخت رزان في محله ولكن أولا مرري قيمة الكومبو الموجودة في الفورم لتصبح في المتغير المحجوز باسم N1 وبعد ذلك قومي ببقية الكود وجملة الاسكيو ال في الفورم الخاص بالريبورت يعني في Form2

أي أنه تصبح الجملة لديك كالتالي :

أولا في زر إظهار التقرير تكتبي التالي

N1 = Combo1.text
Form2.Show

بعد ذلك تكملي بقية الكود في الفورم2 وفي حدث الفورم لوود تكتبي الكود الذي كتبته الاخت رزان مع تغيير بسيط في جملةالاسكيوال بحيث تكون كالتالي :

Dim Report As New CrystalReport1

Private Sub Form_Load()
Screen.MousePointer = vbHourglass

Set rs = New ADODB.Recordset

 sql = "select field1,field2,field3, from table1 where field2='" & N1 & " ' "
rs.Open sql, db, adOpenStatic, adLockOptimistic

   Set Report = New CrystalReport1
   Report.Database.SetDataSource RS
   CRViewer1.ReportSource = Report
   CRViewer1.ViewReport
   CRViewer1.Zoom 100
   Set RS = Nothing

End Sub

Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub

وإن شاء الله ستحل المشكلة

تحياتي

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#12

شكرا جزيلا للجميع على الردود

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

و ماذا لو كان هناك زر واحد لعرض التقارير ؟ هل اعرف اكثر من متغير لاحتواء قيمة الكومبو؟ وفي مثل هذه الحالة كيف ستكون جملة sql؟ وعلى اي اساس سيتم فتح كل جدول؟

يعني اذا اختار المستخدم من كومبو1 ثم قام بالضغط على "عرض التقرير" سيكون الكود

sql = "select field1,field2,field3, from table1 where field2='" & N1 & " ' "
rs.Open sql, db, adOpenStatic, adLockOptimistic

واذا اختار المستخدم من كومبو2 . مثلا

sql = "select field1,field2,field3, from table2 where field2='" & N2 & " ' "
rs.Open sql, db, adOpenStatic, adLockOptimistic

وفي هذه الحالة لايمكن أن أكتب في زر إظهار التقرير

form1.show
form2.show

لو كان كل تقرير له شاشة منفصلة؟ اذن كيف يتم كتابة مثل هذا الكود

ارجو ان يكون قصدي واضحا

قمت بإرفاق صورة توضح ذلك

وشكرا جزيلا

post-23301-1127380354_thumb.jpg

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 4 أكتوبر 2005 في 08:41

#13

أختي الكريمة هنا أفضل طريقة أن تمرري جملة الاس كيو الى في متغيير من نوع String للفورم التالية وبالتالي سوف يقوم البرنامج باظهار التقرير بناءً على جملة الاسكيو ال الواردة في المتغير سترينج

مثال

pablic SQL as String

Sql="select * form MyTable Where "تضع الشرط بناءً على نوع البحث

راح أحط مثال قريباً إن شاء الله

تحياتي

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#14

أختي هل تقصدين بأنك صممتي لكل نوع تقريره الخاص أم تعرضين كل النتائج في تقرير واحد ؟

إن كان تقرير واحد فالرد السابق يفي بالغرض وإلا فاستخدمي عبارة select Case

أو IF

تحياتي

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#15

شكرا جزيلا أخي omani على الرد

وما أعنيه هو استخدامي تقرير واحد يعرض كافة النتائج ، كما أنني مستخدمة جملة SQL كما كتبتها

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

وجزاك الله خيراً

#16

بالنسبة لكون أن الكريستال بطيء فهو لان النسخه غير موثقة وفي كل مرة يطلب لها ابديت

أما استخدام فورمات منفصلة ام استخدم فورم واحد فاستخدام فورم واحد يكفي

إن كان بالامكان أن تبعثي هذه الجزئية من برنامجك لاطلع عليها واوافيك بالطريقة الصحيحة والأفضل أكون لك شاكرا

كأن ترفعي مثال مثلا ؟

تحياتي

تم تعديل هذه المشاركة بواسطة omani في 30 سبتمبر 2005 في 11:51

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#17

هذا مثال سريع لكيفة البحث المتعدد بواسطة الكريستال ريبورت

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

تحياتي للجميع

البحث واستخدام الكريستال.zip

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#18

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

ما شاء الله عليك يا أخ عمانى خبير متمكن والله

ربنا يوسع عليك كمان وكمان

بالنسبة لكلام الأخت دينا بخصوص عرض أكثر من نموذج لتقارير فأنا أؤيد الأخ عمانى فى أن يكون نموذج واحد للتقارير وتتحكمى فى أى تقرير يعرض فيه من خلال If .... Then أو Select Case

إلا إن كان هناك ضرورة لرؤية التقريرين إلى جوار بعضهما البعض مثلا لأغراض مقارنة قيم أو خلافه

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

لكنى لم ألحظ فرق فى تأثير إصدار الكريستال على السرعه بصراحه ومشكلة التحديث هذه خارج نطاق كلامى لأنى لم أتعثر فيها حتى الآن ولله الحمد

والله من وراء القصد وهو يهدى السبيل

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

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

رواه الطبراني في الكبير

#19

مثال رائع أخي omani ولقد جربت نفس الطريقة من قبل وكانت ناجحه جدا ولكن سؤالي هو كيف يمكن اظهار التقرير بعد تحديد اكثر من استعلام

بفرض انك وضعت اداة checkbox بدلا من option أمام خيارات الاستعلام ، بحيث يمكن للمستخدم اختيار اكثر من استعلام كالبحث عن طريق الاسم والرقم معاً ، أو الاسم والتاريخ ، أو الاسم والرقم والتاريخ معاً وهكذا. فإن الكود سيكون كالتالي ( باستخدام الداتا ريبورت )

Dim sql As String
sql = "select*from [mytab]"
If Check2.Value = 1 Then
sql = sql & "and recname='" & Combo2.Text & " ' "
End If
If Check3.Value = 1 Then
If Check2.Value = 1 Then
sql = sql & "and depin='" & Combo2.Text & " ' "
Else
sql = sql & "where depin='" & Combo2.Text & " ' "
End If
End If
If Check4.Value = 1 Then
If Check2.Value = 1 Or Check3.Value = 1 Then
sql = sql & "and datein = #" & Format(Combo4.Text, "mm/dd/yy") & " # "
Else
sql = sql & " where datein = #" & Format(Combo4.Text, "mm/dd/yy") & " # "
End If
End If
If rs.State = adStateOpen Then rs.Close
rs.Open sql, db, adOpenDynamic, adLockOptimistic
Set report1.DataSource = rs
report1.show

ما أود معرفته هوكيف اقوم بتطبيق نفس السابق على تقارير الكريستال10؟ وباستخدام نافذة واحدة للتقرير؟

#20

أخي abulyaman

اقتباس
إن كان هناك أكثر من جدول وليس هناك ربط بينهما من خلال الكريستال فهو سيقرأ كل الجاول فى كل استعلام ويهدر الوقت الكثير فى كل مره

كيف سيقرأ كل الجداول وأنا محددة في جملة sql اسم الجدول؟

وما الحاجة للربط بين الجداول من خلال الكريستال؟

أرجو التوضيح ولك جزيل الشكر واعتذر على كثرة الاسئلة والازعاج

#21

أختي الكريمة أنت هنا جاوبتي على سؤالك بنفسك

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

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

sql = "select*from [mytab]"
If Check2.Value = 1 Then
sql = sql & "and recname='" & Combo2.Text & " ' "
End If
If Check3.Value = 1 Then
If Check2.Value = 1 Then
sql = sql & "and depin='" & Combo2.Text & " ' "
Else
sql = sql & "where depin='" & Combo2.Text & " ' "
End If
End If
If Check4.Value = 1 Then
If Check2.Value = 1 Or Check3.Value = 1 Then
sql = sql & "and datein = #" & Format(Combo4.Text, "mm/dd/yy") & " # "
Else
sql = sql & " where datein = #" & Format(Combo4.Text, "mm/dd/yy") & " # "
End If
End If
'هنا انتهينا من الاحتمالات وما بقي علينا إلا أن نقوم بتمرير الاسكيوال المستخلصه الى الفورم 2 كالتالي :
'
Form2.Show

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#22

هذا مثال معدل يحتوي على طريقة البحث المتعدد

تحياتي

البحث واستخدام الكريستال.zip

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#23

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

يتقبل الله منكم الطاعات ويبارك لكم فيها و رمضان كريم

اقتباس
اعتذر على كثرة الاسئلة والازعاج

نحن نتعلم هنا من كثرة الأسئلة لا داعى للإعتذار أبدا

عفوا أعذرينى على الخطأ الكتابى فى كلمة الجاول كنت أعنى الجدول

وكان كلامى عن الكريستال بصفه عامه وليس مثالك بالتحديد

(حيث أنك ترسلين الاستعلام مباشرة أى أن البيانات محدده من خلال جملة الاستعلام واعتمادك على الفيجوال أكثر من كريستال وهذا لم يكن محور إجابتى)

كنت أتكلم عن حالة مثلا فيها جدولين Master - Details مثلا أو جدولين مكملين لبعض ولا يوجد بينهما Link فبعض المستخدمين ينسى الربط بين الجداول ويكون هذا سبب بطء تحميل التقرير لأنه كما أشرت يبحث عن كل البيانات وليس ما تم تحديده فى التقرير

وتقبل الله منا ومنكم صالح الأعمال

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

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

رواه الطبراني في الكبير

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

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

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

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

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

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