PDA

View Full Version : BLOB Feld



mk
18-06-19, 07:45
Hallo an alle,

ich möchte ein image in einem BLOB Feld speichern.

Mein SQL dazu ist :

INSERT INTO MYLIB/TBL01P ("RID", FLDBLOB) VALUES(1,
blob('/home/myfolder/aimg.png'))

Frage : Ist das der richtige Aufbau ?
Das System meckert nicht wenn ich einen ungültigen Pfad oder ungültigen Dateinamen angebe.

Gruß
Michael

Robi
18-06-19, 08:17
Im Prinzip ja,

Wandel mal mein Bsp. (ist auch nicht von mir, kommt von irgendwo aus dem Netz)
Felder wie
PIC_FO findest du in der Umwandlungsliste

D SQL_FILE_READ...
D C CONST(2)
D SQL_FILE_CREATE...
D C CONST(8)
D SQL_FILE_OVERWRITE...
D C CONST(16)
D SQL_FILE_APPEND...
D C CONST(32)

D ITEM S 5P 0
D PIC S SQLTYPE(BLOB_FILE)
D OUT S SQLTYPE(BLOB_FILE)

C/EXEC SQL SET OPTION NAMING=*SYS, COMMIT=*NONE
C/END-EXEC
*
************************************************** *********
* CREATE A FILE WITH A BLOB COLUMN
************************************************** *********
C/EXEC SQL DROP TABLE ITEMPIC
C/END-EXEC
*
************************************************** *********
* CREATE A FILE WITH A BLOB COLUMN
************************************************** *********
C/EXEC SQL
C+ CREATE TABLE ITEMPIC
C+ (ITEMNO DEC(5 , 0) NOT NULL,
C+ PICTURE BLOB(8M) WITH DEFAULT NULL,
C+ PRIMARY KEY( ITEMNO )
C+ )
C/END-EXEC
*
************************************************** *********
* WRITE AN ITEM TO THE FILE
*
* PIC_FO = FILE OPTIONS (SEE SQL CONSTANTS, ABOVE)
* PIC_NAME = FILE NAME TO SET BLOB TO
* PIC_NL = LENGTH OF FILE NAME
*
* TEST.JPG WILL BE WRITTEN TO THE 2ND COLUMN OF THE FILE
************************************************** *********
C EVAL ITEM = 10001
C EVAL PIC_FO = SQL_FILE_READ
C EVAL PIC_NAME = '/TMP/TEST.BMP' MIT BMP !!!!!
C EVAL PIC_NL = %LEN(%TRIMR(PIC_NAME))
*
C/EXEC SQL INSERT INTO ITEMPIC VALUES (:ITEM,:PIC)
C/END-EXEC
C EVAL ITEM = 10002
C EVAL PIC_FO = SQL_FILE_READ
C EVAL PIC_NAME = '/TMP/TEST.PDF' MIT PDF !!!!
C EVAL PIC_NL = %LEN(%TRIMR(PIC_NAME))
*
C/EXEC SQL INSERT INTO ITEMPIC VALUES (:ITEM,:PIC)
C/END-EXEC
*
************************************************** *********
* READ A RECORD
*
*
* OUT_FO = FILE OPTIONS (CREATE FILE OR OVERWRITE IT)
************************************************** *********
C EVAL ITEM = 10001
C EVAL OUT_FO = SQL_FILE_OVERWRITE
C EVAL OUT_NAME = '/TMP/TESTOUT.BMP'
C EVAL OUT_NL = %LEN(%TRIMR(OUT_NAME))

C/EXEC SQL SELECT PICTURE
C+ INTO :OUT
C+ FROM ITEMPIC
C+ WHERE ITEMNO = :ITEM
C/END-EXEC
C EVAL ITEM = 10002
C EVAL OUT_FO = SQL_FILE_OVERWRITE
C EVAL OUT_NAME = '/TMP/TESTOUT.PDF'
C EVAL OUT_NL = %LEN(%TRIMR(OUT_NAME))

C/EXEC SQL SELECT PICTURE
C+ INTO :OUT
C+ FROM ITEMPIC
C+ WHERE ITEMNO = :ITEM
C/END-EXEC

C EVAL *INLR = *ON

mk
18-06-19, 16:20
Hi,

danke , dank des Beispiels bin ich ein Schritt weiter gekommen
Gruß
Michael

prsbrc
19-06-19, 07:26
Guten Morgen.
Wenn es nur darum geht eine Datei in ein BLOB-Feld einer Tabelle zustellen dann versuchs mal mittels
GET_BLOB_FROM_FILE('/pfad/file.png')

Dieser Aufruf muss aber unter COMMIT geschehen.

Greets