[delphi] rpc server fout

Pagina: 1
Acties:
  • 209 views sinds 30-01-2008
  • Reageer

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Ik krijg de volgende error in delphi 6:
code:
1
2
3
Project Project1.exe raised exception class 
EOleException with message 'De RPC-server is 
niet beschikbaar'.


button1:
code:
1
2
3
4
WordApplication1.Connect;
WordApplication1.Visible := True;
WordDocument1.Activate;
blabla

button2:
code:
1
2
WordApplication1.Quit;
WordApplication1.Disconnect;


Wanneer ik op button1 klik, wordt er een nieuw word document geopend en met button2 opgeslagen en gesloten. Maar wanneer ik het project niet afsluit, en nogmaals op button1 klik krijg ik die error...

Ik denk dat het ligt bij onjuist gebruikt van bovenstaande code, maar mocht dit niet zo zijn kan ik ook de code posten waarbij anders misschien de fout ligt.
Search levert bovenstaande code op.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

euh, wat is nou precies je vraag :?

edit:
Overigens hoop ik dat dit niet een verkapte dubbelpost wordt voor [rml][ delphi6][ word] hoe te realiseren[/rml]

[ Voor 66% gewijzigd door drm op 06-12-2002 17:44 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
lijkt me nogal voor de hand, waarom ik die error krijg. Maar denk dat het al duidelijk is, bij een application disconnect, kun je schijnbaar in hetzelfde project niet nog es een application opstarten, pas bij sluiten en heropenen van het project.

Verwijderd

IMHO lijkt het mij dat je niet 2 keer kan connecten als je al verbonden bent.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

't zal vast schelen dat je een "al geconnecte applicatie" nog es connect... of niet dan?

als je een nieuwe applicatie connect gaat het vast beter.
kortom, gewoon je knop uitschakelen als je erop gedrukt hebt, want nog een openen is vast niet zo zinvol.

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Dat snap ik, maar ik wil meerdere documenten bewerken in hetzelfde project. Denk ik dan goed als ik worddocument1 steeds activate, en disconnect, en pas bij het verlaten van mijn delphiprogramma wordapplication1.quit en wordapplication.disconnect doe?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Probeer het eens uit zou ik zeggen! :)
Kijk ook even op http://www.djpate.freeserve.co.uk/Automation.htm , want deze pagina gaat hier volledig over.

We adore chaos because we like to restore order - M.C. Escher


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
tuurlijk werkt het, maar is het ook "mooi" programmeren?

die url ken ik :D

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Vinzzz schreef op 06 december 2002 @ 23:02:
Dat snap ik, maar ik wil meerdere documenten bewerken in hetzelfde project. Denk ik dan goed als ik worddocument1 steeds activate, en disconnect, en pas bij het verlaten van mijn delphiprogramma wordapplication1.quit en wordapplication.disconnect doe?

kan je niet een wordapplication[1], wordapplication[2] etc maken en bijhouden als je dat nodig vindt er meerdere te openen :?
(kortom, een array, vector, collection, list, tree whatever je ervoor wilt gebruiken om ze bij te houden)

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
zou kunnen ja. Maar lijkt me wat omslachtig. Ik heb het dus nu werkend met
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
btn1
WordDocument1.Activate;
blablabla
-----------------

bt2
blablabla
WordDocument1.SaveAs(Name, FileFormat, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, OleTrue,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordDocument1.Disconnect;
-----------------

btn3
WordApplication1.Disconnect;


1.ik stuit nu wel op een volgend probleem, vaak krijg ik de msg dat ik een word bestand in verkenner niet zomaar kan openen, maar alleen als alleen-lezen bestand. ik heb dus maw een document verkeerd opgeslagen ofzo (denk ik :? )
Ik heb dus die 3 buttons, en als ik daarmee een nieuw document creeer, vul en op sla, en daarna in verkenner open heb ik geen probleem.
Wanneer ik alle code van de 3 buttons in 1 button zet, krijg ik weer die msg :?
Weet iemand hier misschien wat meer over?

2.Het wil ook maar niet lukken om een bestaand document te openen en daaraan tekst toe te voegen. Code heb ik nu niet bij de hand. Misschien iemand die een handige url kent, buiten http://www.djpate.freeserve.co.uk/AutoWord.htm

3. Mijn vragen hebben betrekking op het volgende. De situatie is NU:
werkgever vult op papier enkele gegevens in (geprint word document), aan de hand daarvan moeten overal wel of niet stukken tekst komen (soort van contract). Een typmiep moet dit allemaal bekijken en voegt die stukken tekst toe aan een bestaand word document met naam klant001.doc (waarbij klantgegevens al zijn gegenereerd uit msacces).
De vraag was dus nu om dit via een programma te automatiseren. Dus invullen van wat textvelden etc en dat het programma dan ook automatisch aan dat bestaande document, de goede stukken tekst toevoegt.
Kan dit het beste via delphi? Of misschien veel handiger met macro's, formulieren ofzo?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

1. Als je m alleen lezen opend is er waarschijnlijk nog iemand die het document open houd. Disconnect sluit alleen de connectie met Word af, het sluit Word zelf niet. Doe eens netjes zoals op die pagina wordt aangegeven een Quit als je Word af wil sluiten of een Close op je document. SaveAs sluit een document niet. Ik snap zo ie zo niet wat je met je disconnect wil bereiken.

2. Vertel ons dan even wat je geprobeerd hebt en wat er niet lukt...

3. Dit kan perfect via Delphi of elke andere taal die met OLE Automation werken kan. VBA is natuurlijk ook een oplossing.

4. Ik denk dat je beter je best moet doen. Tis echt niet moeilijk allemaal en je moet het toch binnen 30 minuten voorelkaar hebben om een document te openen en daar tekst in te stoppen via Delphi. Probeer het ook te begrijpen ipv voorbeeldjes over te tikken.

We adore chaos because we like to restore order - M.C. Escher


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
LordLarry schreef op 07 december 2002 @ 10:10:
1. Doe eens netjes zoals op die pagina wordt aangegeven een Quit als je Word af wil sluiten of een Close op je document. SaveAs sluit een document niet. Ik snap zo ie zo niet wat je met je disconnect wil bereiken.
Heb nu een close, en t werkt, vaag, want weet zeker dat ik dat al es eerder had gedaan. Ik weet de precieze werking van alle commando's niet, dus waarom ik disconnect gebruik -> :? Kan iemand me misschien helpen aan:
code:
1
2
3
Look up the Information property in the VBAWrd help to 
see all the other things you can find out this way - it's quite a 
long list.
(tis word xp)
2. Vertel ons dan even wat je geprobeerd hebt en wat er niet lukt...
btn1 = openen, btn2 = toevoegen, btn3 = saven en sluiten
btn1
code:
1
2
3
4
5
6
7
8
9
var
FileName: OleVariant;
begin
WordApplication1.Connect;
FileName := 'C:\TEST.DOC';
WordApplication1.Documents.OpenOld(FileName, EmptyParam, 
  EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam, 
  EmptyParam,EmptyParam, EmptyParam);
end;

btn2
code:
1
2
3
4
5
6
7
8
9
var
  S: Selection;
begin
  S :=WordApplication1.Selection;
  S.TypeText('Here is some text');
  S.TypeParagraph;
  S.TypeParagraph;
  S.TypeText('And there was a blank line.');
end;

btn3
code:
1
2
3
4
5
6
var
  SaveChs: OleVariant;
begin
  SaveChs := wdSaveChanges;
  WordApplication1.ActiveDocument.Close(SaveChs, 
    EmptyParam, EmptyParam);
3. Dit kan perfect via Delphi of elke andere taal die met OLE Automation werken kan. VBA is natuurlijk ook een oplossing.
ok
4. Ik denk dat je beter je best moet doen. Tis echt niet moeilijk allemaal en je moet het toch binnen 30 minuten voorelkaar hebben om een document te openen en daar tekst in te stoppen via Delphi. Probeer het ook te begrijpen ipv voorbeeldjes over te tikken.
Ik heb gister serieus de hele dag eraan geknutseld, maar door de bomen zag ik t bos niet meer, vandaag ff opnieuw begonnen, en de meeste dingen zijn helder :D

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Vinzzz schreef op 07 December 2002 @ 13:07:
Kan iemand me misschien helpen aan:
code:
1
2
3
Look up the Information property in the VBAWrd help to 
see all the other things you can find out this way - it's quite a 
long list.
(tis word xp)
Staat bij je eigen office. Wel eerst installeren, want dat wordt default niet gedaan.
Of kijk online bij msdn.microsoft.com
btn1 = openen, btn2 = toevoegen, btn3 = saven en sluiten
btn1

..boel code..
En wat werkt er wel en wat werkt er niet?

We adore chaos because we like to restore order - M.C. Escher


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
hmmz, heb mapje met microsoft niet thuis, en online vind ik het (nog) niet.
De code opent test.doc (met daarin de tekst vincent) en button2 voegt daar vóór de tekst "here is some text".Nu moet ik dus nog even uitzoeken hoe ik de tekst erachter krijg ingevoegd

edit: ben eruit, zal strakjes wat code posten. Nu nog die vbaword help, en ik kan me helemaal gaan uitleven

[ Voor 20% gewijzigd door Vinzzz243 op 07-12-2002 16:09 ]


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Damn, ik vind het echt lastig.
Ik kan nu wel mooi wat tekst toevoegen, maar het opmaken is een andere zaak.
Als ik WordApplication1.Selection.TypeText('tekst'); gebruik, kan ik makkelijk aangeven waar vette tekst moet komen, maar dan plaatst ie de tekst altijd aan het begin van het document.
Gebruik ik WordDocument1.Range.Font.Name := 'Arial'; dan maakt ie het hele document in arial op. Logisch, want bij range is geen specificatie opgegeven en DAAR ligt nu juist mn probleem.
Als ik paragraphs kon aanmaken, kon ik alleen die paragraphen opmaken, alleen wil me dat niet lukken, ook niet met die (net gevonden) vba helpl van word.

Ik ben ten einde raad. Ik heb een stukje van een word document ge-upload. Dat stuk moet eigenlijk automatisch gegenereerd worden via delphi. Het maken van koppen en de uitlijning daarvan waag ik me nog niet aan. Als ik maar alvast de kop vet kan maken.

Kan iemand me misschien hiermee helpen? Via msn of mail ofzo, kom er echt niet meer uit.

doc: http://www.groovetime.nl/test2.doc

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Opmaak wordt ruw gezegt op 2 verschillende manieren toegepast:
- Opmaakprofielen, nummering & opsommingstekens: paragraaf/alinea
- Overig (vet, lettertype ed): selectie
Als je WordApplication.Selection.Font gebruikt krijg je wel wat je wilt.

Wat ik altijd doe als ik niet weet hoe het in VBA of Delphi moet is een macro opnemen. Dan krijg je zo iets (sorry voor de lengte, maar de macro legt alle eigenschappen van een object vast. Ook degene die niet gewijzigd zijn):

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'
' Macro1 Macro
' Macro opgenomen op 8-12-2002 door Mark
'
    Selection.Font.Name = "Arial"
    Selection.Font.Name = "Arial"
    Selection.Font.Size = 10
    Selection.Font.Bold = wdToggle
    Selection.TypeText "blaat"
    With ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
        .NumberFormat = "%1."
        .TrailingCharacter = wdTrailingTab
        .NumberStyle = wdListNumberStyleArabic
        .NumberPosition = CentimetersToPoints(0.63)
        .Alignment = wdListLevelAlignLeft
        .TextPosition = CentimetersToPoints(1.27)
        .TabPosition = CentimetersToPoints(1.27)
        .ResetOnHigher = 0
        .StartAt = 1
        With .Font
            .Bold = wdUndefined
            .Italic = wdUndefined
            .StrikeThrough = wdUndefined
            .Subscript = wdUndefined
            .Superscript = wdUndefined
            .Shadow = wdUndefined
            .Outline = wdUndefined
            .Emboss = wdUndefined
            .Engrave = wdUndefined
            .AllCaps = wdUndefined
            .Hidden = wdUndefined
            .Underline = wdUndefined
            .Color = wdUndefined
            .Size = wdUndefined
            .Animation = wdUndefined
            .DoubleStrikeThrough = wdUndefined
            .Name = ""
        End With
        .LinkedStyle = ""
    End With
    ListGalleries(wdNumberGallery).ListTemplates(1).Name = ""
    Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries( _
        wdNumberGallery).ListTemplates(1), ContinuePreviousList:=False, ApplyTo:= _
        wdListApplyToWholeList, DefaultListBehavior:=wdWord9ListBehavior
    Selection.TypeParagraph
    Selection.Style = ActiveDocument.Styles("Standaard")


Daar zit een hoop troep tussen die je niet nodig hebt.

wdToggle doet wat het zegt. True is beter. In VBA kan dat, maar in Delphi is het een integer. Vandaar de ord in Delphi.

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var
  ov : OleVariant;
  ll : ListLevel;
begin
  WordApplication1.Connect;
  WordApplication1.Application.Visible := True;
  WordApplication1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  WordApplication1.Selection.Font.Name := 'Arial';
  WordApplication1.Selection.Font.Size := 10;
  WordApplication1.Selection.Font.Bold := ord(True);
  WordApplication1.Selection.TypeText('blaat');

  ov := 1;
  ll := WordApplication1.ListGalleries.Item(wdNumberGallery).
    ListTemplates.Item(ov).ListLevels.Item(1);

  ll.NumberFormat := '%1.';
  ll.TrailingCharacter := wdTrailingTab;
  ll.NumberStyle := wdListNumberStyleArabic;
  ll.StartAt := 1;
  ll.Font.Bold := ord(true);
  ll.LinkedStyle := '';

  ov := 1;
  WordApplication1.Selection.Range.ListFormat.ApplyListTemplateOld(
    WordApplication1.ListGalleries.Item(wdNumberGallery).ListTemplates.Item(ov),
    EmptyParam, EmptyParam);

  WordApplication1.Selection.TypeParagraph;
  ov := 'Standaard';
  ov := WordApplication1.ActiveDocument.Styles.Item(ov);
  WordApplication1.Selection.Set_Style(ov);
  WordApplication1.Disconnect;
end;


Hint: Maak een sjabloon met opmaakprofielen.

Ja, ik ben niet zo'n with fan dankij een oud collega die dat meerdere keren door elkaar gebruikte :).
Pagina: 1