[gelöst] kill nicht möglich:allg. Ein-/Ausgabefehler bei ...

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] kill nicht möglich:allg. Ein-/Ausgabefehler bei ...

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von F3K Total » So, 29.01.2012 17:39

Hallo Balu,
balu hat geschrieben:...und ob Rik damit was anfangen kann, ist ja auch noch unbekannt.
... aber das ist doch nicht unbekannt:
F3K Total hat geschrieben:Hallo Stephan,
da habe ich wieder was gelernt.
klappt einwandfrei, vielen Dank.
Und das Beste: Auch das entpackte Bild läßt sich ohne zu zicken wieder löschen.
Hier schicke ich dann nochmal meine obige Beispieldatei, in der ich Stephans Verfahren verwende.
Einfach, wenn die DB noch nicht registriert ist, die Sub S_register_DB_with_image_load starten.
Wenn ich die Zeile

Code: Alles auswählen

kill F_unzip_Image
rausnehme, kann ich bei Windows unter C:\Users\<user>\AppData\Local\Temp die Kopie der Datei "Bild.jpg" finden, das ist das Bild, was innerhalb der .odb liegt.

Edit:
DPunch hat geschrieben:Ich kann Dir lediglich sagen, dass Du das Problem umgehen kannst, wenn Du die Datei vor dem Löschen schliesst ...
Hallo DPunch,
die Idee hatte ich auch, aber genau das möchte ich vermeiden. Ich hatte gehofft, es gibt vielleicht so ein ...dispose oder so ähnlich, aber die Nummer mit der temporären Datei funktioniert ja prima ...

Beste Grüße von Rik
Dateianhänge
eingebettete_Grafik_02.odb
(37.47 KiB) 36-mal heruntergeladen

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von balu » So, 29.01.2012 15:41

Hallo Stephan,
Worauf bezieht sich die Frage? Falls sie sich darauf bezieht das du den Code rechtlich verwenden darfst dann ja.
Nifcht wegen rechtlich, sondern schlicht und einfach technisch. Ich persönlich kann es ja nicht testen, und ob Rik damit was anfangen kann, ist ja auch noch unbekannt.



Gruß
balu

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von Stephan » So, 29.01.2012 15:35

Ich find momentan den Thread nicht wieder wo Du deinen hier geposteten Code aber anders vorgestellt hattest. Er war dort aber auch etwas Umfangreicher. Ferner hattest Du da auch auf ein Online Kapitel zu dem Thema bei Gallileo von deinem Buch verwiesen. Ich glaub das war in einem Calc-Thread, bin mir aber nicht sicher.
Ja, kann sein.

Ich habe mal nachgesehen und der Code ist im Buch für OOo 2.3 das erste Mal drin, das stammt von 2008, die Datei aus der ich heute kopiert habe ist besagte Datei für die PrOOo-box (ein Installer, als es mit Extensions noch nicht möglich war Dokumentvorlagen zu installieren) und die Version die ich genutzt hatte war von 2006.

Ich hänge die mal unten an, wobei die dortige Version 4b nun auch wieder nicht diejenige ist aus der ich den code kopiert habe. Letztere war Version 3 die enthält aber alle Vorlagen direkt und ist deshalb über 2 MB groß.
Die Unterschiede zwischen dem alten geposteten und dem hier sind folgende.
Im alten besteht das Makro aus 3 Subs. Wobei eine Sub dem Ereigniss "Dokument öffnen", und eine andere "Dokument wird geschlossen" zugewiesen sind.
Naja, der Code den ich im Buch verwende ist für das Buch gemacht und ihm liegt ein verständlicher Anwendungsfall zugrunde.


Kann man das Makro in der Beispieldatei für diesen Fall hier eventuell verwenden?
Worauf bezieht sich die Frage? Falls sie sich darauf bezieht das du den Code rechtlich verwenden darfst dann ja.




Gruß
Stephan
Dateianhänge
installer_V4b.odt
Datei die ich für die PrOOo-Box programmiert hatte
(27.12 KiB) 39-mal heruntergeladen

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von balu » So, 29.01.2012 15:02

Hallo Leute!

Ich weiß nicht ob mein Kommentar hier irgendwie hilfreich ist, oder nicht. Dennoch möcht ich was dazu sagen, fragen.


@Stephan
Anbei eine simple Beispieldatei.
Ich find momentan den Thread nicht wieder wo Du deinen hier geposteten Code aber anders vorgestellt hattest. Er war dort aber auch etwas Umfangreicher. Ferner hattest Du da auch auf ein Online Kapitel zu dem Thema bei Gallileo von deinem Buch verwiesen. Ich glaub das war in einem Calc-Thread, bin mir aber nicht sicher.

Die Unterschiede zwischen dem alten geposteten und dem hier sind folgende.
Im alten besteht das Makro aus 3 Subs. Wobei eine Sub dem Ereigniss "Dokument öffnen", und eine andere "Dokument wird geschlossen" zugewiesen sind.

Dein hier geposteter Code ist aufgeteilt in die Sub für "Dokument öffnen", und der andere Teil davon ist als Function ausgelagert. Die Sub für "Dokument wird geschlossen" ist für das "Killen" der Grafiken zuständig.

Kann man das Makro in der Beispieldatei für diesen Fall hier eventuell verwenden?
Wenn nicht, ist auch egal.


Da ich die Beispieldatei von Rik hier nicht ans laufen kriege, ich weiß nicht warum, kann ich nicht sagen ob das Makro aus der Beispieldatei irgendwie hilfreich ist.



Gruß
balu
Dateianhänge
btnicos4b.ods
(51.79 KiB) 45-mal heruntergeladen

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von DPunch » So, 29.01.2012 14:13

Servus
F3K Total hat geschrieben:Ich vermute das der Inputstream nicht korrekt geschlossen wird, und das Bild daher noch als "geladen" erkannt wird?
Das sieht nach der wahrscheinlichsten Begründung dafür aus.
Wirklich erklären kann ich mir das selber nicht, dazu müsste man viel tieferen Einblick in die Engine nehmen, um zu wissen, warum und wie das Dokument von OOo offensichtlich noch als geöffnet, und somit gelocked, angesehen wird.

Ich kann Dir lediglich sagen, dass Du das Problem umgehen kannst, wenn Du die Datei vor dem Löschen schliesst, also ala

Code: Alles auswählen

Private oldDocument

Sub S_register_DB_with_image_load
oldDocument = thisComponent
(...)
End Sub

Sub S_rename_DB(sURL_DB,sName_DB)
(...)
if sURL_DB_neu<>sURL_DB then 
oldDocument.close(True)
kill sURL_DB
endif
End Sub
Nachtrag:
Nichtmal das funktioniert zuverlässig, manchmal wird die alte Datei gelöscht, manchmal nicht, manchmal bleibt das umbenannte Dokument geöffnet, manchmal schliesst sich auch dies. Seltsam.

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von Stephan » So, 29.01.2012 12:53

Hallo Rik,

ich weiß dazu leider nichts.
Die Version die Du hier (im anderen Thread) vorgestellt hast war mir im Übrigen neu und den Code den ich hier gepostet habe habe ich aus einem Makros rauskopiert, welches ich 2006 für die PrOOo-Box geschrieben hatte und seitdem unverändert in diversen anderen Makros nutze.


Gruß
Stephan

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von F3K Total » So, 29.01.2012 12:20

Hallo Stephan,
eine Frage habe ich noch. Weißt Du, warum meine Version nicht funktioniert hat?
Ich vermute das der Inputstream nicht korrekt geschlossen wird, und das Bild daher noch als "geladen" erkannt wird?

Gruß Rik

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von F3K Total » So, 29.01.2012 11:51

Hallo Stephan,
da habe ich wieder was gelernt.
klappt einwandfrei, vielen Dank.
Und das Beste: Auch das entpackte Bild läßt sich ohne zu zicken wieder löschen.
Beste Grüße von Rik

Re: kill nicht möglich:allg. Ein-/Ausgabefehler bei .InputSt

von Stephan » So, 29.01.2012 11:06

Hat da jemand eine Idee?
Packe dass Bild ganz normal aus wie es beispielsweise auch bei einer *.odt gemacht werden würde/müßte, dann hast Du ein Bild mit 'externer URL'.

ungefähr so:

Code: Alles auswählen

 tmp_pfad = CreateUnoService("com.sun.star.util.PathSettings")  
  GUI_pfad = tmp_pfad.temp
  
  z = CreateUnoService("com.sun.star.packages.Package")
  args(0) = ThisComponent.URL
  z.initialize(args())
  
  ebene = z.getByHierarchicalName("Bilder")
  alles = ebene.getElementNames()
  
  schreiben = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  
  For i = LBOUND(alles()) To UBOUND(alles())
    stream = z.getByHierarchicalName("Bilder/" & alles(i)).GetInputStream
    schreiben.WriteFile(GUI_pfad & "/" & alles(i), stream) 
  Next i
wobei hier "Bilder" der Name des Ordners ist der sich in erster Ebene in der Datei (hier *.odb) befindet und das Bild würde in das tmp-Verzeichnis des Nutzer geschrieben.




Gruß
Stephan

[gelöst] kill nicht möglich:allg. Ein-/Ausgabefehler bei ...

von F3K Total » So, 29.01.2012 10:41

Guten Morgen zusammen,

in diesem Thread:viewtopic.php?f=18&t=51643#p193021habe ich stolz verkündet, dass es mir gelungen ist, ein Bild in eine entzippte .odb zu legen, was ich später in einem grafischen Kontrollfeld eines Dialoges der DB anzeigen lasse.
Klappt auch prima.
Jetzt versuche ich mein Problem zu beschreiben, was nicht ganz leicht ist.
Ich möchte das Bild in einen Dialog laden, der u.a. zum Umbenennen der Datenbank verwendet wird, folgende Schritte werden durchlaufen:
  • DB öffnen und prüfen ob sie registiert ist, wenn nicht, Registieren.
  • Dialog mit Bild öffnen, Usereingaben, wie z.B. der neue Name der DB
  • DB umbenennen, speichern, registrieren, alte DB abmelden, alte DB von Platte löschen
Und genau hier kommt es zu o.a. Problem, allgemeiner Ein-/Ausgabefehler.
Ich bin mit meinen Forschungen soweit gekommen, das dass Löschen von der Platte nicht möglich ist, wenn ich das Bild in den Dialog per InputStream lade.
Obwohl ich den .Inputstream mit .closeInput wieder schliesse kommt beim Löschen der Datei die Meldung(allgemeiner Ein-/Ausgabefehler) und die Datei wird nicht gelöscht.
Nehme ich einen externen URL um das Bild in den Dialog zu laden, oder lasse ich den Dialog mal weg (Makro 2 unten), kein Problem.
Hat da jemand eine Idee?
Anbei eine Beispieldatei mit zwei Makros:
1.) S_register_DB_with_image_load --> funktioniert nicht
2.) S_register_DB_without_image_load---> funktioniert
Wenn die Makros durchlaufen werden sollen, darf die DB nicht angemeldet sein. Denn das Anmelden ist Bestandteil des Makros. Nach dem ersten Lauf ist sie angemeldet, muß dann also für einen zweiten Lauf wieder abgemeldet werden.
Viele Grüße von Rik
Dateianhänge
eingebettete_Grafik_01.odb
(37.47 KiB) 47-mal heruntergeladen

Nach oben