a l'activation de ma form2 je cree l'objet document de word
je recupere le champ blob de ma base mysql
ensuite l'utilisateur change ce qu'il veut ds le document
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
19
20
21 if olecontainer1.State = osempty then olecontainer1.createobject('Word.document.8',false) ; vmsword := Olecontainer1.OleObject ; olecontainer1.DoVerb(0); vMSword.application.Selection.Font.Size:=12; form34.ClientDataSet1.Edit ; blob := form34.ClientDataSet1.CreateBlobStream(form34.ClientDataSet1.FieldByName('textfax'), bmReadWrite) ; try blob.Seek(0, soFromBeginning); fs := TFileStream.Create(chemin + 'temp.rtf', fmcreate or fmShareDenyWrite); try fs.CopyFrom(blob, blob.Size) ; finally fs.Free end; finally blob.Free end ; vmsword.application.Selection.InsertFile(FileName:= chemin + 'temp.rtf') ;
j'enregistre ds ma base mysql
mon bouton quitter
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 procedure TForm37.Enregistrer1Click(Sender: TObject); begin vmsword.saveas(chemin + 'tmp.rtf') ; SQLREQ.Close ; SQLREQ.CommandText := 'update g_faxenv set textfax = :text ' + ' where numaff = :numaff and nocfenv = :nocfenv' ; fic := chemin + 'tmp.rtf' ; SQLREQ.Params[0].LoadFromFile(fic,ftblob) ; SQLREQ.Params[1].AsString := form34.Edit6.Text ; SQLREQ.Params[2].AsString := form34.nocfenv ; SQLREQ.ExecSQL(false) ; vmsword.application.Selection.Endkey ; showmessage('enregistrement effectué') ;
je fais destroy object pour effacer le texte saisi lors de la derniere utilisation de cette form2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm37.Quitter1Click(Sender: TObject); form34.SQLdataset1.Close ; form34.ClientDataset1.Close ; Olecontainer1.destroyobject ; form34.Close ; close ;
je peux fermer la form2 la réouvrir avec un autre enregistrement pas de probleme ça marche
( une forme principale avec un bouton qui va sur form2 )
( sur form 2 on choisit l'enregistrement que l'on veut faire afficher ds word .. bouton qui va sur form3 )
( form3 ..mon olecontainer et un menu Enregistrer Quitter)
mais quand je quitte la form principale de mon application , j'ai le message d'erreur :
je ne peux pas faire de vmsword.close ou vmsword.application.quit (vmsword est le variant correspondant a l'oleobject du ole container )violation d'acces a l'adresse 7FF47C10 dans le module ole32.dll
vous remarquerez que je crée un document word et pas une instance de l'application MSWord
si vous avez une idée de la provenance de ce message d'erreur ?..
Code : Sélectionner tout - Visualiser dans une fenêtre à part olecontainer1.createobject('Word.document.8',false) ;
j'ai pensé amais je ne sais pas trop à quoi ça correspond "acces de bas niveau à l' API OLE"
Code : Sélectionner tout - Visualiser dans une fenêtre à part olecontainer.oleobjectinterface._release
Merci pour votre aide
Partager