Delphi 5 , Paradox et "Blob OLE fichiers Word"

cs_lomig Messages postés 19 Date d'inscription mercredi 20 mars 2002 Statut Membre Dernière intervention 15 juillet 2002 - 21 mars 2002 à 09:14
cs_lomig Messages postés 19 Date d'inscription mercredi 20 mars 2002 Statut Membre Dernière intervention 15 juillet 2002 - 25 mars 2002 à 12:04
Bonjour, je travaille actuellement sur une BDD dont une des tables contient un champ contenant un fichiers word (liens OLE).
j'ai bien compris que pour l'utiliser a partir de mon interface Delphi il faut que j'utilise des streams, des Blobs etc...

J'ai déclaré un TBlobStream et un TBlobField pour récupérer le document word et y avoir accès via le stream TBLobStream. Mon problème est que je n'arrive a pas à récuperer le Blob qui est dans la table. Je pensais faire un truc comme suit:

UnBlobField.create( TBlobField(DataModulePrincipal.dtsrcMaTable.DataSet.Fields[3]));
TamponBlob.Create(UnBlobField,bmRead);

Mais ca marche pas ca me fait une erreur à l'éxécution

Quelqu'un aurait-il quelques idées à me filer pour la manipulation de ces objets Blobs contenant des ficheirs Word, SVP????

2 réponses

cs_lomig Messages postés 19 Date d'inscription mercredi 20 mars 2002 Statut Membre Dernière intervention 15 juillet 2002
21 mars 2002 à 11:10
J'ai testé un nouveau truc qui me semblait pas mal et la ca déclanche une erreur de type:" ... à provoqué une classe d'exception EOLError, avec le message 'Format de flux incorrect'...":

Voici le code correspondant:
//sachant que le 4ieme champ de ma table contient le fichier Word
//TamponBlob est déclaré comme TBlobStream
//olcDocument est un TOleContainer

TamponBlob:= TBlobStream.Create(DataModulePrincipal.dtsrcMaTable.DataSet.Fields[3] as TBlobField,bmRead);
Try
if TamponBlob.Size > 0 then
unitPrincipale.frmPrincipal.olcDocument.LoadFromStream(TamponBlob);
Finally
TamponBlob.Free;
End;

Argggghhhh, ca commence à m'enerver sérieusement tout ca!

Guillaume JAN (gj@oggam.org)
0
cs_lomig Messages postés 19 Date d'inscription mercredi 20 mars 2002 Statut Membre Dernière intervention 15 juillet 2002
25 mars 2002 à 12:04
Si jamais ca interesse quelqu'un, j'ai résolu le problème! En fait les
champs OLE produits directement a partir de l'interface du SGBD
PARADOX sont différents de ceux produit pour paradox mais a partir de
son appli sous Delphi. Or les classe genre TBlobStream fonctionnent
avec les OLE PARADOX produit par Delphi et pas avec ceux produit par
PARADOX. Et ca c'est marqué nul part c'est dingue quand meme! Si j'en
avais pas discuté avec quelqu'un qui a passé quelque semaines sur ce
meme problème, j'y serais encore!

Bon sinon vu que tout le monde se précipite pour répondre à mes
questions, en voici une nouvelle(simple ce coup ci):

-Dans mon TBlobStream, j'ai mon fichier Word! Je veux récupérer juste
le texte... Pour l'instant je l'ai dans un TOleContainer et puis j'ai
récupérer le text du TOleContainer dans une chaine mai s bon c'est pas
top, vu que je récupere les retour chariot en ^p... Enfin bref je
voudrais utiliser les fonctionnalités de word comme copy pour mettre
ca dans le clipboard et apres transférer le contenun du clipboard dans
un nouveau document texte tout simple... Qequn a des idées????

voici un bout de mon code actuel:

procedure TfrmPrincipal.btnLancerAnonymisationClick(Sender: TObject);
Var

LeTexteDuDoc: String;

TamponBlob: TBlobStream;

LeFichierDest: TFieldStream;

begin

if DataModulePrincipal.dtsrcMaTable.DataSet.Fields[3].IsBlob() then
begin
Application.MessageBox('C''est un Blob','Est ce un blob',MB_OK);

TamponBlob:= TBlobStream.Create(DataModulePrincipal.dtsrcMaTable.DataSet.Fields[3]
as TBlobField,bmRead);

Try
if TamponBlob.Size > 0 then
unitPrincipale.frmPrincipal.oleDocument.LoadFromStream(TamponBlob);
unitPrincipale.frmPrincipal.oleDocument.visible:=True;
unitPrincipale.frmPrincipal.olcDocument.Run;
LeTexteDuDoc:=unitPrincipale.frmPrincipal.olcDocument.OleObject.range.text;
LeFichierDest:=TFileStream.create('c:\Anonymisation\test.txt',mOpenWrite);
....

Finally
TamponBlob.Free;
unitPrincipale.frmPrincipal.oleDocument.DestroyObject;

End;
end;
0
Rejoignez-nous