Produit : 4D OCI 2004 · Plateforme : Mac & Win ♪
Avec 4D for OCI 2004.3, vous pouvez lire et retrouver le contenu d'une colonne LONG RAW dans une base Oracle à condition de réunir ces trois conditions :
- la variable de réception doit être de type BLOB
- le datatype doit être SQLT_LBI
- le mode doit être OCI_DYNAMIC_FETCH (et non OCI_DEFAULT)
Exemple de code:
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
`methode Lecture_long_raw
`lit les données d’une colonne long raw
`et crée le fichier image (jpg) dans le dossier de la base
C_ENTIER LONG
(
envhp;
errhp;
svchp;
vDefine;
stmthp;
stmtSelecthp)
C_ENTIER LONG
(
RealLength)
C_BLOB
(
ZeBlob)
`--------------------------------------------
`CONDITION 1 : blob
FIXER TAILLE BLOB
(
ZeBlob;
0
)
`--------------------------------------------
C_POINTEUR
(
vp_Null1;
vp_Null3)
ReadLength:=
0
C_TEXTE
(
$UserName
;
$Password
;
$ServiceName
;
$SQL_statement
)
$UserName
:=
"xxx"
$Password
:=
"xxx"
$ServiceName
:=
"xxx"
Status:=
OCIEnvCreate (
envhp;
OCI_OBJECT )
Status:=
OCIHandleAlloc (
envhp;
errhp;
OCI_HTYPE_ERROR )
Status:=
OCILogon (
envhp;
errhp;
svchp;
$UserName
;
$Password
;
$ServiceName
)
Status:=
OCIHandleAlloc (
envhp;
stmthp;
OCI_HTYPE_STMT )
$SQL_statement
:=
"SELECT lgraw FROM test_LGRAW WHERE key = 20"
Status:=
OCIHandleAlloc (
envhp;
stmtSelecthp;
OCI_HTYPE_STMT )
Si
(
Status=
OCI_SUCCESS )
Status:=
OCIStmtPrepare (
stmtSelecthp;
errhp;
$SQL_statement
;
OCI_DEFAULT )
`--------------------------------------------
` CONDITION 2 : SQLT_LBI for LONG RAW
` CONDITION 3 : OCI_DYNAMIC_FETCH instead of OCI_DEFAULT
Status:=
OCIDefineByPos (
stmtSelecthp;
vDefine;
errhp;
1
;->
ZeBlob;
SQLT_LBI ;
vp_Null1;
->
ReadLength;
vp_Null3;
OCI_DYNAMIC_FETCH )
`--------------------------------------------
$status
:=
OCIErrorGet (
errhp;
1
;
$errornum
;
$errorexplain
)
Si
(
$errornum
#
0
)
ALERTE
(
Chaine
(
$errornum
)+
Caractere
(
13
)+
$errorexplain
)
Fin de si
Repeter
Status:=
OCIStmtExecute (
svchp;
stmtSelecthp;
errhp;
1
;
0
;
0
;
0
;
OCI_DEFAULT )
Jusque
(
Status#
OCI_STILL_EXECUTING )
Status:=
OCIHandleFree (
stmtSelecthp)
Fin de si
`supprimer les 8 premiers caractères si l'image a été insérée avec 4D for Oracle
SUPPRIMER DANS BLOB
(
ZeBlob;
0
;
8
)
Si
(
ReadLength>
0
)
$DocRef
:=
Creer document
(
"longraw_image.jpg"
)
Si
(
OK=
1
)
FERMER DOCUMENT
(
$DocRef
)
BLOB VERS DOCUMENT
(
Document;
ZeBlob)
Fin de si
Sinon
ALERTE
(
"Taille du blob : zero !"
)
Fin de si
Status:=
OCIHandleFree (
stmthp)
Status:=
OCILogoff (
svchp;
errhp)
Status:=
OCIHandleFree (
errhp)
Status:=
OCICleanUp (
envhp)
FIXER TAILLE BLOB
(
ZeBlob;
0
)
`empty blob
`fin de methode