Seite 2 von 2
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Do, 17.03.2011 13:02
von DPunch
Aloha
Während Dein Einwand natürlich prinzipiell absolut korrekt ist, ist die Fehlermeldung allerdings eine vollkommen andere.
eve hat geschrieben:Es ist eine Exception aufgetreten
Type:com.sun.star.container.NoSuchElementException
Siehe
OOo API: NoSuchElementException
In diesem Fall liegt der Grund für die Fehlermeldung eindeutig bei der Verwendung von falschen Namen im Code.
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Do, 17.03.2011 14:38
von gogo
...aber wieder die gleiche Meldung,...
hab' ich absichtlich ignoriert, die Fehlermeldung müsste sich ja auf die Methode ".text" beziehen ("Eigenschaft oder Methode nicht gefunden: text")
Als ich die Darstellung dann über Textfelder gemacht habe, funktionierte es auf einmal.
Woran liegt's denn dann?
zur Info:
Ich konnte den Fehler:
ursprünglich nachvollziehen! (HSQL-Datenbank, noch kein Formular erstellt, dann aus dem GUI heraus mit Einfügen/Forular... eines erstellt, Button rein. Speichern) Ein Xray von "thisComponent" ergab, dass thisComponent keine Drawpage beinhaltet! - Dafür aber .FormDocuments! Daher auch der Tipp .FormDocuments statt der Drawpage zu verwenden.
Nach 2-3 Mal rumprobieren funktionierte ".FormDocuments" dann NICHT mehr, und die Drawpage war da.
g
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Do, 17.03.2011 15:30
von DPunch
Aloha
gogo hat geschrieben:Als ich die Darstellung dann über Textfelder gemacht habe, funktionierte es auf einmal.
Woran liegt's denn dann?
Wenn die Fehlermeldung die von eve zitierte ist, dann liegt der Fehler entweder beim Anwender oder es ist ein schwerwiegender Fehler in OOo. Da ersteres in Form von Typos o.Ä. schnell mal passieren kann, gehe ich da aber in der Regel erstmal nicht von einem grundlegenden Bug aus.
Vielleicht hat eve auch vergessen zu erwähnen, dass es mittlerweile eine andere Fehlermeldung gab, bis dahin muss man (oder ich) allerdings davon ausgehen, dass es sich um genau die Fehlermeldung handelt, die er/sie abgetippt oder kopiert hat.
gogo hat geschrieben:Nach 2-3 Mal rumprobieren funktionierte ".FormDocuments" dann NICHT mehr, und die Drawpage war da.
Das passiert in der Tat desöfteren bei der Arbeit mit Base in Verbindung mit XRay und ist mir auch selber schon desöfteren untergekommen.
Als aktives Fenster wird in diesem Fall manchmal die Datenbank selber geschaltet, also quasi das "Hauptfenster".
Dieses beinhaltet logischerweise keine Drawpage, dafür hat es aber natürlich einen Container für die Formulare (FormDocuments).
Der Fehler ist bei mir allerdings bislang ausschliesslich aufgetreten, wenn ich während der Entwicklung mit XRay gearbeitet habe, noch nie bei abgeschlossenen Makros.
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Do, 17.03.2011 15:55
von gogo
Das passiert in der Tat desöfteren bei der Arbeit mit Base in Verbindung mit XRay und ist mir auch selber schon desöfteren untergekommen.
XRay hatte ich erst laufen, als beim ersten Aufruf des Makros die Drawpage nicht gefunden wurde ... und ich mich daher ziemlich gewundert habe, immerhin ist mir das noch nie passiert.
g
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Do, 17.03.2011 16:10
von DPunch
Hast Du möglicherweise das Makro aus der IDE heraus aufgerufen?
Keine Ahnung, ohne XRay ist mir das noch nie untergekommen, entsprechend wenig kann ich dazu sagen.
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Fr, 18.03.2011 15:10
von gogo
Hast Du möglicherweise das Makro aus der IDE heraus aufgerufen?
könnte sein, allerdings hab ich ja kein anderes Kontrollelement als den Button im Formular angelegt (und vermutlich) auch gleich mit dem Makro verbunden...
Sollte ich das nochmal nachstellen können lass ich von mir hören.
g
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Fr, 18.03.2011 22:40
von eve
Haha - gelöst
Code: Alles auswählen
.getByName("ID").Text
... wird einen Fehler ergeben wenn es ein numerisches Feld ist!
Ist aber kein numerisches Feld, daher ergab das keinen Fehler und einem Textfeld ist es ja egal ob da eine Zahl oder Buchstaben drin stehen.
Vielleicht hat eve auch vergessen zu erwähnen, dass es mittlerweile eine andere Fehlermeldung gab
Nein, eine andere Fehlermeldung hatte ich zwischenzeitlich auch nicht.
Nachdem ich jetzt gesehen habe, daß Ihr da noch immer drüber grübelt habe ich jetzt noch mal eine neue Testdatenbank erstellt. Aber auch hier wieder das gleiche. Wenn das ID-Feld im Datenblatt gezeigt wird, kommt die Fehlermeldung. Wenn es aber im Textfeld ist, dann geht’s.
Soll ich das "gelöst" jetzt wieder entfernen?
eve
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: So, 20.03.2011 13:43
von DPunch
Aloha
eve hat geschrieben:Wenn das ID-Feld im Datenblatt gezeigt wird, kommt die Fehlermeldung. Wenn es aber im Textfeld ist, dann geht’s.
Ich verstehe leider nicht, was Du damit sagen willst.
Was habe ich mir unter einem "Datenblatt", in dem eine ID gezeigt wird, vorzustellen?
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Mo, 21.03.2011 12:35
von gogo
ID-Feld im Datenblatt
Verwendest Du ein "Tabellen-Kontrollfeld"?
Dann kannst Du den Zugriff auf das Kontrollfeld wie oben beschrieben machen. Die Werte im Tabellen-Kontrollfeld liegen noch mal eine "Schublade" tiefer ... d.h. Du musst mit dem Index auf die Spalte des Tabellen-Kontrollfelds zugreifen ( oTabellenKontrollfeld.getByIndex(0) ) und dann den eigentlichen Wert mit .getcurrentvalue auslesen.
oTabellenKontrollfeld.getByIndex(0).getcurrentvalue bzw.:
statt
Code: Alles auswählen
sText = thisComponent.drawpage.forms.getByName("Formular1").getByName("ID").Text
Code: Alles auswählen
sText = thisComponent.drawpage.forms.getByName("Formular1").getByName("ID").getByIndex(0).getcurrentvalue
wobei ich bezweifle, dass Dein Tabellen-Kontrollfeld den Namen "ID" hat.
btw: so sehr mir die Diskussion gefällt: langsam wird's notwendig, dass Du eine Beispieldatenbank hochlädst ... bevor wir die ganze API durchbesprochen haben
g
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Mo, 21.03.2011 14:48
von eve
langsam wird's notwendig, dass Du eine Beispieldatenbank hochlädst
Aber gerne doch, dachte ja nicht daß das jemanden wirklich so interessiert nachdem es jetzt endlich läuft. Ich hoffe das mit dem hochladen hat funktioniert, ich habe das nämlich noch nie gemacht.
In der Datenbank sind beide Formularversionen, man muß eben nur den Namen des gewünschten Formulars auf "Formular1" ändern.
eve
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Mo, 21.03.2011 15:22
von gogo
Du hast falsch verwiesen
Deine 2 Formulare sehen im Form-Navigator so:
und so aus:
Code: Alles auswählen
Formulare
+Formular1
+MainForm_Grid
+Schaltfläche1
+ID
Der Verweis:
Code: Alles auswählen
sText = thisComponent.drawpage.forms.getByName("Formular1").getByName("ID").Text
kann nur im 2. Form funktionieren. (Nur hier hast Du ein Formular1 und ein Kontrollelement mit dem Namen "ID"
der Verweis
Code: Alles auswählen
sText = thisComponent.drawpage.forms.getByIndex(0).getByName("MainForm_Grid").getbyindex(0).Text
funktioniert in beiden.
g
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Di, 22.03.2011 10:19
von eve
Das mit dem Formularnamen hatte ich urspünglich bei meinen Versuchen auch schon in Formular 1 geändert. Ich habe jetzt nur für das hochladen das Formular noch mal schnell erstellt und dabei vergessen den Namen zu ändern. Die einzige Ursache für die Meldung war also das mit dem Kontollelement. "getbyname" bezieht sich also nur auf ein Kontrollelement. Da im ersten Fomular die ID ja auch ausgegeben wird (nur eben im MainForm_Grid), dachte ich das müßte doch auch gehen. Naja, mit Macros bin ich eben noch nicht so firm, da muß ich noch einiges lernen. Aber jetzt bin ich ja schon wieder ein Stück weiter.
Vielen Dank für die Mühe und jetzt auch ein endgültiges [gelöst]
eve
Re: [gelöst] Bericht für Datensatz per Makro öffnen
Verfasst: Di, 22.03.2011 10:55
von gogo
eve hat geschrieben:... Die einzige Ursache für die Meldung war also das mit dem Kontollelement. "getbyname" bezieht sich also nur auf ein Kontrollelement...
mit getbyname kannst Du Vieles holen - natürlich auch das Formular.
eve hat geschrieben:... Da im ersten Fomular die ID ja auch ausgegeben wird (nur eben im MainForm_Grid), dachte ich das müßte doch auch gehen.
Geht natürlich auch, aber wie schon gesagt - eine Schublade tiefer.
Das Textfeld "ID" ersparst Du Dir übrigens, wenn Du mit der Methode ".getstring(n)" DIREKT auf die Datengrundlage Deines Formulars zugreifst:
http://www.dannenhoefer.de/faqstarbasic ... ml#Zweig96
g