[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2004
    Beiträge
    184

    Grafik per SQL in ein Blob importieren

    Hallo Kollegen,

    ich versuche eine Grafikdatei in eine SQL Tabelle mit einem BLOB Feld zu importieren, bekomme aber immer folgende Fehlermeldung :
    PHP-Code:
    Nachrichten-ID . . . . :   CPF503E       Bewertung  . . . . . . :   30       
    Nachrichtenart 
    . . . . :   Senderkopie                                       
    Sendedatum 
    . . . . . . :   01.04.15      Sendezeit  . . . . . . :   12:15:49 
                                                                                 
    Nachricht 
    . . . :   Fehler bei benutzerdefinierter Funktion in Teildatei     
      QSQPTABL
    .                                                                  
    Ursache  . . . . :  Beim Aufrufen der benutzerdefinierten Funktion           
      GET_BLOB_FROM_FILE in Bibliothek QSYS2 ist ein Fehler aufgetreten
    Der     
      Fehler trat beim Aufrufen des zugeordneten externen Programms oder         
      Serviceprogramms QDBSSUDF2 in Bibliothek QSYS
    Programmeingangspunkt bzw.  
      
    externem Namen QSQGTBFspezieller Name GET_BLOB_FROM_FILE_1aufDer     
      Fehler trat bei Teildatei QSQPTABL Datei QSQPTABL in Bibliothek QSYS2 auf

      
    Der Fehlercode ist 1. Fehlercodes und ihre Bedeutung:                      
        
    -- Das externe Programm oder Serviceprogramm hat SQLSTATE 42926        
      zurückgegeben
    . Die vom Programm zurückgegebene Textnachricht istLOBund 
      XML
    -Lokatoren sind mit COMMIT(*NONEnicht zulässig. . 
    Mein SQL-Statements sehen so aus:
    PHP-Code:
    CREATE TABLE Lib/BILD_LZ (SP1 BLOB 2 M))
    INSERT INTO Lib/BILD_LZ VALUES(GET_BLOB_FROM_FILE
    '/xxxxx/bilder/Bild.gif')) 
    Ich habe V7R2

    Vielleicht kann mir einer helfen.

    Herzlichen Dank im Voraus
    Jenne

  2. #2
    Registriert seit
    May 2007
    Beiträge
    295
    Hallo.

    Das funktioniert nur wenn man unter Commitment Control arbeitet (Wie der Fehler ja auch schön sagt).

    Auszug wie ich das in einem SQLRPGLE gemacht hab:
    Code:
    System('STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*ACTGRP)');
    
    ....
    
    Exec SQL Insert Into LIB/XTABLE                       
             (ARBFile, ARBTsp, ARBKey, ARBFak,                   
              ARBKNr, ARBGVo, ARBGBi, ARBUArt, ARBEMa1, ARBEMa2, 
              ARBEMa3, ARBEMa4, ARBEMa5, ARBFax, ARBData)        
             Values(:gaDName, Default, :giHKey, :gaHFak, :gaHKNr,
                    :gdGVo, :gdGBi, :gaHUArt, :gaHEMa1, :gaHEMa2,
                    :gaHEMa3, :gaHEMa4, :gaHEMa5, :gaHFax,       
                    Get_BLOB_From_File(TRIM(:gaDatei)))          
             With CS;                                            
    
    ...
    
    Exec SQL Commit;
    
    ...
    
    System('ENDCMTCTL');
    Grüße!
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  3. #3
    Registriert seit
    May 2004
    Beiträge
    184
    Hallo prsbrc,

    wie Du siehst arbeite ich aber doch mit Commitment Control:

    PHP-Code:
    Auswahl eingeben und Eingabetaste drücken.     
                                                   
    COMMIT-Steuerung . . . . . . . . > *CS         
    Namenskonvention 
    . . . . . . . .   *SYS        
    Anweisungsverarbeitung 
    . . . . .   *RUN        
    Bibliotheksauswahl 
    . . . . . . .   *LIBL       
    Listenart  
    . . . . . . . . . . .   *ALL        
    Datenaktualisierung  
    . . . . . .   *ALWAYS     
    Datenkopie zulässig  
    . . . . . .   *YES        
    Datumsformat 
    . . . . . . . . . .   *JOB        
    Trennzeichen für Datum 
    . . . . .   *JOB        
    Zeitformat 
    . . . . . . . . . . .   *HMS        
    Trennzeichen für Uhrzeit 
    . . . .   *JOB        
    Dezimalzeichen 
    . . . . . . . . .   *JOB        
    Sortierfolge 
    . . . . . . . . . .   *JOB        
      Bibliothek 
    . . . . . . . . . .               
    Sprachen-ID  . . . . . . . . . .   *JOB 
    Gruß
    Jenne

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo Jenne,

    Die Fehlermeldung und der SQLSTT sagen aber etwas anderes:
    Code:
    Das externe Programm oder Serviceprogramm hat SQLSTATE 42926        
      zurückgegeben. Die vom Programm zurückgegebene Textnachricht ist: LOB- und 
      XML-Lokatoren sind mit COMMIT(*NONE) nicht zulässig.

  5. #5
    Registriert seit
    May 2004
    Beiträge
    184
    Hallo andreaspr,

    habe jetzt einmal in der SQL Sitzung F13 getätigt mit folgendem Ergebnis:

    PHP-Code:
                               Sitzungsattribute ändern
                                                       
    Auswahl eingeben und Eingabetaste drücken
    .         
                                                       
      
    Anweisungsverarbeitung . . . .   *RUN           *
      
    SELECT-Ausgabe . . . . . . . .   1              1
                                                      3
      COMMIT
    -Steuerung . . . . . . .   *CS            *
                                                      *
      
    Datumsformat . . . . . . . . .   *DMY           *
                                                      *
      
    Datumstrennzeichen . . . . . .   '.'            *
                                                      
    '
      Zeitformat . . . . . . . . . .   *HMS           *
                                                      *
      Zeittrennzeichen . . . . . . .   '
    :'            *
                                                      '
      
    Datenaktualisierung  . . . . .   *ALWAYS        *
      
    Datenkopie zulässig  . . . . .   *YES           *
      
    Namenskonvention . . . . . . .   *SYS           
    Und da steht doch Commit-Steuerung *CS

    Gruß
    Jenne

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Besser du benutzt die "LOB File Reference Variable" aus dem SQL-Programmierhandbuch.
    Hier ein Beispiel dazu zum Schreiben der Info ins IFS.
    Umgedreht funktioniert dies auch zum Kopieren aus dem IFS:
    http://newsolutions.de/forum-systemi...C3%BCbertragen
    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

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Also wenn du im STRSQL *CS angelegt hast, dann sollte es im STRSQL auch funktionieren.
    Allerdings NUR im STRSQL. Im PGM wird NICHT die Commit Einstellung vom STRSQL verwendet! Dort musst du es entweder beim Kompilieren oder wie oben gezeigt im Programm zur Laufzeit gesetzt werden.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Und die Frage ist, ob du die SQL-Option (beim Umwandeln oder per set Option commit=*cs auch im Programm definiert hast.
    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

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Versuch' doch mal die Commitment-Steuerung mit Commitment Scope *JOB (anstatt *ACTGRP) zu starten. Was passiert dann?

    Wenn Du überigens mit embedded SQL arbeitest, würde ich die Funktion GET_BLOB_FROM_FILE erst gar nicht verwenden, sondern eine File-Referenz-Variable definierten (SYSTYPE(BLOB_FILE).
    Die Datenstruktur-Unterfelder entsprechend versorgen und dann die BLOB_FILE direkt im Insert-Statement anlegen.

    Dann brauchst Du auch keine Rücksicht ob und wie die Commitment Steuerung gestartet ist zu nehemen.

    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

  10. #10
    Registriert seit
    May 2004
    Beiträge
    184
    Ich habe jetzt im STRSQL mit PF13 den Eintrag Commit auf *all gesetzt und danach hat der Insert geklappt. Kleiner Tipp für Unerfahrene, danach "COMMIT" eingeben damit die Änderung auch angenommen wird.

    Eine Frage habe ich noch. Wenn ich mir jetzt die Datei ansehe, steht dort nur "Pointer".
    Wie kann ich überprüfen, ob die Bilder korrekt in der Tabelle sind?

    Herzlichen Dank an alle
    Jenne

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    STRSQL is wie so vieles "stabilized", und wird seit Release V4R5 nicht mehr weiter entwickelt.
    Wenn Du die Abfrage mit dem IBM i Navigator ausführst, siehst Du die Hex-Werte in der Spalte. (BLOB wird ansonsten nicht umgesetzt!)

    ... um COMMIT *ALL zu setzen und verwenden, muss man schon sehr genau wissen was man tut, da man ALLES sperrt! COMMIT *CHG oder *CS reichen eigentlich immer aus.

    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

  12. #12
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    festzustellen, ob alles 'ordentlich' drin ist,
    indem du es wieder ausliest und in ein PDF speicherst.


    --> schon 36 Teilnehmer an der Umfrage!
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

Similar Threads

  1. Dateien im TIFF-Format in OnDemand importieren
    By MB in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 06-06-03, 23:14
  2. Blob-Handling
    By infomio in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 28-03-03, 17:46
  3. Grafik von PC auf AS400 (als PAGSEG oder GDF)
    By elmar in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 20-02-02, 08:30
  4. GUI/Grafik
    By Woerlein in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-07-01, 00:16
  5. Bilder vom PC ins AS400 importieren
    By go-dany-go in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 25-04-01, 15:52

Berechtigungen

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