cs_lomig
Messages postés19Date d'inscriptionmercredi 20 mars 2002StatutMembreDernière intervention15 juillet 2002
-
21 mars 2002 à 09:14
cs_lomig
Messages postés19Date d'inscriptionmercredi 20 mars 2002StatutMembreDernière intervention15 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:
cs_lomig
Messages postés19Date d'inscriptionmercredi 20 mars 2002StatutMembreDernière intervention15 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!
cs_lomig
Messages postés19Date d'inscriptionmercredi 20 mars 2002StatutMembreDernière intervention15 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);
....