Formular2 mit Datensatz aus Formular1 öffnen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Yaddayadda
**
Beiträge: 34
Registriert: Mi, 20.06.2012 14:13

Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von Yaddayadda »

Hallo,

ich möchte gerne per Schaltfläche einen bestimmten Datensatz, der in Formular1 angezeigt wird (als Ergebnis einer Suche) in einem 2. Formular öffnen (zur dortigen Bearbeitung, da Formular1 nicht editierbar sein soll).

Dazu habe ich mir dieses Makro gebastelt:

Code: Alles auswählen

SUB Datensatz_auslesen

' Zugriff auf Formular

   DIM oID AS OBJECT
   dim oDoc as object
   dim oForm1 as object
   dim oForm2 as object
   DIM iID AS INTEGER
      
   oDoc=thisComponent
   oDrawpage=oDoc.drawpage
   oForm1=oDrawpage.forms.getByName("Anzeige")
   oForm2=thisdatabasedocument.FormDocuments.getbyname("Stammdaten")
   
' Filter setzen. "value" gilt bei Integer-Werten, wenn es Text ist, ersetze "value" durch "text"   
' die Variable iID nimmt den Wert auf und verwendet ihn für den Formular-Filter   
   
   oID = oForm1.getByName("ID") 
   iID = oID.value
   oForm2.open
   oForm2.filter = " ""ID"" LIKE '" & iID & "'"
   oForm2.ApplyFilter=true 
   
' Formular aktualisieren
   oForm2.reload

END SUB
Es klappt bis zu dem Punkt, an dem sich das zweite Formular öffnet, dann erscheint die Fehlermeldung "Eigenschaften oder Methode nicht gefunden: filter", dazu ist die Zeile

Code: Alles auswählen

 oForm2.filter = " ""ID"" LIKE '" & iID & "'"
markiert.

Wieso klappt es nicht? Was fehlt meinem Formular2, um den Filter mit der übermittelten ID aus Formular1 setzen zu können? Liegt es daran, dass Formular2 nur immer 1 datensatz anzeigt und keine Tabelle? Wie kann ich sonst das Formular mit einem bestimmten Datensatz öffnen lassen?

Danke für eure Hilfe,
Gruß,
Yaddayadda
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von F3K Total »

Hallo,
oForm2 ist doch Dein Formdocument.
Auf das kannst Du den Filter nicht setzen.
Versuch es mal so, <Formularname> mußt Du noch ersetzen, ungetestet:

Code: Alles auswählen

SUB Datensatz_auslesen

' Zugriff auf Formular

   DIM oID AS OBJECT
   dim oDoc as object
   dim oForm1 as object
   dim oFormdoc2 as object
   dim oForm2 as object
   DIM iID AS INTEGER
     
   oDoc=thisComponent
   oDrawpage=oDoc.drawpage
   oForm1=oDrawpage.forms.getByName("Anzeige")
   oFormdoc2=thisdatabasedocument.FormDocuments.getbyname("Stammdaten")
  
   
' Filter setzen. "value" gilt bei Integer-Werten, wenn es Text ist, ersetze "value" durch "text"   
' die Variable iID nimmt den Wert auf und verwendet ihn für den Formular-Filter   
   
   oID = oForm1.getByName("ID")
   iID = oID.value
   oFormdoc2.open
   oform2 = oFormdoc2.drawpage.forms.getbyname("<Formularname>")' kenne ich nicht
   oForm2.filter = " ""ID"" LIKE '" & iID & "'"
   oForm2.ApplyFilter=true
   
' Formular aktualisieren
   oForm2.reload

END SUB
Gruß R
Yaddayadda
**
Beiträge: 34
Registriert: Mi, 20.06.2012 14:13

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von Yaddayadda »

Habe den Formularnamen angepasst und es getestet, aber nun kommt die Fehlermeldung "drawpage" nicht gefunden, markiert ist dabei die Zeile mit dem eingefügten Formularnamen (der aber korrekt ist). :-(
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von F3K Total »

jo, korrekt, da habe ich noch eine Kleinigkeit vergessen: Component
So müßte es funktionieren:

Code: Alles auswählen

SUB Datensatz_auslesen

    ' Zugriff auf Formular

       DIM oID AS OBJECT
       dim oDoc as object
       dim oForm1 as object
       dim oFormdoc2 as object
       dim oForm2 as object
       DIM iID AS INTEGER
         
       oDoc=thisComponent
       oDrawpage=oDoc.drawpage
       oForm1=oDrawpage.forms.getByName("Anzeige")
       oFormdoc2=thisdatabasedocument.FormDocuments.getbyname("Stammdaten")
     
       
    ' Filter setzen. "value" gilt bei Integer-Werten, wenn es Text ist, ersetze "value" durch "text"   
    ' die Variable iID nimmt den Wert auf und verwendet ihn für den Formular-Filter   
       
       oID = oForm1.getByName("ID")
       iID = oID.value
       oFormdoc2.open
       oform2 = oFormdoc2.Component.drawpage.forms.getbyname("<Formularname>")' kenne ich nicht
       oForm2.filter = " ""ID"" LIKE '" & iID & "'"
       oForm2.ApplyFilter=true
       
    ' Formular aktualisieren
       oForm2.reload

    END SUB
Gruß R
Yaddayadda
**
Beiträge: 34
Registriert: Mi, 20.06.2012 14:13

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von Yaddayadda »

Es klappt! :D Und wieder tausend Dank für deine Hilfe!

Gruß,
Yaddayadda
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von F3K Total »

Hast du auch verstanden warum?
Gruß R
Yaddayadda
**
Beiträge: 34
Registriert: Mi, 20.06.2012 14:13

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von Yaddayadda »

Weil oForm2 nicht in thisComponent liegt!?
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular2 mit Datensatz aus Formular1 öffnen

Beitrag von F3K Total »

Hallo Yaddayadda,
ich versuche, es mit meinen Worten zu erklären:
Das Verwirrende ist, dass Formulardokumente und die auf der Zeichenfläche (Drawpage) dieser Dokumente im Hintergrund liegenden Forms beide mit dem Begriff Formular bezeichnet werden, aber etwas völlig unterschiedliches sind.

Mit

Code: Alles auswählen

oformdoc2.open
öffnest Du das Formulardokument dessen Name ich nicht kenne (<Formularname>)
Es ist in Base eingebettet und eigentlich ein Writer Dokument.
Du siehst die Formulardokumente, wenn du in BASE links das Icon "Formulare" anklickst.

Ist es mit

Code: Alles auswählen

formdoc2.open
geöffnet, stehst Du mit diesem Formular an fast der gleichen Stelle, wie im ersten Formular, wenn Du es per Doppelklick geöffnet hast.
Statt ThisComponent nimmst Du nun .Component.
Ab hier kommst du zu denen im Hintergrund liegenden Forms mit

Code: Alles auswählen

.drawpage.forms.getbyname("<Formularname>")
Im Entwurfsmodus des Formulardokumentes kannst du den Formularnavigator einschalten, um diese "anderen" Formulare zu bearbeiten/alanysieren.

Ich empfehle Dir die Verwendung eines Inspection-Tools wie MRI oder Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten.

Gruß R
Antworten