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 :
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;
si je met _sdbcDataTypeBLOB ou sa valeur 2004, j'obtiens l'erreur suivante :
com.sun.star.sdbc.SQLException: Invalid column type for column: "NomDeLaColonne" !
J'insère les données en passant par un 'PrepareStatement' qui m'a sauvé de pas mal de soucis pour d'autres champs
Si je reste en LongVarBinary, lorsque j'insère la valeur du champs j'obtiens aussi une erreur :
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;
setBinaryStream bloque et me génère une erreur, avec AsVariant ou Value :
InterfaceOleWrapper_Impl::Invoke :
[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper
The VARIANT does not contain an object type!
[OK]
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... ?

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.