Hallo,
vor längerer Zeit hatte ich einmal begonnen eine Mitgliederdatenbank in Access anzulegen. Nachdem ich zu Linux gewechselt bin steht natürlich eine Umsetzung in OOo-Base an. Seit einigen Tagen beschäftigt mich jetzt ein Problem, das ich einfach nicht nachvollziehen kann.
Die Datenbank enthält eine Tabelle in der alle persönlichen Daten der Mitglieder drin sind. Designtechnisch natürlich nicht optimal, da sich z. B. Straßennamen wiederholen. Trotzdem möchte ich dies hier nicht weiter thematisieren. Im Rahmen meiner Beschäftigung mit dem Thema "Datenbanken" fand ich die Empfehlung Formulare und Berichte immer auf Abfragen basieren zu lassen, was mir durchaus auch sinnvoll erscheint.
Wenn ich eine Abfrage für die Tabelle Mitglieder anlege, kann ich in dieser Abfrage (und auch im darauf zugreifenden Formular) neue Datensätze anlegen. Jetzt habe ich aber einige Daten, die sich immer wieder wiederholen, bereits in andere Tabellen ausgelagert (z. B. Zahlweise des Beitrags, Bankleitzahl der Kontoverbindung). Sobald ich meine Abfrage nun auf eine dieser zusätzlichen Tabellen zugreifen lasse, lassen sich keine neuen Datensätze mehr in die Tabelle Mitglieder hinzufügen. Warum das so ist ist für mich irgendwie nicht verständlich.
Es wäre nett wenn mir jemand mal Hinweise geben könnte wo hier mein Denkfehler liegt. Ich habe inzwischen bereits auch sämtliche Beziehungen der Tabellen gelöscht und verschiedene Verknüpfungen probiert, aber ich finde den Fehler nicht...
Viele Grüße
Ingo
Keine Einträge möglich wenn Abfrage über mehrere Tabellen
Moderator: Moderatoren
-
- Beiträge: 2
- Registriert: So, 12.04.2009 12:08
Re: Keine Einträge möglich wenn Abfrage über mehrere Tabellen
Leider kannst Du nur Daten erfasssen / ändern, wenn das Formular nur EINE Tabelle geöffnet hat.
Ich habe das so gelöst, daß ich eben nur 1 Tabelle pro Formular öffne und bei Bedarf per SQL zusätzliche Tabellen versorge. In der Haupttabelle sind alle Pflichtfelder und in den anderen eben Zusatzinformationen. Das ist nicht optimal, aber wenn man sein Design danach entwirft, geht es mit minimalem Mehraufwand. Allerdings kannst Du natürlich Zusatzinformationen z.B. über Listboxen abhandeln. Beispiel: Mitgliedsdaten stehen in der Haupttabelle, aber Anrede (Firma, Herr, Frau etc.), Familienstand (verheiratet, verwitwet, alleinstehend etc.) u.s.w. in separaten Tabellen. Die Listboxen verbindest Du im Entwurfsmodus des Formulars per SQL mit den entsprechenden Tabellen (Tabelle "Anreden", "Familienstand" u.s.w.). Dann sind indirekt trotzdem mehrere Tabellen im Formular verfügbar.
Fröhliche Ostergrüße
eBayer
Ich habe das so gelöst, daß ich eben nur 1 Tabelle pro Formular öffne und bei Bedarf per SQL zusätzliche Tabellen versorge. In der Haupttabelle sind alle Pflichtfelder und in den anderen eben Zusatzinformationen. Das ist nicht optimal, aber wenn man sein Design danach entwirft, geht es mit minimalem Mehraufwand. Allerdings kannst Du natürlich Zusatzinformationen z.B. über Listboxen abhandeln. Beispiel: Mitgliedsdaten stehen in der Haupttabelle, aber Anrede (Firma, Herr, Frau etc.), Familienstand (verheiratet, verwitwet, alleinstehend etc.) u.s.w. in separaten Tabellen. Die Listboxen verbindest Du im Entwurfsmodus des Formulars per SQL mit den entsprechenden Tabellen (Tabelle "Anreden", "Familienstand" u.s.w.). Dann sind indirekt trotzdem mehrere Tabellen im Formular verfügbar.
Fröhliche Ostergrüße
eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
-
- Beiträge: 2
- Registriert: So, 12.04.2009 12:08
Re: Keine Einträge möglich wenn Abfrage über mehrere Tabellen
Hallo Ebayer!
Vielen Dank für die schnelle Antwort! Ich dachte schon ich bin irgendwie zu blöd. Bei Access funktioniert das nämlich genau so. Woran liegt es das es bei Base nicht geht? Ich dachte das würde irgendwie zur Funktionalität einer Datenbank gehören verschiedene Tabellen miteinander zu verknüpfen und dann Daten einzugeben? Nun ja, Base befindet sich ja noch in der Entwicklung.
Bedeutet also dass ich mich jetzt mit dem von dir angedeuteten Weg näher auseinandersetzen muss.
Viele Grüße
Ingo
Vielen Dank für die schnelle Antwort! Ich dachte schon ich bin irgendwie zu blöd. Bei Access funktioniert das nämlich genau so. Woran liegt es das es bei Base nicht geht? Ich dachte das würde irgendwie zur Funktionalität einer Datenbank gehören verschiedene Tabellen miteinander zu verknüpfen und dann Daten einzugeben? Nun ja, Base befindet sich ja noch in der Entwicklung.
Bedeutet also dass ich mich jetzt mit dem von dir angedeuteten Weg näher auseinandersetzen muss.
Viele Grüße
Ingo
Re: Keine Einträge möglich wenn Abfrage über mehrere Tabellen
Ich denke, daß Du nicht darum herumkommst. Ist ja auch kein grosses Problem, wenn man es rechtzeitig berücksichtigt.
Ich habe festgestellt, daß man unter dem Zwang andere Wege zu gehen, oft plötzlich erkennt, daß man Dinge auch vereinfachen oder weglassen kann.
Wenn Du nicht um zusätzliche Tabellen in einem Formular herumkommst, legst Du einfach Eingabefelder ohne Datenbindung an. Das Wegschreiben dieser Daten machst Du am besten vom Formular-Ereignis "nach der Datensatzaktion" abhängig. Dann bist Du nicht darauf angewiesen, daß auch immer ordentlich der Speichern-Button, den Du vermutlich ja im Dialog hast, gedrückt werden muß. Auch eine Datensatzbewegung bei geändertem Formular wird so abgefangen.
Allerdings mußt Du beachten, daß geänderte Eingabefelder ohne Datenbindung kein Speichern erzwingen. Evtl. das Ereignis "vor dem Datensatzwechsel" abfangen und dort das Nötige programmieren.
Ich hatte bei der Erfassung von vielen Daten das Problem, daß die Daten nicht oder nicht zur rechten Zeit physisch in die Datenbank geschrieben wurden. Solange ich mich als Windows-Benutzer nicht abgemeldet hatte, waren die Daten auch bei wiederholtem Aufruf der Anwendung verfügbar, also alles OK. Meldete ich mich aber als Windows-Benutzer ab und danach wieder an, so waren die Daten verschwunden. Allerdings war das bei mir mit der Besonderheit verbunden, daß ich meine Anwendung mit einem externen Formular, welches ich als Menu eingesetzt habe, starte. Dadurch verhindere ich, daß der Anwender Zugriff auf die IDE bekommt.
Lösung um die physische Speicherung der Daten zu erzwingen: gezieltes Speichern der Daten beim Ereignis "nach der Datensatzaktion"
DBDoc = oEvent.Source.Parent.Parent.Parent
DBDoc.store()
Das mußt Du allerdings sinngemäß anpassen.
Hört sich kompliziert an, war es bei mir auch bis ich den Lösungsweg gefunden hatte, aber mit diesen Vorinformationen ist es wirlich ganz einfach.
Also auf geht's ...... viel Spaß
Ich habe festgestellt, daß man unter dem Zwang andere Wege zu gehen, oft plötzlich erkennt, daß man Dinge auch vereinfachen oder weglassen kann.
Wenn Du nicht um zusätzliche Tabellen in einem Formular herumkommst, legst Du einfach Eingabefelder ohne Datenbindung an. Das Wegschreiben dieser Daten machst Du am besten vom Formular-Ereignis "nach der Datensatzaktion" abhängig. Dann bist Du nicht darauf angewiesen, daß auch immer ordentlich der Speichern-Button, den Du vermutlich ja im Dialog hast, gedrückt werden muß. Auch eine Datensatzbewegung bei geändertem Formular wird so abgefangen.
Allerdings mußt Du beachten, daß geänderte Eingabefelder ohne Datenbindung kein Speichern erzwingen. Evtl. das Ereignis "vor dem Datensatzwechsel" abfangen und dort das Nötige programmieren.
Ich hatte bei der Erfassung von vielen Daten das Problem, daß die Daten nicht oder nicht zur rechten Zeit physisch in die Datenbank geschrieben wurden. Solange ich mich als Windows-Benutzer nicht abgemeldet hatte, waren die Daten auch bei wiederholtem Aufruf der Anwendung verfügbar, also alles OK. Meldete ich mich aber als Windows-Benutzer ab und danach wieder an, so waren die Daten verschwunden. Allerdings war das bei mir mit der Besonderheit verbunden, daß ich meine Anwendung mit einem externen Formular, welches ich als Menu eingesetzt habe, starte. Dadurch verhindere ich, daß der Anwender Zugriff auf die IDE bekommt.
Lösung um die physische Speicherung der Daten zu erzwingen: gezieltes Speichern der Daten beim Ereignis "nach der Datensatzaktion"
DBDoc = oEvent.Source.Parent.Parent.Parent
DBDoc.store()
Das mußt Du allerdings sinngemäß anpassen.
Hört sich kompliziert an, war es bei mir auch bis ich den Lösungsweg gefunden hatte, aber mit diesen Vorinformationen ist es wirlich ganz einfach.
Also auf geht's ...... viel Spaß
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008