PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Importer Blob (bytea) à partir d'un fichier lu par un applicatif client (PC_1) vers une DB postgresql / Linux (PC_2)

Technique - odbc | Importer Blob (bytea) à partir d'un fichier lu par un applicatif client (PC_1) vers une DB postgresql / Linux (PC_2)

Par wGH_dev7 le 30/01/2006 - 16:32

Comment importer un fichier vers un champs Blob (de type bytea) appartenant à une table de la DB PostGreSQL qui s'execute sur une tierce machine en Linux.

L'applicatif est écrit en VB6 et fait appel à une connection de type OLE-DB (ADODB) qui utilise un lien ODBC ;
Un fichier binaire (image .jpg) est chargé dans un objet ADODB.STREAM (nomé ObjStream) ;
La connection établie sur une table (Test) de la DB PgSQL/Linux ;
L'applicatif ajoute un enregistrement à la table TEST.
l'objet (nomé RS) utilisé est un recordset de type ADODB.Recordset.
Le code : RS.Fields("Identification") = 123 ' ok pas de problème
Rs.Fields("Fichier_Image") = ObjStream.Read ' une erreur survient

Voici l'erreur en détail :
N°Erreur : -2147217887
Description : Une opération OLE-DB en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état OLE-DB disponible. Aucun travail n'a été effectué.

Ce qui étrange est que ce principe utilise pour lire la donnée ByteA (BLOB) fonctionne et le fichier image .jpg est généré (dans ce cas on aura chargé l'image JPG via une programme propriétaire d'administrateur PgSql)

Information environnement :
---------------------------
L'application est développée en VB6
L'OS windows : Win XP SP-2
La version de la DB PostGreSQL est : 8.0
La version linux : redhat 9
Le pilote ODBC est : 8.00.01.02 - Date 2/08/2005

__________________________________________________________________________
Exemple du code permettant la lecture de l'objet BLOB (code fonctionnel) :
--------------------------------------------------------------------------

Sub Read_Blob_From_ADODB()

' Procedure : Lit un champ de type BLOB dans la db et constitue le fichier sur le disque

Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim Binflux As New ADODB.Stream

Binflux.Type = adTypeBinary
Binflux.Open

On Error GoTo Gst_ERR_ADODB
Cn.Open "ODBC;DATABASE=DB_Test;DSN=TEST001;UID=loger;PWD=mot_passe", "loger", "mot_passe"

Rs.Open "select * from test", Cn, adOpenKeyset, adLockOptimistic

While Not Rs.EOF
If Rs.Fields("ID") = 2 Then
MsgBox "Record selectionne est : " & Rs.Fields("ID") & " - " & Rs.Fields("libelle")
Binflux.Write (Rs.Fields("Fichier_Image"))
Binflux.SaveToFile ("c:\test\Mon_Image_01.tif")
End If
Rs.MoveNext
Wend

Binflux.Close
Rs.Close
Cn.Close

Set Cn = Nothing
Set Rs = Nothing
Set Binflux = Nothing

Exit Sub
Gst_ERR_ADODB:
MsgBox "erreur : " & Err.Number & vbNewLine _
& " - Description : " & Err.Description

End Sub

_______________________________________________________________________
Exemple du code pour écriture de l'objet BLOB (code NON fonctionnel) :
-----------------------------------------------------------------------

Sub Import_BLOB_TO_ADODB()
' Procedure qui IMPORTE un fichier au format BINAIRE (ici un jpg) dans une base de données

Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim Binflux As New ADODB.Stream
Dim SQL As String

Binflux.Type = adTypeBinary

On Error GoTo Gst_ERR_ADODB
Cn.Open "ODBC;DATABASE=DB_TEST;DSN=TEST_001;UID=loger;PWD=mot_passe", "loger", "mot_passe"

Rs.Open "select * from test", Cn, adOpenKeyset, adLockOptimistic

Rs.AddNew
Rs.Fields("id") = 30
Rs.Fields("libelle") = "hello i'm the test_id 30 "

Binflux.Open
Binflux.LoadFromFile ("c:\test\mon_image_02.jpg")

Rs.Fields("Ze_Fichier") = Binflux.read ' lorsque cette instruction est execute, l'erreur décrite produite ci-dessus survient.

Rs.Update

Rs.Close
Binflux.Close
Cn.Close

Set Cn = Nothing
Set Rs = Nothing
Set Binflux = Nothing

Exit Sub
Gst_ERR_ADODB:
MsgBox "erreur : " & Err.Number & vbNewLine _
& " - Description : " & Err.Description

End Sub

J'ai essayé d'être le plus complet possible, n'hésitez pas à demander des compléments d'informations ci besoin en était.

Un grand MERCI pour votre aider et FELICITATION d'avance à celui qui détiendra la solution.

© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.