[gelöst] Bericht für Datensatz per Makro öffnen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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.
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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:

Code: Alles auswählen

sText = thisComponent.drawpage.forms.getByNa...
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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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.
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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.
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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? :wink:

eve
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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?
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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
Dateianhänge
TestDB.odb
(37.41 KiB) 152-mal heruntergeladen
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag von gogo »

Du hast falsch verwiesen

Deine 2 Formulare sehen im Form-Navigator so:

Code: Alles auswählen

Formulare
  +MainForm
     +MainForm_Grid
     +Schaltfläche1
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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
eve
**
Beiträge: 45
Registriert: Mo, 15.06.2009 22:17

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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] :wink:

eve
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: [gelöst] Bericht für Datensatz per Makro öffnen

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Antworten