Problem bei Ereignisgesteuertem Aufrufen eines Makros

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

bobkins
Beiträge: 7
Registriert: Mo, 17.10.2005 22:25

Problem bei Ereignisgesteuertem Aufrufen eines Makros

Beitrag von bobkins »

Hallo Allerseits!
Nutze OO 2.0rc3 und habe ein Problemchen an dem ich verzweifele:

Hab eine kleine Datenbank, die u.a. ein Formular enthält. Beim Wechseln eines Datensatzes (z.B. über die Datansatznavigation) soll ein Makro aufgerufen werden. Wie das prinzipiell funktionieren sollte ist mir soweit klar, nämlich beim Ereignis des Formulars "Nach dem Datensatzwechsel" ein Makro ausführen.

Jetzt kommt das Problem: Wenn ich das Formular nun öffne (wird übrigens im Writer im schreibgeschützten Modus geöffnet) erhalte ich folgende Fehlermeldung:

Ein Scripting Frameword Fehler trat während der Ausführung von Basis script vnd.sun.star.script:EA.EAMakros.Formular_Change?language=Basic&location=document auf. Meldung: BasicProviderImpl::getScript: no script!

Soll vermutlich aussagen, dass das Script ganz einfach nicht vorhanden ist. Ist es aber doch! Und zwar genau da, wo es sein sollte. Merkwürdigerweise wird das Makro trotzdem ausgeführt.

Des weiteren taucht noch eine zweite Merkwürdigkeit auf:
Wenn man in den Beabeitungsmodus des Formulars geht und dann die Entwurfsansich ausschaltet kommt diese Fehlermeldung:

Fehler beim Laden des BASIC des Dokuments script-lb.xml: Allgemeiner Fehler. Allgemeiner Ein-/Ausgabefehler.

??? In diesem Fall funktionieren die Makros so wie gewünscht. Wenn man jetzt noch einmal zurück in die Entwurfsansicht wechselt und wieder zurück, kommt diese zweite Fehlermeldung nicht mehr. Erst wieder wenn das Formular komplett geschlossen wurde.

Woran kann dieses merkwürdige Verhalten liegen? Oder ist das vielleicht "nur" ein Bug im RC3?

Hoffe konnte mein Problem verständlich rüberbringen und würde mich über Hilfe oder paar Tips eurerseits freuen!

Danke! Grüße bobkins
bobkins
Beiträge: 7
Registriert: Mo, 17.10.2005 22:25

Beitrag von bobkins »

Des weiteren taucht noch eine zweite Merkwürdigkeit auf:
Wenn man in den Beabeitungsmodus des Formulars geht und dann die Entwurfsansich ausschaltet kommt diese Fehlermeldung:

Fehler beim Laden des BASIC des Dokuments script-lb.xml: Allgemeiner Fehler. Allgemeiner Ein-/Ausgabefehler.

??? In diesem Fall funktionieren die Makros so wie gewünscht. Wenn man jetzt noch einmal zurück in die Entwurfsansicht wechselt und wieder zurück, kommt diese zweite Fehlermeldung nicht mehr. Erst wieder wenn das Formular komplett geschlossen wurde.
Hi!
Bin endlich - nach vielen Stunden Suche - dem zitierten Fehler auf die schliche gekommen: Kein Quellcode in der Main-Prozedur. Eine einzige Zeile Quellcode reicht aus, und schon ein Fehler weniger.

Das wirft aber eine weitere Frage bei mir auf:
Ist das von den Entwicklern so vorgesehen? Macht eigentlich Sinn etwas in die Main-Prozedur zu schreiben, oder? Was mein ihr?

Gruß bobkins
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ja, also bei mir entsteht aus Deinem ersten Post zunächst die Frage wie Du das hier konkret machst:
Wie das prinzipiell funktionieren sollte ist mir soweit klar, nämlich beim Ereignis des Formulars "Nach dem Datensatzwechsel" ein Makro ausführen.


Ich habe jetzt hier nicht die *aller*neueste Version der 1.9.xxx vorliegen, aber bei mir gibt es dafür kein Standardereignis, was dann nahelegt Du registrierst selber einen Listener der mit dem Standardereignis "Dokument öffnen" gestartet wird. Wie lautet dann Dein Code zur Registrierung dieses Listeners? (Oder was machst Du statt dessen?)
Das wirft aber eine weitere Frage bei mir auf:
Ist das von den Entwicklern so vorgesehen? Macht eigentlich Sinn etwas in die Main-Prozedur zu schreiben, oder? Was mein ihr?


Kann ich nichts zu sagen. Der Grund dafür scheint mir aber zu sein das OOo in der Basic-IDE immer nur das Makro ausführt was im Modul ganz oben steht, wenn Du auf ausführen klickst (und nicht wie bei VBA das in welchem der Cursor steht).
Da das so ist dürften die Probleme so liegen das es nicht um "Main" geht, sondern um das erste Makro ansich.

Allerdings ist mir unklar wie Du das genannte Ereignis ddedektierst (s.o) und deshalb auch unklar warum jetzt hier Probleme entstehen, da ich davon ausgehe das "Main" selbst nicht stört, ich dann aber vor der Frage stehe wie es Dir gelingt das erste Makro im Modul aufzurufen und nicht ein spezfiziertes. (Ich hätte da nichtmal eine Lösung dafür selbst wenn ich das wollte.)


Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Gut, vergiß meinen vorgehenden Post weitestgehend. Ich hatte Dich falsch verstanden und sehe jetzt was Du meinst.

Ich habe jedoch hier keinen RC3, kann das Verhalten aber mit 1.9.104 bestätigen.

Die Sache scheint mir etwas defizil, weil anfangs nicht der richtige Eintrag in die Ereignisliste übernommen wird, beim zweiten Versuch jedoch doch.

Ohne das ich jetzt detailliert hier hinschreibe was ich versucht habe, scheint mir der Fehler damit zusammenzuhängen das die Sortierung der Makros im Modul bei Anzeige in einer Liste (z.B. beim Zuweisen Dialog) von 1.1.x auf 2.0 geändert wurde. Entweder waren die in 1.1.x alphabetisch sortiert und in 2.0 in Reihenfolge wie im Modul, oder umgekehrt.

(Umgehung derzeitig wohl dadurch das Du den Namen Deines Makros so wählst das er alphabetisch hinter "Main" liegt, ist aber nur sehr oberflächlich von mir getestet, andererseits scheint händisches Ändern des Makroeintrags in der Ausführenliste auch nicht zuverlässig zu sein.)

Da ich derzeitig keinen RC3 habe muß ich erst einen besorgen und anschließend nochmals testen. Besteht das Problem weiter werde ich eine Fehlermeldung schreiben damit es beseitigt wird, denn ich denke auch da ist tatsächlich ein Fehler.



Gruß
Stephan
bobkins
Beiträge: 7
Registriert: Mo, 17.10.2005 22:25

Beitrag von bobkins »

Hallo Stephan!

Zunächst danke für die Antwort. Doch leider kann ich das mit der alphabetischen Sortierung der Makros in meiner DB nicht nachvollziehen.
Sobald Quellcode in der Main-Prozedur enthalten ist, verschwindet die Fehlermeldung.

Auch wird ein Ereignis sofort korrekt in der Ereignisliste eingetragen.

Übrigens: Der erste von mir beschriebene Fehler ist verschwunden nachdem ich ein neues Formular erstellt habe. Dummerweise hab ich dabei das alte (defekte) gelöscht und kann nicht mehr nachvollziehen, wie dieser erste Fehler zustande gekommen sein könnte.

bobkins
Antworten