[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2011
    Beiträge
    91

    SQL: Where-Statement dynamisch

    Hallo zusammen!

    Ich habe eine Frage zu Embedded SQL in freeRPG.

    Es gibt eine Eingabemaske
    Feld1, Feld2, Feld3


    Per SQL möchte ich jetzt Daten auslesen mit einer Where-Bedingungen, allerdings nur die Felder, welche auch gefüllt sind.

    Also, z.b.:

    select ... where spalte1 = feld1 and spalte3 = feld3

    ODER

    select ... where spalte2 = feld2


    Wie gesagt, die WHERE-Bedinungen sollte "dynamisch" sein. Ich möchte nicht tausend SQL-Statement haben.

    Wie kann so etwas realisiert werden?

    Besten Dank im voraus!

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... da gibt es mehrere Möglichkeiten, z.B.:
    select ...
    from ...
    where Feld1 between :min1 and : max1
    and Feld2 between :min2 and :max2
    and ...
    und dann belegt man die ganzen min Felder mit *LOVAL und die max Felder mit *HIGHVAL vor und wenn ein Feld auszuwählen ist, setzt man den Wert in Minx und Maxx ein
    oder man kann die Where Bedingungen mit case bedingen
    oder man kann das statement dynamisch zusammen bauen und prepare open verwenden
    oder...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Mit Dynamischen SQL am besten.

    Code:
    vSQL = 'Select .... From ....';
     // ... hier dann dein Statment entsprechend zusammenbasteln
    vSQL = %Trim (vSql) + 'Where Feld1 = ''' + %Trim (Feld1) + '''';
    
    Exec Sql Prepare Stm1 From :vSql;
    Exec Sql Declare c1 Cursor For Stm1;
    Exec Sql Open c1;
    Wenn du mit Parameter arbeiten möchtest - welches die sauberere Variante ist sieht es dann so aus:

    Code:
    vSQL = 'Select .... From ....';
     // ... hier dann dein Statment entsprechend zusammenbasteln
    vSQL = %Trim (vSql) + 'Where Feld1 = ?';
    
    Exec Sql Prepare Stm1 From :vSql;
    Exec Sql Declare c1 Cursor For Stm1;
    Exec Sql Open c1 Using :Parm1, :Parm2;
    Oder:

    Code:
    Select * From Tab1
    Where (Sp1 = :Feld1 Or :Feld1 = '')
    And    (Sp2 = :Feld2 Or :Feld2 = '')

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... naja am Besten?! tipp mal O'Hara in eines der Felder der Auswahlmaske ein...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von BenderD Beitrag anzeigen
    ... naja am Besten?! tipp mal O'Hara in eines der Felder der Auswahlmaske ein...

    D*B
    Deshalb sind beim Dynamischen SQL ja auch die Parameter die bessere Variante.
    Da funktioniert O'Hara auch.

Similar Threads

  1. SQL Statement in SQLRPGLE
    By Vigi in forum NEWSboard Programmierung
    Antworten: 27
    Letzter Beitrag: 23-12-11, 20:01
  2. case in sql where statement
    By rr2001 in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 23-07-07, 10:19
  3. embedded SQL statisch oder dynamisch
    By Jamikl in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 30-06-06, 09:48
  4. Versch. Sql Berechtigung Dynamisch - Statisch ?
    By Rincewind in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 02-03-06, 09:54
  5. SQL Statement
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 15-11-04, 12:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •