Bonjour,
Pour première info, j'ai commencé le Delphi il y a deux mois avec quelques interfaces très simples, je tombe donc ici dans du pointu qui me dépasse un peu... beaucoup.
Je transcrit une table dans open office depuis Interbase, mais je n'arrive pas à insérer un champs blob, et si je met un champs LongVarBinary j'obtient des erreurs très intéressantes...
le champs Blob d'origine (sur Interbase donc) est créé ainsi dans ma requête sql : IMAGE BLOB SUB_TYPE 0
voici les deux parties incriminées :
création du champ :
si je met _sdbcDataTypeBLOB ou sa valeur 2004, j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 case FieldDefs.Items[I].DataType of ftBlob : Begin DescCols := DescTable.columns.createDataDescriptor; DescCols.Name := FieldDefs.Items[i].Name; DescCols.Type := _sdbcDataTypeBLOB; DescCols.IsNullable := _sdbcColumnValueNULLABLE; DescTable.Columns.appendByDescriptor(DescCols); End;
J'insère les données en passant par un 'PrepareStatement' qui m'a sauvé de pas mal de soucis pour d'autres champscom.sun.star.sdbc.SQLException: Invalid column type for column: "NomDeLaColonne" !
Si je reste en LongVarBinary, lorsque j'insère la valeur du champs j'obtiens aussi une erreur :
setBinaryStream bloque et me génère une erreur, avec AsVariant ou Value :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // Création du champs ftBlob : Begin DescCols := DescTable.columns.createDataDescriptor; DescCols.Name := FieldDefs.Items[i].Name; DescCols.Type := _sdbcDataTypeLONGVARBINARY; DescCols.IsNullable := _sdbcColumnValueNULLABLE; DescCols.Precision := 2147483647; DescTable.Columns.appendByDescriptor(DescCols); End; // Pas de problèmes // plus tard au remplissage : if (FieldDefs.Items[i].DataType = ftBlob) then begin if not (fields.Fields[i].AsString = '') then begin LeStatement.setBINARYSTREAM(i+1, fields.Fields[i].AsVariant, fields.Fields[i].Size); end;
Si je comprend bien il faudrait que je fasse de la valeur de mon champs un objet pour l'insérer Ensuite dans ma table... ?InterfaceOleWrapper_Impl::Invoke :
[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper
The VARIANT does not contain an object type!
[OK]
Pour tous mes autres types de champs ainsi que leurs données ne me causent aucun problème... Merci d'avance si quelqu'un s'est déjà penché sur le problème ou a simplement un conseil pour la manipulation du champs Blob d'Interbase.
Partager