tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
21
ZUGRIFFE
3232
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    Hi Leutz.
    Ich habe einen Report mit IReport erstellt und will eine Zeile nur dann anzeigen wenn mein feld ($F{kart_menge10) NICHT 0 ist.
    Dieses kommt aus einer Datenbank und ist vom Typ BigDecimal.
    eigentlich sollte es doch so gehen.. also diesen Code bei "Drucken wenn Ausdruck"
    einfügen. Aber das will einfach nicht..
    kann mir irgendwer helfen

    so gehts nicht
    Code :
    1
    
    ( $F{kart_menge10}==new BigDecimal(0) ? Boolean.FALSE : Boolean.TRUE )

    so auch nicht
    Code :
    1
    
    ( $F{kart_menge10}==BigDecimal.ZERO ? Boolean.FALSE : Boolean.TRUE )

    heisst wenn das Feld vom Typ BigDecimal 0 oder 0.00(<-- das ist glaub mein Problem) ist FALSE zurück geben, sonst TRUE.
     

  2. #2
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Mal eine Frage von welchem Typ ist denn Dein Feld?
    ist es ein String dann müstest Du es vermutlich umwandeln in BigDecimal.
    ist es schon ein BigDecimal... dann würde ich es mal mit BigDecimal.compareTo(BigDecimal nummer) versuchen.

    Grüße und gutes Gelingen

    Takidoso

    Nachtrag: vielleicht hilft Dir ja auch schon die equals-Mehtode weiter
     

  3. #3
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    Das Feld das ich vergleichen will ist ein BigDecimal.
    Und ich will einfach abfragen ob der wert 0 ist.
    Aber irgendwie geht das nicht.
    0 nimmt er gar nicht und bei 0.00 komme ich nicht auf das gewünschte ergebnis.
    heist ob jetzt 1.23 oder 0.00 drin steht er liefert immer das selbe zurück.

    ich müsste eigentlich nur TRUE zurück liefern wenn die Zahl 0.00 ist.
    nur das erweist sich schwerer als man denkt
     

  4. #4
    jeipack jeipack ist offline Mitglied Brokat
    Registriert seit
    Feb 2007
    Beiträge
    391
    Hi
    Wieso 0.00 und nicht 0.0? Haben die BigDecimals in dem Feld $F{kart_menge10} die Auflösung von zwei Dezimalstellen?

    Hast du takidosos Vorschlag (compareTo) ausprobiert? Scheint das einzig Wahre zu sein:
    compareTo

    public int compareTo(BigDecimal val)

    Compares this BigDecimal with the specified BigDecimal. Two BigDecimals that are equal in value but have a different scale (like 2.0 and 2.00) are considered equal by this method. This method is provided in preference to individual methods for each of the six boolean comparison operators (<, ==, >, >=, !=, <=). The suggested idiom for performing these comparisons is: (x.compareTo(y) <op> 0), where <op> is one of the six comparison operators.

    Parameters:
    val - BigDecimal to which this BigDecimal is to be compared.
    Returns:
    -1, 0 or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
    Das hier klappt bei mir:
    Code java:
    1
    
    System.out.println(new BigDecimal(-0.0).compareTo(new BigDecimal(0.00))==0? "true": "false");

    Gruss
     
    Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)

    ----------------------
    Pofessional tutorials.de lover ;)

  5. #5
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Zitat Zitat von MScalli Beitrag anzeigen
    Das Feld das ich vergleichen will ist ein BigDecimal.
    Und ich will einfach abfragen ob der wert 0 ist.
    Aber irgendwie geht das nicht.
    0 nimmt er gar nicht und bei 0.00 komme ich nicht auf das gewünschte ergebnis.
    heist ob jetzt 1.23 oder 0.00 drin steht er liefert immer das selbe zurück.

    ich müsste eigentlich nur TRUE zurück liefern wenn die Zahl 0.00 ist.
    nur das erweist sich schwerer als man denkt
    hast Du es denn schon mit meinem obigem Vorschlag experimentiert? Benutze nicht den Operator == sondern die Routine equals oder die Routine compareTo
    Der Grund warum es mit dem == Operator nicht geht ist, dass Du damit die Identität der Objekte abfragst (genauso wie bei Strings) daher benötigst Du hier eine der dafür vorgesehenen Vergleichsroutinenen!
    Geändert von takidoso (18.03.09 um 12:58 Uhr)
     

  6. #6
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    o mann.. endlich.. vielen vielen dank leutz.

    so gehts
    Code :
    1
    
    new Boolean(($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? "false": "true"))

    aber mal ne Frage. WIe oder wo lässt du dir das im IReport mit System.out.println() anzeigen... wenn ich das könnte hätte ich warscheinlich net soviel Probs

    und warum man false und true als String zurück gibt ist mir ehrlich gesagt nicht ganz klar!
    Na Ok.. bei IReport ist mir ehrlich gesagt fast nichts wirklich klar
     

  7. #7
    jeipack jeipack ist offline Mitglied Brokat
    Registriert seit
    Feb 2007
    Beiträge
    391
    lol
    Das habe ich natürlich nicht in iReport gemacht.
    In iReport ist
    Code java:
    1
    
    ($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? Boolean.FALSE : Boolean.TRUE)
    natürlich sinnvoller
    Sonst hast du da noch einen cast von String zu Boolean. Unnötiger Overhead.

    Dachte das wäre klar

    Gruss
     
    Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)

    ----------------------
    Pofessional tutorials.de lover ;)

  8. #8
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Zitat Zitat von MScalli Beitrag anzeigen
    o mann.. endlich.. vielen vielen dank leutz.

    so gehts
    Code :
    1
    
    new Boolean(($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? "false": "true"))

    aber mal ne Frage. WIe oder wo lässt du dir das im IReport mit System.out.println() anzeigen... wenn ich das könnte hätte ich warscheinlich net soviel Probs

    und warum man false und true als String zurück gibt ist mir ehrlich gesagt nicht ganz klar!
    Na Ok.. bei IReport ist mir ehrlich gesagt fast nichts wirklich klar
    Das ist weniger eine Frage von IReports, mehr eine Frage von Java. Der Konstruktor für Boolean bietet die Möglichkeit auch mit den Strings "true" und "false" zu arbeiten. Bedeutet aber wie schon von jeipack erwähnt einen gewissen Overhead und sollte besser nur dann verwendet werden, wenn es nicht anders geht.
    Schau doch mal in die Sourcen der Klasse Boolean nach, dann siehst Du auch warum sowohl Deine als auch jeipacks Lösung geht und warum jeipacks optimierter ist.
    BTW: Jeipack hat in seinem 1. Vorschlag keinen Code in IReport bzw JasperReport integriert, sondern sein Beispiel geht von reinem Java aus.
    MScalli bedankt sich. 

  9. #9
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    Ich tu mich sehr sehr schwer mit IReport.

    mit Boolean.FALSE wollt ich es schon zu beginn machen
    Wie gasagt, mit java komm ich ziemlich gut klar, aber im IReport abfragen oder bedingungen zu formulieren ist ne Sache für sich

    Dann markier ich den Thread mal als erledigt und sag noch mal vielen dank euch zweien das ihr euch auch noch die Zeit genommen habt mir das zu erklären

    gruss
    MScalli
     

  10. #10
    jeipack jeipack ist offline Mitglied Brokat
    Registriert seit
    Feb 2007
    Beiträge
    391
    Zitat Zitat von MScalli Beitrag anzeigen
    aber im IReport abfragen oder bedingungen zu formulieren ist ne Sache für sich
    Ich weiss ganz genau was du meinst! Ich hab mich auch schon todgeärgert
    Zitat Zitat von MScalli Beitrag anzeigen
    und sag noch mal vielen dank euch zweien das ihr euch auch noch die Zeit genommen habt mir das zu erklären
    Über Renomee würden wir uns beide natürlich ganz doll freuen

    Gruss
     
    Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)

    ----------------------
    Pofessional tutorials.de lover ;)

  11. #11
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    o mann.. jetzt muss ich diesen Thread noch mal aufmachen
    kann mir einer dabei helfen
    ich hab ein Feld vom Typ BigDecimal.. in diesem steht entweder
    0.00
    1,00
    oder 2,00 drin

    um das zu testen will ich einfach den wert zurück geben.. ich hab das mal so im IReport gemacht, aber es kommen bei 2 sätzen fehlerhafte ergebnisse..
    mein code (im IReport)
    Code :
    1
    2
    3
    4
    5
    6
    
    ($F{a_pe_vk}.compareTo(new BigDecimal(0.00))==0 ? new BigDecimal(0.00) : 
      ($F{a_pe_vk}.compareTo(new BigDecimal(1.00))==1 ? new BigDecimal(1.00) : 
        ($F{a_pe_vk}.compareTo(new BigDecimal(2.00))==2 ? new BigDecimal(2.00) : new BigDecimal(111.00)
        )
      ) 
    )

    heisst ich schau zuerst.. steht 0 drin
    ja :0,00 zurück geben
    nein: schauen ob 1 drin steht
    ja: 1,00 zurück geben
    nein: schauen ob 2 drin steht
    ja: 2,00 zurück geben
    nein 111,00 zurück geben

    ich bekomme leider je nach menge der sätze verschiedene werte..
    hab ich da nen hund drin? Ich verstehs echt bald nicht mehr..

    übrigens die Zahlen die ich zurück gebe sind frei erfunden.. einfach um zu sehen was passiert
    plz HELP

    gruss
    MScalli
     

  12. #12
    jeipack jeipack ist offline Mitglied Brokat
    Registriert seit
    Feb 2007
    Beiträge
    391
    Hi

    Schau dir die Doku zu compareTo mal genau an. Vorallem den Rückgabewert:
    Returns:
    -1, 0 or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
    Das heisst: wenns gleich sind kommt 0 zurück. Wenn der zu vergleichende Wert kleiner ist kommt -1 zurück wenn er grösser ist kommt 1 zurück.

    Heisst für dich:
    Code java:
    1
    2
    3
    4
    5
    6
    
    ($F{a_pe_vk}.compareTo(new BigDecimal(0.00))==0 ? new BigDecimal(0.00) : 
      ($F{a_pe_vk}.compareTo(new BigDecimal(1.00))==0 ? new BigDecimal(1.00) : 
        ($F{a_pe_vk}.compareTo(new BigDecimal(2.00))==0 ? new BigDecimal(2.00) : new BigDecimal(111.00)
        )
      ) 
    )
    Ahja und 0.00 ist nicht nötig. 0.0 reicht.


    Gruss
    MScalli bedankt sich. 
    Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)

    ----------------------
    Pofessional tutorials.de lover ;)

  13. #13
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    Noch 1 winzige Frage.. Wo finde ich diese Doku
    (hab mir jetzt das Buch besorgt.. was ein wälzer)
    O mann.. du glaubst gar nicht wie lange ich da schon rum mache

    vielen dank noch mal

    gruss
    MScalli
    Geändert von MScalli (20.03.09 um 18:17 Uhr)
     

  14. #14
    jaws278 jaws278 ist offline Rookie
    Registriert seit
    Mar 2009
    Beiträge
    5
    Grüße die Herren

    Als ich wieder mal verkrampft das Web auf der Suche nach "kostenloser" Hilfe durchforstet habe stosse ich auf dieses Forum.
    Und was vernehmen meine tränenden Augen:
    DA GIBTS JA JEMANDEN DER SICH MIT iReport AUSKENNT

    Langer Rede kurzer Sinn, ich hab zwar den Report perfekt erstellt aber aus einer java Applikation bring ich ihn nicht zum Laufen.
    Natürlich hab ich mir schon die ToDo's rein gezogen, aber offensichtlich stimmt was nicht mit meiner Weisheit!

    Das ist mein Versuch:

    try{
    JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); Hier zerlegt es ihn!
    String url = "jdbc:mysql://localhost/xxxxxxxxxxxxx";
    String usr = "xxxxx";
    String pass = "xxxxxx";
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    java.sql.Connection conn = java.sql.DriverManager.getConnection(url,usr,pass);
    System.out.println("Datenbank ist verbunden");
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null,conn);
    JasperViewer.viewReport(jasperPrint);
    }catch(Exception ex) {
    String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
    System.out.println(connectMsg);
    }


    Liebe Anhänger des iReports, tut ein gutes Werk und helft den Unwissenden
    Ich komm erst gar nicht zum Connect der DB!

    Version: iReport nb 3.1.4
    Eingebundene libs:
    commons-beanutils-1.7.jar
    commons-digester-1.7.jar
    jasperreports-3.1.4.jar
    commons-collections-2.1.jar
    commons-logging-1.1.jar

    Imports:
    import net.sf.jasperreports.view.JasperViewer;
    import net.sf.jasperreports.engine.xml.JRXmlLoader;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.design.JasperDesign;
    import net.sf.jasperreports.engine.JasperReport;


    Ergebnis:
    Could not create the report Error compiling report java source files : E:\Work\BierBoerse09\Bier_Boerse\classic_1237571800281_37932.java Error compiling report java source files : E:\Work\BierBoerse09\Bier_Boerse\classic_1237571800281_37932.java
     

  15. #15
    MScalli MScalli ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    227
    Also wenn du nichts vom Prgramm übergeben musst reicht es so


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     
            try{
                JasperReport jasperReport = JasperCompileManager.compileReport("K:\\Temp\\Test.jrxml"); //<-- hier den Pfad der jrxml angeben
                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, getConnection());
                
                JasperViewer.viewReport(jasperPrint);
                
            }catch(Exception ex) {
                String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
                System.out.println(connectMsg);
            }

    so wird dir der Bericht im Viewer angezeigt!!
     

Ähnliche Themen

  1. Problem mit JasperReports und iReport
    Von DaSuckOOr im Forum Java
    Antworten: 1
    Letzter Beitrag: 22.03.09, 18:00
  2. Subreport, JasperReports, IReport
    Von breakthedawn im Forum Java
    Antworten: 2
    Letzter Beitrag: 27.02.09, 08:45
  3. JasperReports / iReport - Bild drehen
    Von keeel im Forum Java
    Antworten: 0
    Letzter Beitrag: 04.03.08, 14:53
  4. IReport/JasperReports
    Von MScalli im Forum Java
    Antworten: 0
    Letzter Beitrag: 10.01.08, 13:05
  5. JasperReports / IReport Hilfeeeeee
    Von MScalli im Forum Java
    Antworten: 1
    Letzter Beitrag: 29.11.07, 09:04