منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : اظهار معلومات اكثر من جدول في crystal Report
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم 

قمت بتصميم فاتوره للصيانه وكل شي ماشي كشخ

اقوم بجلب بيانات الصيانة عن طريق ال data source 

الجدول الاول عباره عن الجدول المخزن به معلومات الصيانة phone_fix
والجدول ال ٢  SettingSys هو جدول فيه معلومات المنشئه من الاسم رقم الهاتف الموقع الى اخ ...

قمت بجلب الجداول ال ٢ من ال data source في ال dataset 

وقمت بوضع كل شئ في المكان المناسب، عند التشغيل واستدعاء ال report 
تظهر معلومات الصيانة فقك بدون المعلومات من جدول SettingSys

هذا الكود المستعمل
PHP كود :
Dim ID As String GV.SelectedRows(0).Cells(0).Value

        If Conn
.State ConnectionState.Closed Then
            Conn
.Open()
 
       End If

 
       SQLHistory "SELECT * FROM phone_fix WHERE ID = @ID"
 
       Dim cmd As New OleDbCommand(SQLHistoryConn)
 
       cmd.Parameters.AddWithValue("@ID"ID)


 
       DataSet_phone_fix.Clear()

 
       Dim DataAdapterInvoices As New OleDbDataAdapter(cmd)
 
       DataAdapterInvoices.Fill(DataSet_phone_fix"phone_fix")

 
       Conn.Close()

 
       Dim dataset_sett As New DataSet
        If Conn
.State ConnectionState.Closed Then
            Conn
.Open()
 
       End If

 
       Dim cmd2 As New OleDbCommand("SELECT * FROM SettingSys WHERE ID = @ID"Conn)
 
       cmd2.Parameters.AddWithValue("@ID""1")

 
       dataset_sett.Clear()

 
       Dim DataAdaptersetti As New OleDbDataAdapter(cmd2)
 
       DataAdaptersetti.Fill(dataset_sett"SettingSys")

 
       Conn.Close()

 
       Dim rep As New Fix_phone_bill
        rep
.SetDataSource(DataSet_phone_fix)
 
       rep.SetDataSource(dataset_sett)

 
       Dim frm As New FormPrint
        frm
.CrystalReportViewer1.ReportSource rep
        frm
.CrystalReportViewer1.LogOnInfo(0).ConnectionInfo.Password "123"
 
       frm.ShowDialog() 

أنت بحاجة إلى جملة أستعلام واحده فقط للجدوليين
كود :
SELECT phone_fix.id, phone_fix.dd, phone_fix.ff, phone_fix.gg, SettingSys.id AS Expr1, SettingSys.clum1, SettingSys.clum2 FROM phone_fix INNER JOIN  SettingSys ON phone_fix.id = SettingSys.id where phone_fix.id like '1' and  SettingSys.id like '1'
الخطاء لديك بان الاستعلام منفصل وليس واحد
من ثم بتستدهى البيانات على الهذا الكشل
كود :
       rep.SetDataSource(DataSet_phone_fix)
       rep.SetDataSource(dataset_sett)

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

تفتكر لما تتسال تانى وحد يقول اسم مشروعك هيكون ايه
تفتكر هتقدر تقول اسمه احمد و محمد ولا الصح هو الاسم الاخير اللى كتب شكلياً

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

واذا كانت قاعدة البيانات من نوع Sql فكل ما عليك عمل قاعدة بيانات من نوع Access 
بها الجدوليا والاعمدة كمثال لما لديك فى قاعدة البيانات Access

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

تحياتى لك
وتمنياتى لك التوفيق
(21-11-18, 06:11 PM)elgokr كتب : [ -> ]
الخطاء لديك بان الاستعلام منفصل وليس واحد
من ثم بتستدهى البيانات على الهذا الكشل
كود :
       rep.SetDataSource(DataSet_phone_fix)
       rep.SetDataSource(dataset_sett)

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

تفتكر لما تتسال تانى وحد يقول اسم مشروعك هيكون ايه
تفتكر هتقدر تقول اسمه احمد و محمد ولا الصح هو الاسم الاخير اللى كتب شكلياً

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

واذا كانت قاعدة البيانات من نوع Sql فكل ما عليك عمل قاعدة بيانات من نوع Access 
بها الجدوليا والاعمدة كمثال لما لديك فى قاعدة البيانات Access

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

تحياتى لك
وتمنياتى لك التوفيق


الجدولين عندي لا توجد بينهم علاقة هل هذا يؤثر ؟؟
لا يلزم ان يكون فى علاقة 
واذا لزم وتريد عمل علاقة انشاء عمود فى phone_fix
تحت اسم وليكن idSettingSys  ووظيفته اخذ رقم الاى دى الخاص بالبيانات المنشئة من الجدول الثاني

وبكده سيتم تيهسل الامور كلياً
واذا كان الجدول الثاني هو عبارة عن بيانات واحدة فقط وليس متعدد البيانات
فيمكنك ايضاً عمل الاستعلام بدون علاقة بين الجدولين بما ان الاستعالم يبكون عن تحق قيمة ID بجدول SettingSys  لرقم 1
 
فقط ارفق قاعدة بيانات كما وضحت مسبقاً وساضع لك الكود مع صورة للنتائج الاستعلام

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

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

فكل مما عليك استخدام كود الاستعلام على هذا الشكل
كود :
SELECT SettingSys.CenterName, SettingSys.ManagerName, SettingSys.About, SettingSys.SystemPassword, SettingSys.CenterPhone, SettingSys.CenterPhone2, SettingSys.address, SettingSys.Dawn, phone_fix.cust_name, phone_fix.phone_number, phone_fix.div_type, phone_fix.imei, phone_fix.phone_type, phone_fix.problem, phone_fix.parts_price, phone_fix.price, phone_fix.paid, phone_fix.status, phone_fix.fix_date, phone_fix.guar_date, phone_fix.nnote, phone_fix.EmployeeName, phone_fix.parts_b_price FROM phone_fix, SettingSys WHERE phone_fix.ID=1

كل ما سيتم منك هو وضع المسمى الخاص بالقيمة عن رقم 1
وبامكانك ازالة اى عمود غير مرغوب به باستخدامه ليظهر بالاستعلام

الامر الاخر اذا كنت تريد عرض جميع ما فى الجدول مع الربط فتستخدم بهذا الشكل
كود :
SELECT SettingSys.CenterName, SettingSys.ManagerName, SettingSys.About, SettingSys.SystemPassword, SettingSys.CenterPhone, SettingSys.CenterPhone2, SettingSys.address, SettingSys.Dawn, phone_fix.cust_name, phone_fix.phone_number, phone_fix.div_type, phone_fix.imei, phone_fix.phone_type, phone_fix.problem, phone_fix.parts_price, phone_fix.price, phone_fix.paid, phone_fix.status, phone_fix.fix_date, phone_fix.guar_date, phone_fix.nnote, phone_fix.EmployeeName, phone_fix.parts_b_price
FROM phone_fix, SettingSys

لو تلاحظ ان الاثنين واحد ولكن فى الكود الثاني ما اختلف به هو عدم وجود هذه الجملة
PHP كود :
WHERE phone_fix.ID=

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

وبكده سيكون الاستعلام معك بدون اى مشكل
كل ما عليك ستجعل كودك باول المشاركة عبارة عن استعلام واحد
وعند السطر
PHP كود :
      rep.SetDataSource 

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

تحياتى لك
وتمنياتى لك التوفيق
اخي الجوكر شكرا جزيلا على مجهودك 

للافادة اصبح الكود في هذا الشكل 

PHP كود :
Dim ds As New DataSet
        Dim ID 
As String GV.SelectedRows(0).Cells(0).Value

        If Conn
.State ConnectionState.Closed Then
            Conn
.Open()
 
       End If

 
       SQLHistory "SELECT SettingSys.CenterName, SettingSys.ManagerName, SettingSys.Abot,
        SettingSys.SystemPassword, SettingSys.CenterPhone, SettingSys.CenterPhone2, SettingSys.address,
        SettingSys.Dawn, phone_fix.ID, phone_fix.cust_name, phone_fix.phone_number, phone_fix.div_type,
        phone_fix.imei, phone_fix.phone_type, phone_fix.problem, phone_fix.parts_price,
        phone_fix.price, phone_fix.paid, phone_fix.status, phone_fix.fix_date, phone_fix.guar_date,
        phone_fix.nnote, phone_fix.EmployeeName, phone_fix.parts_b_price FROM phone_fix,
        SettingSys WHERE phone_fix.ID= 3"
 
       Dim cmd As New OleDbCommand(SQLHistoryConn)
 
       cmd.Parameters.AddWithValue("@p1"ID)
 
       ds.Clear()

 
       Dim DataAdapterInvoices As New OleDbDataAdapter(cmd)
 
       DataAdapterInvoices.Fill(ds"phone_fix")
 
       DataAdapterInvoices.Fill(ds"SettingSys")
 
       Conn.Close()

 
       Dim rep As New Fix_phone_bill
        rep
.SetDataSource(ds)

 
       Dim frm As New FormPrint
        frm
.CrystalReportViewer1.ReportSource rep
        frm
.CrystalReportViewer1.LogOnInfo(0).ConnectionInfo.Password "123"
 
       frm.ShowDialog() 
الشكر لل والحمد لله
والحمد لله على كل حال

تعليق بسيط فى الكود لديك عند الجزء
PHP كود :
WHERE phone_fix.ID

هل ستجعل رقم 3 ثابت دائماً ام المقصود به ان يكون بهذا الشكل
PHP كود :
WHERE phone_fix.ID= @p1 

لانى ملاحظ وجود تعريف لمسمى الـ Parameters

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