Seite 1 von 1
Öffnen Form aus Abfrage/Bericht
Verfasst: Mi, 21.11.2012 16:03
von bello15
Hallo,
was ich möchte: Aus meinen Datensätzen wählte ich nach Kriterien welche aus und benutze dazu eine Abfrage. Von den ausgewählten Datensätze sind einige zu ändern. Ich möchte den zu ändernden Datensatz markieren und per Schaltfläche die zu diesem Datensatz gehörigen Form öffnen.
Was habe ich bisher gemacht: Eine Abfrage, läuft einwandfrei. Im Forum nach einer Lösung gesucht und diesen Macro gefunden...
sub open_form
ThisDatabaseDocument.formdocuments.getbyname("Name").open
end sub
In der Abfrage kann ich einen Datensatz markieren/auswählen, aber ich finde keinen Weg, wie ich zur Abfrage eine Schaltfläche erstellen kann um diese mit dem Macro zu verknüpfen. Erstelle ich aus der Abfrage einen Bericht, kann ich die gewünschte Schaltfläche in dem Bericht mit dem Macro erstellen, aber ich kann keinen Datensatz in dem Bericht markieren/selektieren.
Der Macro selbst öffnet immer den ersten Datensatz aus der Datenbank, hier fehlt noch der Weg, dass der Macro den zuvor markierten Datensatz öffnet.
Weiss jemand Rat ? Vorab schon mal vielen Dank.
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Mi, 21.11.2012 16:35
von juetho
Ob du ein Makro durch eine Abfrage auslösen kannst, weiß ich nicht. Ich mache so etwas auf jeden Fall über ein Formular:
- Benutze ein Tabellenkontrollfeld, dessen Datenquelle die Abfrage ist.
- Die Schaltfläche startet über das Ereignis "Aktion ausführen" ein Makro.
- Das Makro notiert den aktuellen Datensatz, startet das gewünschte Formular und übergibt Daten an dieses Formular.
Ob das auch für mehrere Datensätze möglich ist, weiß ich nicht. Ich vermute ja, aber das dürfte komplizierter werden (Zusammenstellen der IDs in einem Array, das Array übergeben, dann das Array wieder auflösen und mehrere Datensätze markieren). Einfacher ist die Änderung jeweils eines Datensatzes; einen Lösungsansatz dazu findest du unter
Parameter von Formular an Formular übergeben; im letzten Beitrag steht die Skizze der vollständigen Lösung. Jürgen
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Do, 22.11.2012 10:54
von bello15
Hallo juetho,
vielen Dank für Deinen Beitrag. Leider komme ich damit nicht weiter. Um Datensätze zu selektieren brauche ich die Abfrage; und in die Abfrage bekomme ich keine Schaltfläche und auch kein Tabellen-Kontrollfeld hinzugefügt. Vielleicht geht das ja, ich weiss nur nicht, wie man das macht.
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Do, 22.11.2012 12:15
von juetho
bello15 hat geschrieben:Um Datensätze zu selektieren brauche ich die Abfrage;
Nicht unbedingt. Die Abfrage liefert erst einmal eine Menge von Datensätzen. Wie damit umgegangen wird, habe ich im ersten Teil meines Vorschlags gesagt:
juetho hat geschrieben:Ich mache so etwas auf jeden Fall über ein Formular:
* Benutze ein Tabellenkontrollfeld, dessen Datenquelle die Abfrage ist.
Das geht sogar ganz einfach mit dem Formular-Assistenten.
bello15 hat geschrieben:Von den ausgewählten Datensätze sind einige zu ändern. Ich möchte den zu ändernden Datensatz markieren und per Schaltfläche die zu diesem Datensatz gehörigen Form öffnen.
Das geht dann über die von mir angegebenen Punkte 2 und 3.
Da niemand sonst sich zu deiner Frage geäußert hat, ist das vermutlich der richtige Weg. Also solltest du ihn gehen und nicht darauf beharren, dass zu einer Abfrage keine Schaltfläche möglich ist. Jürgen
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Do, 22.11.2012 18:01
von RobertG
Hallo Bello15,
in der Abfrage kannst Du keine Makros starten, keine Buttons unterbringen usw.
All dies kannst Du in Formularen, wobei Du zusätzlich auf Deine Abfragen zugreifen kannst und entsprechende Filterungen vom Formular aus vornehmen kannst.
Abfragen sind als Grundlagen für Berichte und Formulare gedacht. Die Hauptschnittstelle vom Datenbanknutzer zur Datenbank bildet aber eben das Formular.
Wenn Du unbedingt das Tabellenaussehen haben willst, dann ist im Formular das Tabellenkontrollfeld das Element, das Du wählen solltest. Du kannst auch das Tabellenkontrollfeld und andere Elemente zusammen in einem Formular kombinieren.
Das Tabellenkontrollfeld bietet neben allem, was die Abfrageansicht bietet, zusätzlich eben auch die Möglichkeit, bestimmte Feldtypen zu integrieren und auch Makros zu starten. Ich wüsste nicht, warum das Feld für Dein Vorhaben ungeeignet ist.
Gruß
Robert
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Fr, 23.11.2012 17:39
von bello15
Hallo juetho, hallo RobertG
sorry, hat gedauert, aber jetzt habe ich kapiert. Das Formular ist die Schnittstelle. Also habe ich ein neues Formular erstellt, ein Tabellen-Kontrollfeld eingefügt und diesem Feld meine Abfrage zugewiesen. Die Abfrage erscheint korrekt in diesem Feld als Tabelle und ich kann einen beliebigen Datensatz markieren (den, den ich ändern will). Auch kann ich in diesem Formular Schaltflächen mit zugewiesenen Macros platzieren.
Um nun einen Macro zu erstellen, der mir von der ausgewählten Spalte das passende Formular öffnet habe ich aus den Hinweisen von juetho diesen macro gefunden und probiert
oForm = ThisComponent.Drawpage.Forms.MainForm 'Wenn das Formular im Formularnavigator MainForm heißt
nID = oForm.getint(1)
Da kommt leider ein Fehler "Basic Laufzeitfehler Eigenschaft/Methode nicht gefunden Drawpage.
Wenn ich statt <ThisComponent.Drawpage.Forms> <ThisDatabaseDocument.FormDocuments> verwende wird als Fehler Objektvariable nicht belegt angezeigt nID = oForm.getint(1).
Die DatensatzID steht bei mir in Spalte 1.
Sicher sehen die Fachleute mit meinen Macrokenntnissen ist nicht weit her.
Darf ich trotzdem nochmal um einen Tipp bitten. Danke!
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Fr, 23.11.2012 17:57
von juetho
bello15 hat geschrieben:
Code: Alles auswählen
oForm = ThisComponent.Drawpage.Forms.MainForm 'Wenn das Formular im Formularnavigator MainForm heißt
nID = oForm.getint(1)
Da kommt leider ein Fehler "Basic Laufzeitfehler Eigenschaft/Methode nicht gefunden Drawpage.
Dieser Fehler tritt üblicherweise dann auf, wenn das Makro aus dem Makro-Editor heraus gestartet wird. Das darf nicht sein! Du musst im Formular-Designer die Eigenschaften der Schaltfläche öffnen, auf der Seite "Ereignisse" unter "Aktion ausführen" dein Makro auswählen und zuordnen. Dann wird das Makro beim Drücken der Schaltfläche korrekt gestartet. Jürgen
PS. Bitte gewöhne dir die Code-Markierung an!
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Sa, 24.11.2012 18:22
von bello15
Hallo,
schönen Dank juetho! Wenn ich Deinem Vorschlag folge, bekomme ich als Fehlermeldung "Eigenschaft/Methode nicht gefunden: selected_dat."
selected_data ist der Name des Formulars mit den ausgewählten Datensätzen. Hier ist der code
Code: Alles auswählen
Sub Open_depending_ID
oForm = ThisComponent.Drawpage.Forms.selected_data 'Wenn das Formular im Formularnavigator MainForm heißt
nID = oForm.getint(1)
End Sub
Weiter habe ich ausprobiert
Code: Alles auswählen
oForm = ThisComponent.Drawpage.Forms. selected_data
oForm = ThisComponent.Drawpage.Forms. "selected_data"
oForm = ThisComponent.Drawpage.Forms. ("selected_data")
Die beiden ersten Varianten ergeben die gleiche Fehlermeldung ("Eigenschaft/Methode nicht gefunden: selected_dat.") , die letzte Variante kommt mit dem Fehler "Variable erwartet.
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Sa, 24.11.2012 19:15
von RobertG
Hallo bello15,
Du verwendest mit "_" ein Sonderzeichen, das vielleicht Probleme bereitet:
Code: Alles auswählen
oForm = ThisComponent.Drawpage.Forms.GetByName("selected_data")
führt da schon sicherer zum Ergebnis.
Folgendes musst Du wissen: Mit dem Punkt zwischen den begriffen werden die verschiedenen Ebenen abstufend verbunden. "ThisComponent" ist die höchte Ebene. Da liegt alles mögliche drin, unter anderem eben die Darstellung grafischer Elemente in der sichtbaren "Drawpage". Die "Drawpage" wiederum kann verschiedene Elemente, unter anderem Formulare, enthalten: "Forms". Zusammen wird daraus eben ThisComponent.Drawpage.Forms
In Deinen Versuchen baust eine Leertaste ein. Alles nach dieser Leertaste gehört nicht mehr zu der Variablen, die Du definierst. Deswegen führen so schon alle 3 zuletzt aufgezeichneten Versuche in die Irre.
Gruß
Robert
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: So, 25.11.2012 18:44
von bello15
Schönen Dank RobertG,
mein code sieht nun so aus
Code: Alles auswählen
Sub Open_depending_ID
oForm = ThisComponent.Drawpage.Forms.GetByName("selecteddata")
nID = oForm.getint(1)
End Sub
Bei dem Formularnamen habe ich den Unterstrich rausgenommen und in dem code GetByName eingefügt. Jetzt bekomme ich :
Basic Laufzeitfehler Exception aufgetreten Type: com.sun.star.container.NoSuchElementException Message:,
Für diese kleine Aufgabe ist nun schon soviel Zeit verwendet worden, sodass ich es aufgebe.
An den "Helfern" recht herzlichen Dank.
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: So, 25.11.2012 20:03
von RobertG
Hallo bello15,
"NoSuchElement" kommt an welcher Position?
Was soll nID = ... eigentlich bewirken? Was soll das Makro erreichen? So tut es momentan sowieso nichts, auch wenn alle Elemente da sind, auch wenn in Spalte 1 Deines Formular eine ID steht, die integer ist.
Vermutlich willst Du ja einen Filter setzen, nur das kommt in Deinem Makro gar nicht vor. Das sehe ich dann, wenn ich den Link weitergehe, den Jürgen in der ersten Antwort gepostet hat.
Gruß
Robert
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: Mo, 26.11.2012 19:19
von bello15
Hallo Robert
RobertG hat geschrieben:
"NoSuchElement" kommt an welcher Position?
die code Zeile oForm = ThisCom...bis einschließlich selecteddata") ist blau unterlegt. Ich nehme an, das ist es, wonach Du fragts.
RobertG hat geschrieben:Was soll nID = ... eigentlich bewirken? Was soll das Makro erreichen? So tut es momentan sowieso nichts, auch wenn alle Elemente da sind, auch wenn in Spalte 1 Deines Formular eine ID steht, die integer ist.
Hallo Robert
In der Abfrage, die im Formular steht, habe ich einen Datensatz markiert. Der Macro soll von dem markierten Datensatz die ID verwenden um das andere Formular mit dem passenden Datensatz zu öffnen. Hier erkenne ich ein Fehler von mir. Bisher hat der Macro noch nicht den Namen des Inputformulars.
RobertG hat geschrieben:Vermutlich willst Du ja einen Filter setzen, nur das kommt in Deinem Makro gar nicht vor. Das sehe ich dann, wenn ich den Link weitergehe, den Jürgen in der ersten Antwort gepostet hat
Sorry, warum man einen Filter braucht, was der tut und wie der aussehen muss habe ich leider keine Ahnung. Ich vermute, es ist zuviel verlangt, einem Anfänger das alles zu erklären. Auf jeden Fall vielen Dank für die Mühe !
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: So, 24.02.2013 13:20
von Masl75
RobertG hat geschrieben:Hallo Bello15,
in der Abfrage kannst Du keine Makros starten, keine Buttons unterbringen usw.
All dies kannst Du in Formularen, wobei Du zusätzlich auf Deine Abfragen zugreifen kannst und entsprechende Filterungen vom Formular aus vornehmen kannst.
Abfragen sind als Grundlagen für Berichte und Formulare gedacht. Die Hauptschnittstelle vom Datenbanknutzer zur Datenbank bildet aber eben das Formular.
Wenn Du unbedingt das Tabellenaussehen haben willst, dann ist im Formular das Tabellenkontrollfeld das Element, das Du wählen solltest. Du kannst auch das Tabellenkontrollfeld und andere Elemente zusammen in einem Formular kombinieren.
Das Tabellenkontrollfeld bietet neben allem, was die Abfrageansicht bietet, zusätzlich eben auch die Möglichkeit, bestimmte Feldtypen zu integrieren und auch Makros zu starten. Ich wüsste nicht, warum das Feld für Dein Vorhaben ungeeignet ist.
Gruß
Robert
Hi Robert,
ich suche verzweifelt einen Weg, Datensätze zu filtern, und zwar sollen nur diejenigen angezeigt werden, bei denen Wert1 < Wert2 ist.
Hast du eine Idee, ob und wie das mit dem Tabellenkontrollfeld* funktioniert?
* Viel kontrollieren kann ich damit derzeit leider nicht...
LG, Marcel
Re: Öffnen Form aus Abfrage/Bericht
Verfasst: So, 24.02.2013 13:59
von juetho
Masl75 hat geschrieben:ich suche verzweifelt einen Weg, Datensätze zu filtern, und zwar sollen nur diejenigen angezeigt werden, bei denen Wert1 < Wert2 ist.
Hast du eine Idee, ob und wie das mit dem Tabellenkontrollfeld* funktioniert?
Gefiltert wird nicht das, was das Tabellenkontrollfeld zeigt, sondern die Datenmenge des Formulars. Öffne also in der Formulardefinition den Formular-Navigator, wähle des (Haupt-) Formular und dafür die Eigenschaften. Im Register "Daten" gibt es ein Feld "Filter". Das sieht zwar so aus, dass ein Feldinhalt nur mit einem festen Wert verglichen werden könnte; aber du kannst den Filter auch manuell eintragen:
Code: Alles auswählen
( "Artikelstammdaten"."Bestand" < "Artikelstammdaten"."Mindestbestand" )
Gruß Jürgen