[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    309

    rpgle & binär

    guten morgen "zusammen"

    Hab mal wieder ein Problem welches ich mir nicht erklären kann!

    DatA00007 & DatB00001 sind durch/mit SQL erstellte Dateien

    Nach dem lesen (READE) der Datei DatA0007, erhalte ich einen Satz mit einem "binär"-Feld (Ma_ID), welches mit 9 0 B definiert ist!

    lese ich nun mit diesem Feld (Ma_ID) die Datei DatB00001 (Schlüsselfeld ist auch ein "binär"-Feld 9 0 B), so werden die Statements mit %eof bzw. %found nicht durchgeführt!

    wandle ich aber jetzt mein RPGLE-Pgm. mit CRTBNDRPG und dem Parameter ALWNULL(*NO) um, funktioniert das Programm !!!


    PHP-Code:
    FDatA00007IF   E           K Disk    Prefix(Ma_
    FDatB00001IF   E           K Disk    Prefix(Be_

    D MID             S              9b 0 

    C                   
    Eval      MID     226

    C     MID           SetLL     DatA00007            
                                                        
    C                   DoU       
    %eof(DatA00007)      
                                                        
    C     MID           ReadE(E)  DatA00007            
    C                   
    If        %eof(DatA00007)      
    C                   Leave                           
    C                   
    EndIf                           
                                                        
    C                   If        %found(DatA00007)    
                                                        
    C     Ma_ID         SetLL     DatB00001            
    C                   DoU       
    %eof(DatB00001)      
    C     Ma_ID         ReadE(E)  DatB00001            
    C                   
    If        %eof(DatB00001)      
    C                   Leave                           
    C                   
    EndIf                           
    C                   If        not %found(DatB00001)
    C                   Leave                           
    C                   
    EndIf



  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Du solltest das Schlüssel-Feld anstatt mit 9B 0 mit 10I 0 definieren. Binär-Felder werden vom Compiler in gepackte Felder konvertiert und können damit nicht den für Integer-Felder zulässigen kompletten Bereich abdecken.

    Du solltest auch das Schlüsselwort EXTBININT(*YES), wodurch der komplette Integer-Bereich in der externen Datei verwendet werden kann, d.h. auch hier keine Konvertierung in gepackt erfolgt.

    U.a. könnte es auch durch die Konvertierung in gepackt passieren, dass das Flag, das den NULL-Wert steuert entweder überklatscht oder nicht sauber gehandelt werden kann.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich vermute mal, dass du beim CREATE TABLE ... (MA_ID INTEGER NOT NULL) das NOT NULL vergessen hast.
    Schlüsselfelder sollten nach Möglichkeit NULL nicht erlauben.
    Dadurch ist die explizite Angabe von ALWNULL erforderlich.
    Ansonsten musst du mittels %NULLIND dem Zugriff mitteilen, dass du auch einen von NULL abweichenden Schlüssel verwendest.
    Die Definition von B9 0 oder I10 ist dabei unerheblich.

    Wenn deine Felder alle ohne NOT NULL erstellt sind musst du auch beim Schreiben %NULLIND setzen, da du sonst beim Lesen nun mit ALWNULL(*NO) NULL-Inhalte nie bekommst sondern eine %ERROR-Meldung bekommst.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    309
    @B.Hauser
    hat leider nicht funktioniert

    PHP-Code:
    H ExtBinInt(*yes)

    D ID       S             10i 0 
    @Fuerchau
    a) wie die Felder/Tabellen erstellt wurden, kann ich leider nicht sagen.
    Es handelt sich hier um Datenbanken von einer externen Firma!

    b) wieso auch beim schreiben, ich les doch nur?

Similar Threads

  1. Datumfeld in RPGLE löschen
    By Mr.iSeries in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 17-01-07, 10:57
  2. Cobol <> RPGLE
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 13-12-06, 13:38
  3. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  4. KEYED DATA QUEUES SUBFILE DESCEND RPGLE
    By borwegen in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-06-06, 09:04
  5. Binär rechnen & Ergebnis binär anzeigen
    By Rincewind in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 10-03-05, 11:15

Berechtigungen

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