انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource

اذهب الى الأسفل

انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource Empty انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource

مُساهمة من طرف أحمد مناع في الجمعة سبتمبر 20, 2019 9:57 am

أهلا وسهلا بكم إخواني الكرام

فى مقالات سابقة تكلمنا عن مصادر البيانات التى تستخدم فى استخراج بيانات التقرير من قاعدة بيانات علائقية Access ,MySql ,Oracl,mogo,SQL SERVER الخ , و أوضحنا أن ذلك يتم من خلال طريقتين :


  1. الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML سواء إن تم ذلك بإستخدام الشفرة أو تم ذلك عن طريق المعالج
  2. الثانية :  بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام #JRResultSetDataSource


وقد قمنا بشرح الطريقة الاولى لذلك فى هذا المقال سنركز بالشرح على الطريقة الثانية وكيفية استخدام JDBC DataSources فى استخراج بيانات التقرير من قاعدة البيانات لذلك قبل أن نبدء ندعونا نفترض أن لدينا قاعدة بيانات باسم Employees وتحتوي على جدول باسم Info بالحقول التالية :


INTEGERId
VARCHARName
VARCHARJob

هذا الجدول يحتوى على البيانات التالية :


انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource 127532907

الفئة #JRResultSetDataSource هى احد الفئات التى توفرها المكتبة #JasperReports من خلال الواجهة JRDataSource لملْ و استخراج بيانات التقرير من قاعدة بيانات علائقية وذلك عن طريق تمرير الكائن java.sql.ResultSet اليها وذلك على النحو التالى :

الخطوة الاولى :إفتح ملف #xml لإنشاء الحقول #field التي سيتم ملؤها في وقت التشغيل من جدول قاعدة البيانات لاستخدامها فيما بعد و يجب أن تتطابق أسماء الحقول مع اسم العمود جدول البيانات أو الاسم المقابل له  في جملة الاستعلام SQL مع تحديد نوع بيانات الحقل int,string_على النحو التالى :

الكود:

<field name="ID" class="java.lang.Integer"></field>

 <field name="NAME" class="java.lang.String"></field>

<field name="JOB" class="java.lang.String"></field>


الخطوة الثانية :إنشاء العنصر #textField وهو العنصر الرسومي الذى يستخدم في عرض البيانات النصية الديناميكية في التقارير ويتم إنشائة باستخدام التعليمة <textField> بالشفرة التالية :

الكود:
<textField>
 <reportElement x="393" y="17" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
 </textField>
 <textField>
 <reportElement x="393" y="37" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{NAME}]]></textFieldExpression>
 </textField>
 <textField>
 <reportElement x="393" y="57" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{JOB}]]></textFieldExpression>
 </textField>

و يمكنك ملاحظة أن :

  • التعليمة <reportElement> التى تحدد و تشير إلى ارتفاع حقل النص ،العرض والإحداثيات داخل النطاق   x و y....الخ
  • التعليمة <textFieldExpression> التى تحدد حقول البيانات التي سيتم عرضها في هذا العنصر النصي باستخدام




الكود:
$ F {field_name}


، حيث field_name هو اسم الحقل الذى تم تعريفة فى الخطوة السابقة >>>وهكذا يكون ملف xml كما فى الشكل التالى وجاهز لاستقبال البيانات :

انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource 127452649

ملحوظة :

يمكنك الاستغناء عن كتابة الشفرات فى الخطوة الاولى و الثانية اعلاه و إستخدام الواجهة الرسومية إنشاء حقول البيانات في ملف xml تلقائا  بدون كتابة اى شفرات على النحو التالى :

_ من نافذة #Report Inspector قم بتحديد  #Fields ثم النقر بزر الفارة الايمن لتظهر لك قائمة أختر منها الامر add Field كما فى الشكل التالى :
انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource 552574247

_سيظهر لك حقل باسم #field1 يمكنك تحديدة ومن نافذة الخصائص للحقول غير اسم الحقل باسم اعمدة جدول البيانات لديك أو باسم اعمدة الجدول فى جملة الاستعلام sql التى ستنفذ على النحو التالى :

انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource 470530950

_الان يمكن سحب و إفلات الحقول الثلاثة الى التقرير كما هو موضح فى الصورة التالية :



انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource 340922894

الخطوة الثالثة والاخيرة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من قاعدة البيانات باستخدام الكائن java.sql.ResultSet إلى التقرير بتمرير الكائن  #ResultSet الى الكائن #JRResultSetDataSource على النحو التالى :

الكود:

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class NewMain {

  
    
   public  void FillReport(){
    
      
            
            String host = "jdbc:derby://localhost:1527/Employees";
            String username = "US";
            String password = "US";
            Connection con=null;
            
            
            try {
                
                //إنشاء نص الاتصال بقاعدةالبيانات
                con = DriverManager.getConnection( host, username, password );
                
                // إنشاء جملة الاستعلام
                String SQL = "select * from US.Info";
                
                // إنشاء كائن التنفيذ
                Statement stmt = con.createStatement( );
                
                
                // إنشاء الكائن ResultSet و تنفيذ الاستعلام
                ResultSet rs = stmt.executeQuery( SQL );
                
                //الحصول على مسار التقرير
                InputStream Report =this.getClass().getResourceAsStream("/report/pppp.jasper");
                
                //تعبئة التقرير من قاعدة البيانات باستخدام الكائن JRResultSetDataSource
                JasperPrint jasperPrint = JasperFillManager.fillReport(Report,null,new JRResultSetDataSource(rs));
                
                //تشغيل وعرض التقرير
                JasperViewer.viewReport(jasperPrint,false);
                
                
            } catch (SQLException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            } catch (JRException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            }
            

        
        
      
   }
    
  
    public static void main(String[] args) {
        
       new NewMain().FillReport();
  
    }
}

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 968
النقاط : 201748
التقيم : 116
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى