Base friert beim Aufruf eines Makros ein [Win7]

Hi Leute!

Ich habe hier eine ziemlich komplexe Datenbank mit Base realisiert. Auf
Linux läuft die auch wunderbar, auf Win7Pro friert LO aber regelmäßig
ziemlich ein.

Meine Recherchen haben mich mittlerweile ein ganzes Stück
weitergebracht. Wir sind mit unserem Büro umgezogen und ich greife
momentan per mobilem Internet auf unseren Fileserver zu. Noch dazu über
einen OpenVPN-Tunnel...

Früher hing ich direkt im Netz... und es wurde immer schlimmer.

Konkret starte ich mit einem Button ein Makro aus einem Base-Formular,
welches eine Abfrage aufruft und dann die Abfrage-Ergebnisse in ein
Writer-Dokument an Textmarken einsetzt. Beim Aufruf des Makro friert nun
LO zu Gänze unauftaubar ein. Nicht immer, aber oft. Und für mich gab es
keinen nachvollziehbaren Grund.

Gestern aber stieß ich auf einen Hinweis, dass es an den Netzlaufwerken
liegen könnte... Auf meiner Linux-Kiste treten diese Probleme nämlich
nicht auf (hier wird alles auf die lokale HD gespeichert). Aber auf der
Windowskiste wird das Writer-Formular direkt in ein Netzlaufwerk
gespeichert.

Habe probehalber die Speicherorte im Makro so geändert, dass auch auf
der Windowskiste die Dokumente lokal auf die HD abgelegt werden. Und
siehe da... ich konnte keinen Freeze mehr feststellen.

Jetzt stelle ich mir aber die Frage, ob das ein Problem von LO ist, dass
irgendwelche Timeouts zu kurz gewählt sind (warum friert dann LO
meistens ein sobald das Makro gestartet wird), oder ob es an Win7 liegt,
welches den Fehler beim Zugriff auf ein Netzlaufwerk auslöst.

Kurzfristig hing auch mal ein Tabellenfile in Excel geöffnet bei einem
Verbindungsproblem, das konnte ich aber nach einigen Sekunden des
Wartens ("keine Rückmeldung" wie auch bei LO) wieder zugriff gewährte.

Ich fand zwar wenige Hinweise, dass es durchaus ein Problem von Win7
sein könnte... aber wirklich befriedigend war keine der Antworten für
mich und mein Problem.

Was würdet ihr vorschlagen, wie ich weiter vorgehen könnte, um dem
Fehler auf die Schliche zu kommen? (Die Freezes sind nämlich ziemlich
ärgerlich!!!)

lg jakob

Hallo,

Snip

Symptom Freeze, wenn keine Verbindung zu Netzlaufwerken

Jetzt stelle ich mir aber die Frage, ob das ein Problem von LO ist, dass
irgendwelche Timeouts zu kurz gewählt sind (warum friert dann LO
meistens ein sobald das Makro gestartet wird), oder ob es an Win7 liegt,
welches den Fehler beim Zugriff auf ein Netzlaufwerk auslöst.

Das ist definitiv _kein_ Problem von LO, sondern von Windows. Das ist bei
uns in der Firma auch mit anderen Anwendungen (CAD greift auf Netzlaufwerke
zu, Dateimanager [QDir], Word, Excel, die LO-Familie) so.

Snip

Ich fand zwar wenige Hinweise, dass es durchaus ein Problem von Win7
sein könnte...

Ist es aber.

aber wirklich befriedigend war keine der Antworten für
mich und mein Problem.

Was würdet ihr vorschlagen, wie ich weiter vorgehen könnte, um dem
Fehler auf die Schliche zu kommen? (Die Freezes sind nämlich ziemlich
ärgerlich!!!)

Windows sucht die nicht vorhandenen Netzlaufwerke (eigentlich
Netzwerkverbindungen) ab und gibt das System erst nach einem Timeout frei.
Und zwar für jede Verbindung einzeln.
Durchforste mal die Registry nach nicht mehr vorhandenen
Netzwerkverbindungen, kann manchmal helfen.
Bei mir hat es Wunder gewirkt.

Hallo Jakob!

Ich gehe davon aus das Du von einem Desktop-PC mit Win7home/professional/ultimate- 32/64 auf ein Netzwerklaufwerk zugreifst. Dazu muss ich sagen: Dies sind alles Endpoint- BS. Win7home/professional/ultimate- 32/64 enthält keiner Bestandteile um ein Netzwerk zu managen!
Dir fehlt also die in Linux enthaltene Komponente. Win ist so aufgebaut das es zwischen Endpoint und LAN/WAN unterscheidet. Um also einen störungsfreien Zugriff zu erlangen müsstest du also das LAN um die Verwaltungsrichtilinie MS Server SBS/2012/2016 oä erweitern.

Grüsse Guido

Hallo Guido!

Hallo Jakob!

Ich gehe davon aus das Du von einem Desktop-PC mit
Win7home/professional/ultimate- 32/64 auf ein Netzwerklaufwerk
zugreifst. Dazu muss ich sagen: Dies sind alles Endpoint- BS.
Win7home/professional/ultimate- 32/64 enthält keiner Bestandteile um ein
Netzwerk zu managen!
Dir fehlt also die in Linux enthaltene Komponente. Win ist so aufgebaut
das es zwischen Endpoint und LAN/WAN unterscheidet. Um also einen
störungsfreien Zugriff zu erlangen müsstest du also das LAN um die
Verwaltungsrichtilinie MS Server SBS/2012/2016 oä erweitern.

Oh!

Ok, das klingt nachvollziehbar. Leider bin ich auf Win "relativ"
unbeholfen (im Gegensatz zu meinen Linux-Kenntnissen)... Hast du da
irgendwo nähere Informationen für mich, wie ich das mache?
Muss ich da das Small-Business-Server-Paket nachkaufen? Oder wie geht das?

lg jakbo

Andere Frage...

Wenn Windows jetzt so herumzickt mit den Netzlaufwerken... gibt es eine
Möglichkeit diesen Fehler im Makro abzufangen, damit LO nicht zur Gänze
einfriert, sondern nur den Speichervorgang unterbricht (und z.B. ein
manuelles Speichern vorschlägt)?

lg jakob

Hallo!

Dazu müsste man die Syncronisierungsfunktion von Windows oder anderen Programmen nutzen.
Nur habe ich mich damit nie beschäftigen müssen. Das denkbar wäre, wäre ein Zeitabbruch in LO
a la "Dieses Laufwerk steht nicht zu Verfügung".... keine Ahnung ob LO so etwas hat- daher das besser aus dem BS generieren.

Grüsse Guido

Hab jetzt - mit diesem Hinweis - am Skript herumgeschraubt...

Hallo!

Dazu müsste man die Syncronisierungsfunktion von Windows oder anderen
Programmen nutzen.
Nur habe ich mich damit nie beschäftigen müssen. Das denkbar wäre, wäre
ein Zeitabbruch in LO
a la "Dieses Laufwerk steht nicht zu Verfügung".... keine Ahnung ob LO
so etwas hat- daher das besser aus dem BS generieren.

Grüsse Guido

Ich habe am Beginn des Makros eine Abfrage "ismissing(Path)" eingebaut,
und am Ende dann die Save-Funktion.

Als ich jeweils vor und nach diesen Befehlen eine Debug-Msgbox einbaute,
fror LO nicht mehr ein...
Dann hab ich die MsgBoxes wieder rausgenommen, wieder ein Freeze-Verhalten.

Jetzt hab ich an die entsprechenden Stellen ein "wait(200)" reingesetzt,
und so wie es aussieht, bleiben die Freezes jetzt weg...

Also doch ein LO-Problem. Das Makro springt weiter, bevor die
Netzwerk-Abfrage fertig ist... und dann spießt es sich.

Eine doofe Verkettung von MS-Verhalten und LO-Verhalten... :-/

Aber als Würgaround kann ich damit einmal leben.

Sollte ich dazu einen Bugreport für LO verfassen?

lg jakob

N´Abend!

Ein WAIT(200) ist aber auch keine Lösung- was wenn´s mal wieder länger dauert?
Hier müsste eindeutig ein Wert zurück gegeben werden und/oder nach Zeitüberschreitung eine Msg.
Also eindeutig ein LO- Problem.

Grüsse Guido

Wie auch meine Anfangsvermutung war... da es mit den Microsoft-Produkten
klappt (wie ungern ich das schreibe... :frowning: )

Ein weiteres Timeout-Problem hab ich auch mit dem Pfad-Objekt

Der Codeabschnitt sieht so aus:

  Path = createunoservice("com.sun.star.util.PathSettings")
  
  sDrive="Y:/"
  'sDrive=ConvertFromUrl(Path.Work & getPathSeparator())
  
  wait(200)
  'msgbox "TEST vor"
  If ismissing(sPath) then
    sPath = sDrive & "MMB\allgemeine Korrespondenz"
  End If

egal welche der beiden "sDrive"-Zeilen ich aktiviere (also lokaler Pfad
oder Remote-Pfad zu einem Network-Drive) ohne dem wait(200) produziert
LO Freezes. In LO 5.0.2 wesentlich öfter als mit LO 4.5.

Es wirkt auf mich so, als ob der Pfad-Service noch nicht voll
initialisiert ist (sagt man da so?) bevor auf es zugegriffen wird. Ich
müsst jetzt noch einmal nachsehen, ob bei den Pfaden auch welche zu
Netzlaufwerken dabei sind... Das würde es wiederum erklären.

Dann würde ich den Fehler eindeutig dort lokalisieren, wo LO auf
Netzlaufwerke zugreift und entweder zu kurze Timeouts hat, und/oder
keine eindeutigen Rückgabewerte liefert...

Lesen hier Entwickler mit?
Soll ich es auch an diese Liste users@de.openoffice.org schicken?

lg jakob

Muss den Code noch mal korrigieren:

  Path = createunoservice("com.sun.star.util.PathSettings")
  
  sDrive="Y:/"
  'sDrive=ConvertFromUrl(Path.Work & getPathSeparator())
  
  wait(200)
  'msgbox "TEST vor"
  If ismissing(sPath) then
    sPath = sDrive & "MMB\allgemeine Korrespondenz"
  End If
  
  'msgbox "TEST mitte"
  wait(200)

  If not FileExists(sPath) Then
      msgbox "TEXT 3"
    Mkdir(sPath)
    If not FileExists(sPath) Then
      sPath = Path.work
    End If
  End If
  wait(200)

Ich benötige alle 3 wait-Kommandos, sonst friert mit LO ein.

Spannenderweise auf Linux (dort wo keine der Netzwerkpfade vorhanden
sind) klappt die Abfrage problemfrei.

Daher vermute ich ganz dringend, dass der Fehler in der Abfrage der
Netzlaufwerke liegt, wo kein oder kein eindeutiger Rückgabewert kommt,
oder der kommt zu spät...

lg jakob

Hallo Jakob,

zum Problem "Einfrieren" und "Wait" fällt mir ein, dass ich etwas
Ähnliches hier bereits verzeichnen konnte:
Ich habe im Handbuch ein Makro beschrieben, wie von einem externen
Formular heraus ein Bericht in der Datenbankdatei aufgerufen werden
kann. Wird jetzt direkt der Bericht des geöffneten Dokumentes
aufgerufen, so ist die Datenbankverbindung noch nicht verfügbar. Der
Bericht erscheint nur mit einem grauen Hintergrund und LibreOffice
verzeichnet einen Absturz. Schon eine kleine Wartezeit von 100
Millisekunden ( Wait(100) ) löst dieses Problem.

Da gibt es also wohl nicht nur ein Problem.

Gruß

Robert