Formular ID-gebunden öffnen

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

Moderator: Moderatoren

gerald3659
*
Beiträge: 19
Registriert: Di, 14.12.2010 07:55

Formular ID-gebunden öffnen

Beitrag von gerald3659 »

Hallo die Cracks,

Ich habe folgendes Problem.

BIsher habe ich mein Hauptformular, das mehrere Unterformulare enthält: Bank, Kommunikation, Ehrungen ...

Aufgrund dessen dass es mittlerweile so viele Ufos angesammelt, dass es mir den Bildschirm sprengt.
Nun möchte ich das ganze auf "Hauptformulare" umstellen, die per Schaltfläche geöffnet werden.
Das öffnen per Button habe ich hin bekommen, dank eines Makros aus dem Forum.
Wie jedoch mache ich es dass es ID-abhängig geöffnet wird.
Also öffne das Formular Kommunikation, solange die Daten dem Feld ID des Formulares entsprechen.
Nur tote Fische schwimmen mit dem Strom
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular ID-gebunden öffnen

Beitrag von DPunch »

Aloha
gerald3659 hat geschrieben:Also öffne das Formular Kommunikation, solange die Daten dem Feld ID des Formulares entsprechen.
Also Du meinst, Du hast in Deinem Hauptformular eine ID, die mit der Tabelle, auf der das Formular "Kommunikation" basiert, verknüpft ist?

Und zeig doch am Besten mal, wieviel Du bisher schon zusammen hast - 2-4 Zeilen in einen Code einzubauen ist erheblich leichter, als alle verwendeten Namen etc. erraten zu müssen.
gerald3659
*
Beiträge: 19
Registriert: Di, 14.12.2010 07:55

Re: Formular ID-gebunden öffnen

Beitrag von gerald3659 »

Erst mal danke für die schnelle Antwort
Zur Zeit verwende ich den unten stehenden Code für das Öffnen der Masken. Hierbei muss in Formulare Kontrollfeld unter Zusatzdaten der Name des Formulares eingestragen werden.

Code: Alles auswählen

sub evCtl_OpenFrom(event as object)
  DIM Tag AS String
  Tag = event.Source.Model.Tag
  oForm() = Split(Tag, ",")
  ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(0)) ).open
  ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(1)) ).close
end sub
Jetzt frage ich mich wie ich hier eine Datenabfrage hinzufügen kann.

Um nicht zuviele Makros zu erhalten wollte ich dies mit "select case" machen, sofern möglich.

Die ganze Sache sieht so aus:
Tabelle Stammdaten
Tabelle Kommunikation
Tabelle Bank
Tabelle Zahlung
Tabelle Ehrung
Tabelle Funktion
Es steht zu erwarten, dass hier noch mehr hinzukommen.
Alle Tabellen enthalten ein Feld Mit_ID und sind mit dem Feld ID in Stammdaten verknüpft. Die Verknüpfung von Stammdaten zu Fremdtabelle = 1:n

Gruß
Gerald
Nur tote Fische schwimmen mit dem Strom
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular ID-gebunden öffnen

Beitrag von DPunch »

Aloha

Davon ausgehend, dass der entsprechende Button sich auf Deinem Hauptformular befindet:

Zuerst brauchst Du die ID des aktuell ausgewählten Datensatzes ala

Code: Alles auswählen

	oMainForm = event.Source.Model.Parent
	nID = oMainForm.getString(oMainForm.findColumn("ID"))
Dann brauchst Du Zugriff auf das Formular des geöffneten Dokuments ala

Code: Alles auswählen

	newDoc = ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(0)) ).open
	newForm = newDoc.Drawpage.Forms(0)
Die einfachste Vorgehensweise wäre jetzt sicherlich die Verwendung eines Filters

Code: Alles auswählen

	newForm.Filter = """Mit_ID"" = " & nID
	newForm.ApplyFilter = True
	newForm.reload
Wenn Du wie Du sagst alle anderen Tabellen über den FK "Mit_ID" mit der Stammdatentabelle verknüpfst, brauchst Du prinzipiell sogar nur dieses eine Makro.
Also im Gesamtkontext

Code: Alles auswählen

sub evCtl_OpenFrom(event as object)
	DIM Tag AS String
	Tag = event.Source.Model.Tag
	oMainForm = event.Source.Model.Parent
	nID = oMainForm.getString(oMainForm.findColumn("ID"))
	oForm() = Split(Tag, ",")
	newDoc = ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(0)) ).open
	newForm = newDoc.Drawpage.Forms(0)
	newForm.Filter = """Mit_ID"" = " & nID
	newForm.ApplyFilter = True
	newForm.reload	
	ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(1)) ).close
end sub
gerald3659
*
Beiträge: 19
Registriert: Di, 14.12.2010 07:55

Re: Formular ID-gebunden öffnen

Beitrag von gerald3659 »

Hallo DPunch

werde es morgen ausprobieren,
habe für heute schon Feierabend gemacht. Musste sein

Trotzdem Danke für die schnelle Antwort

Gruß
Gerald
Nur tote Fische schwimmen mit dem Strom
gerald3659
*
Beiträge: 19
Registriert: Di, 14.12.2010 07:55

Re: Formular ID-gebunden öffnen

Beitrag von gerald3659 »

Hallo DPunch,

Als reines FIlter- und Anzeigeformular ist diese Lösung toll.

Ich nmöchte in diesem Formular jedoch Eingabgen machen und Änderungen durchführen können.
Wie kriege ich das hin?
Nur tote Fische schwimmen mit dem Strom
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular ID-gebunden öffnen

Beitrag von DPunch »

Aloha
gerald3659 hat geschrieben:Ich nmöchte in diesem Formular jedoch Eingabgen machen und Änderungen durchführen können.
Wie kriege ich das hin?
Ich verstehe nicht, was Du meinst.
Wieso kannst Du denn jetzt keine Eingaben / Änderungen vornehmen?
gerald3659
*
Beiträge: 19
Registriert: Di, 14.12.2010 07:55

Re: Formular ID-gebunden öffnen

Beitrag von gerald3659 »

Nach Deiner Antwort habe ich es hier auf der Arbeit ausprobiert.
Funktioniert hier einwandfrei.
Aber wieso zu Hause nicht bei der Datenbank für die ich es au auch brauche?
WO liegt mein Fehler
Grobe Richtung ? Beziehungen?
Keine Ahnung

Gruß
Gerald
Nur tote Fische schwimmen mit dem Strom
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular ID-gebunden öffnen

Beitrag von DPunch »

Aloha

Lässt sich aus der Ferne natürlich schwer sagen.
Vielleicht unter Formular-Eigenschaften "Daten hinzufügen" / "Daten ändern" deaktiviert?

Nachtrag:
Wenn Du die Formulare zum Ändern / Hinzufügen verwendest, hilft die reine Filter-Lösung natürlich nur bedingt, da Du ja theoretisch als Mit_ID auch eine andere als die gefilterte eintragen könntest, bzw Du müsstest die Mit_ID für die aktuell geöffnete Instanz des Formulares kennen, um neue Eingaben zu machen.
gerald3659
*
Beiträge: 19
Registriert: Di, 14.12.2010 07:55

Re: Formular ID-gebunden öffnen

Beitrag von gerald3659 »

eine andere Frage,

siehtst Du eine Möglichkeit, wie ich beim erstellen eines NEUEN Datensatzes die ID aus dem Hauptformular in den verknüpften FK übertragen kann. In der Regel handelt es sich bei mir in den Formularen, in denen ich das anwenden mus um Tabellenkontrollfelder welche an die zu den Formular gehörenden Datenbanktabellen gebunden sind.

Tabelle Stammdaten -> Tabelle Kommunikation
PK = ID -> FK= Mit_ID

Wie kriege ich nun den PK in den FK beim erstellen eines neuen Datensatzes im Formular, das an die Tabelle Kommunikations gebunden ist, ohne es von Hand eintragen zu müssen.

Klar was ich meine?

Besten Dank für eine Auskunft schon im Vorraus

Gerald
Nur tote Fische schwimmen mit dem Strom
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular ID-gebunden öffnen

Beitrag von DPunch »

Aloha
gerald3659 hat geschrieben:Klar was ich meine?
Ja, entspricht ja genau dem, was ich am Ende meines letzten Beitrags gesagt habe.

Meine erste Idee dazu wäre, die Spalte mit der Mit_ID auszublenden und stattdessen ein verstecktes Feld zu verwenden, bei dem man als Default-Wert beim Öffnen die entsprechende ID einträgt.
So wäre es beim normalen Arbeiten damit unmöglich, die ID zu ändern, sie würde jedoch bei jeder Änderung / jedem neuen Datensatz automatisch eingetragen werden.

Wenn Du z.B. einfach mal ein Textfeld in Dein zu öffnendes Formular ziehst -> Sichtbar auf "Nein" -> Reiter "Daten" -> an Spalte "Mit_ID" binden.
Nennen wir es einfach mal "txtMit_ID" (Kontrollfeld -> Eigenschaften -> Name)

Im Makro dieses Feld noch ansprechen und den FK setzen:

Code: Alles auswählen

oTxt = newForm.getByName("txtMit_ID")
oTxt.DefaultText = nID
Also im Gesamtkontext:

Code: Alles auswählen

sub evCtl_OpenFrom(event as object)
   DIM Tag AS String
   Tag = event.Source.Model.Tag
   oMainForm = event.Source.Model.Parent
   nID = oMainForm.getString(oMainForm.findColumn("ID"))
   oForm() = Split(Tag, ",")
   newDoc = ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(0)) ).open
   newForm = newDoc.Drawpage.Forms(0)
   newForm.Filter = """Mit_ID"" = " & nID
   newForm.ApplyFilter = True
   oTxt = newForm.getByName("txtMit_ID")
   oTxt.DefaultText = nID
   newForm.reload   
   ThisDatabaseDocument.FormDocuments.getByName( Trim(oForm(1)) ).close
end sub
(ungetestet, da hier gerade kein OpenOffice zur Verfügung)

Diese Vorgehensweise würde natürlich die Arbeit mit dem Formular beeinträchtigen, wenn es nicht aus dem Hauptformular heraus geöffnet wird.
Keine Ahnung, ob das vorkommt bzw. relevant ist.
Antworten