Hallo,
ich habe eine MySQL Datenbankverbindung zu Base, die recht gut funktioniert. Folgendes Problem habe ich bei der Dateneingabe über Base-Formular:
Ein Formular (id (primary key), person) enthält ein subformular (id (primary key), person_id (verknüpft mit person.id), ......)
Die verknüpfung funktioniert auch insoweit, als ich durch die personen-datensätze blättern kann und dabei jeweils im subformular die korrekte person_id mit zugehörigen daten angezeigt wird. Das problem entsteht, wenn ich einen neuen Datensatz in das subformular eingeben will. Es wird dabei zunächst die korrekte person_id angezeigt, wenn ich aber den datensatz speichere, springt das feld person_id grundsätzlich auf 0 zurück und der Eintrag ist auch nicht, wie gewollt, person 123 zugeordnet, sondern person 0. Wenn ich dagegen manuell in das Feld person_id des Subformulars die korrekte zahl hineinschreibe, wird der datensatz korrekt zugeordnet beim Abspeichern.
Ich hoffe, das war einigermaßen nachvollziehbar. Kennt irgendjemand das Problem? Könnte es ein Base-bug sein?
Danke!
Subformular - Verknüpfung Fremd-Primärschlüssel
Moderator: Moderatoren
Re: Subformular - Verknüpfung Fremd-Primärschlüssel
Hallo nochmal,
nach vielen Stunden des Suchens und der Verzweiflung bin ich immer noch nicht fuendig geworden, daher nochmal ein Versuch, das Problem zu beschreiben. Ich kann mir einfach nicht vorstellen, dass das Problem nicht bekannt ist:
Ich habe ein Formular mit Hilfe des Assistenten erstellt:
Im Formular werden Personen aufgelistet mit Primärschluessel id und name, dateofbirth,...
Die Daten des Formulars sollen nicht verändert werden, sonder dienen nur der Zuordnung des Unterformulars.
Im Unterformular untersuchung werden Untersuchungsergebnisse zu den oben angezeigten Personen eingetragen:
Datum, var1, var2, etc. und natuerlich eine untersuchung.person_id, die korrekt mit person.id (siehe oben) verknuepft ist.
Wenn ich jetzt die Personen durchblättere, wird auch korrekterweise im Subformular entsprechend mitgezählt.
Auch wenn ich einen neuen Datensatz eingebe, wird untersuchung.person_id immer noch korrekt angezeigt. Direkt nach dem Speichern springt jedoch der Wert in untersuchung.person_id grundsätzlich auf 0 und meine Daten werden auch der person.id=0 zugeordnet, anstelle der vorher angezeigten, korrekten id.
Ich habe auch schon versucht, das angezeigte Feld untersuchung.person_id auf nur lesen/nicht aktiv zu stellen oder ganz wegzulassen, es wird trotzdem immer unter person.id=0 abgespeichert. Natuerlich kann ich hinterher die korrekte untersuchung.person_id eintragen und erneut abspeichern, aber das kann ja nicht der Sinn der Sache sein.
Habe ich irgendetwas uebersehen? Irgendjemand muss doch schon ähnliche Erfahrungen gemacht haben?
Ich wäre wirklich sehr, sehr dankbar fuer eine Hilfestellung!
Rumata
nach vielen Stunden des Suchens und der Verzweiflung bin ich immer noch nicht fuendig geworden, daher nochmal ein Versuch, das Problem zu beschreiben. Ich kann mir einfach nicht vorstellen, dass das Problem nicht bekannt ist:
Ich habe ein Formular mit Hilfe des Assistenten erstellt:
Im Formular werden Personen aufgelistet mit Primärschluessel id und name, dateofbirth,...
Die Daten des Formulars sollen nicht verändert werden, sonder dienen nur der Zuordnung des Unterformulars.
Im Unterformular untersuchung werden Untersuchungsergebnisse zu den oben angezeigten Personen eingetragen:
Datum, var1, var2, etc. und natuerlich eine untersuchung.person_id, die korrekt mit person.id (siehe oben) verknuepft ist.
Wenn ich jetzt die Personen durchblättere, wird auch korrekterweise im Subformular entsprechend mitgezählt.
Auch wenn ich einen neuen Datensatz eingebe, wird untersuchung.person_id immer noch korrekt angezeigt. Direkt nach dem Speichern springt jedoch der Wert in untersuchung.person_id grundsätzlich auf 0 und meine Daten werden auch der person.id=0 zugeordnet, anstelle der vorher angezeigten, korrekten id.
Ich habe auch schon versucht, das angezeigte Feld untersuchung.person_id auf nur lesen/nicht aktiv zu stellen oder ganz wegzulassen, es wird trotzdem immer unter person.id=0 abgespeichert. Natuerlich kann ich hinterher die korrekte untersuchung.person_id eintragen und erneut abspeichern, aber das kann ja nicht der Sinn der Sache sein.
Habe ich irgendetwas uebersehen? Irgendjemand muss doch schon ähnliche Erfahrungen gemacht haben?
Ich wäre wirklich sehr, sehr dankbar fuer eine Hilfestellung!
Rumata
Re: Subformular - Verknüpfung Fremd-Primärschlüssel
Danke erstmal!
Hast du auch eine MySQL Verbindung? Es könnte durchaus sein, dass mein Problem wiedermal an der unterschiedlichen SQL-Syntax liegt.
Was meinst mit die "Abfrage", bzw. wie kann ich den SQL Code einsehen, den Base für das Formular verwendet?
Was meinst du mit "die einzelnen Felder binden"? Ich habe das SubForm über Formular-Navigator - Eigenschaften verbunden ("verknüpfen von patient.id nach patient_id"). Oder welche wählbaren Eigenschaften meinst du genau?
Gruß
Rumata
Hast du auch eine MySQL Verbindung? Es könnte durchaus sein, dass mein Problem wiedermal an der unterschiedlichen SQL-Syntax liegt.
Was meinst mit die "Abfrage", bzw. wie kann ich den SQL Code einsehen, den Base für das Formular verwendet?
Was meinst du mit "die einzelnen Felder binden"? Ich habe das SubForm über Formular-Navigator - Eigenschaften verbunden ("verknüpfen von patient.id nach patient_id"). Oder welche wählbaren Eigenschaften meinst du genau?
Gruß
Rumata
-
- *
- Beiträge: 17
- Registriert: Mo, 05.11.2007 13:19
- Wohnort: Landkreis Ostprignitz-Ruppin / Brandenburg
Re: Subformular - Verknüpfung Fremd-Primärschlüssel
Hallo Rumata,
mit "Abfrage" meine ich den SELECT-Befehl zwischen Haupt- und Unterformular. Soweit ich verstanden habe, wird ja bei Subformularen die Verbindung über einen SELECT-Befehl hergestellt. Du wählst also in den Eigenschaften des Subformulars bei DATEN, TABELLE, SQL-BEFEHL, den SQL-Befehl aus. Den musst Du dann natürlich richtig schreiben.
Und mit "einzelne Felder binden" meine ich das ja nicht nur das Formular an die Tabelle gebunden wird, sodern auch jedes Wertefeld, zusätzlich über dessen Eigenschaften, an die Felder der Tabelle.
Nach deiner Antwort vermute ich aber das Problem bei der Feldverknüpfung:
Sind in beiden Tabellen die Spalten patient.id als Primärschlüssel definiert und verknüpfst Du die beiden?
Wenn ja, stellst Du damit nur eine 1-1 Beziehung her. Versuch dann mal folgendes:
Gib der Tabelle mit den zu zu ordnenden Angaben (ich vermute mal es handelt sich um Befunde) einfach eine zusätzliche Spalte wie z.B. befund.ID und genau DIESE nimmst Du als Primärschlüssel. Die Spalte patient.ID definierst Du nur als "normale" Spalte, aber auch im gleichen Format (z.B. Integerzahl) wie die Spalte Primärschlüssel der Tabelle Patienten und dann verknüpfst dann diese ID-Spalten. Damit sollte die gewünschte 1-n Beziehung funktionieren.
Gutes Gelingen
mit "Abfrage" meine ich den SELECT-Befehl zwischen Haupt- und Unterformular. Soweit ich verstanden habe, wird ja bei Subformularen die Verbindung über einen SELECT-Befehl hergestellt. Du wählst also in den Eigenschaften des Subformulars bei DATEN, TABELLE, SQL-BEFEHL, den SQL-Befehl aus. Den musst Du dann natürlich richtig schreiben.
Und mit "einzelne Felder binden" meine ich das ja nicht nur das Formular an die Tabelle gebunden wird, sodern auch jedes Wertefeld, zusätzlich über dessen Eigenschaften, an die Felder der Tabelle.
Nach deiner Antwort vermute ich aber das Problem bei der Feldverknüpfung:
Sind in beiden Tabellen die Spalten patient.id als Primärschlüssel definiert und verknüpfst Du die beiden?
Wenn ja, stellst Du damit nur eine 1-1 Beziehung her. Versuch dann mal folgendes:
Gib der Tabelle mit den zu zu ordnenden Angaben (ich vermute mal es handelt sich um Befunde) einfach eine zusätzliche Spalte wie z.B. befund.ID und genau DIESE nimmst Du als Primärschlüssel. Die Spalte patient.ID definierst Du nur als "normale" Spalte, aber auch im gleichen Format (z.B. Integerzahl) wie die Spalte Primärschlüssel der Tabelle Patienten und dann verknüpfst dann diese ID-Spalten. Damit sollte die gewünschte 1-n Beziehung funktionieren.
Gutes Gelingen
Henzmen
OOo 2.4, MySQL 5.03 auf Debian-Etch
OOo 2.4, MySQL 5.03 auf Debian-Etch
-
- *
- Beiträge: 17
- Registriert: Mo, 05.11.2007 13:19
- Wohnort: Landkreis Ostprignitz-Ruppin / Brandenburg
Re: Subformular - Verknüpfung Fremd-Primärschlüssel
Hallo Steffi,steffi hat geschrieben:Hallo, ich hab zwar wenig Erfahrung, meine aber, mich erinnern zu können, das Fremdschlüsselabfragen am einfachsten mit Tabellen vom Typ "InnoDB" möglich sind. Standartmäßig ist meist "MyISAM" eingestellt. Im PhpMyAdmin lässt sich das ganz leicht überprüfen.
Bei anderen Typen muss scheinbar einiges beachtet werden:
http://dev.mysql.com/doc/refman/5.1/de/ ... -keys.html
mfg
steffi
interessant, das auch Du diesen Hinweis auf einen angeblichen Fehler bzw. Einschränkung in der Funktionalität der My-ISAM-Tabellen von My-SQL gibst.
Das ist jedoch definitiv so NICHT richtig. Natürlich lassen auch My-ISAM-Tabellen über Schlüsselfelder verknüpfen.
Die, leider oft falsch intepretierte, Aussage im MySQL-Handbuch bezieht sich lediglich auf die Sicherstellung der referentiellen Integrität. Dies ist in der Tat nur bei Verwendung der InnoDB-Tabellen möglich.
Trotzdem Danke für den Hinweis, den für etliche Zwecke ist die referentielle Integrität ja durchaus ein wesentlicher Faktor.
Weiter Gutes Gelingen bei Deinen Vorhaben.
Gruß
Henzmen
OOo 2.4, MySQL 5.03 auf Debian-Etch
OOo 2.4, MySQL 5.03 auf Debian-Etch
Re: Subformular - Verknüpfung Fremd-Primärschlüssel
Erstmal vielen Dank fuer Deine Antwort. Das mit der 1:n Beziehung ist nicht das Problem. Ich verknuepfe einen Primärschluessel (patient.id) mit einer normalen Integerspalte (history.patient_id), also 1:n geht. Im Formular zeigt er oben die Datensätze patient.id, patient.name etc an. Im Subformular zeigt er dann korrekterweise die Felder history.* an, inklusive history.patient_id. Wenn ich also durch die Datensätze patient.id blättere, zeigt er auch korrekterweise im subformular fuer history.patient_id dieselbe Zahl an wie oben im Hauptformular fuer patient.id. Soweit, so gut. Wenn ich aber die uebrigen Felder fuer history.* im subformular eingegeben habe und abspeichere, dann setzt er das Feld history.patient_id auf 0!henzmen hat geschrieben:Hallo Rumata,
mit "Abfrage" meine ich den SELECT-Befehl zwischen Haupt- und Unterformular. Soweit ich verstanden habe, wird ja bei Subformularen die Verbindung über einen SELECT-Befehl hergestellt. Du wählst also in den Eigenschaften des Subformulars bei DATEN, TABELLE, SQL-BEFEHL, den SQL-Befehl aus. Den musst Du dann natürlich richtig schreiben.
Könntest Du mir mal ein Beispiel nennen, wie so ein SQL-Befehl fuer das Subformular aussehen soll bei Deiner MySQL-Base Verknuepfung? Was ich bisher probiert habe, funktioniert alles nicht.
Gruss
Rumata
P.S: war verreist, konnte leider nicht eher antworten, aber jetzt brennt mir das Problem unter den Nägeln!
-
- *
- Beiträge: 17
- Registriert: Mo, 05.11.2007 13:19
- Wohnort: Landkreis Ostprignitz-Ruppin / Brandenburg
Re: Subformular - Verknüpfung Fremd-Primärschlüssel
Hallo rumata,
ich nehme mal an, das patient.id der Primärschlüssel der Tabelle Patienten ist und history.patient_id der Primärschlüssel der Tabelle Befunde. Dann sollte die patient.id in der Tabelle Befunde der korrespondierenden Fremdschlüssel sein.
Der Selectbefehl zur Verknüpffung sieht da einfach so aus:
SELECT * From Patienten, Befunde WHERE Patient.patientid = Befunde.patient.id
Genau so hab ich, natürlich mit anderen Namen, meine 1-n Verknüpfung gemacht und die Funktioniert auch einwandfrei wie bei Dir. Dein, oder eher unser, Problem hat vermutlich eine ganz andere Ursache, nämlich das OOo-Base (zumindest in Abfragen und nichts anderes sind die verküpften Unterformulare) die Daten ja nur ins Formular schreibt, aber NICHT auch gleich in die hinterlegte Tabelle einfügt.
Aus dem, was dazu hier im Forum steht, bin ich auch noch nicht so richtig schlau geworden. Benutze einfach mal die Begriffe RESULTSET, ROWSET oder INSERT ROW in der Suche. Die führen zu einer ganzen Menge interessanter Beiträge dazu. Bin aber selbst da noch nicht so richtig durchgestiegen. Ich selbst denke für meine Lösung eher an folgende Version:
- Formularwerte in eine Variable, oder ggf. ein eindimensionales Array übernehmen lassen.
- Variable bzw. Array per SQL-Statement mit der hinterlegten Tabelle vergleichen.
- Inhalt von Variable oder Array per INSERT bzw. UPDATE Befehl in die Tabelle schreiben.
- Diese Aktion mit Reload abschließen.
Wie ich das allerdings konkret per Basic-Cade anstelle, weiß ich selbst noch nicht und bin für jeden Tipp dankbar.
Gutes Gelingen bei Deinem Projekt
Gruß
henzmen
ich nehme mal an, das patient.id der Primärschlüssel der Tabelle Patienten ist und history.patient_id der Primärschlüssel der Tabelle Befunde. Dann sollte die patient.id in der Tabelle Befunde der korrespondierenden Fremdschlüssel sein.
Der Selectbefehl zur Verknüpffung sieht da einfach so aus:
SELECT * From Patienten, Befunde WHERE Patient.patientid = Befunde.patient.id
Genau so hab ich, natürlich mit anderen Namen, meine 1-n Verknüpfung gemacht und die Funktioniert auch einwandfrei wie bei Dir. Dein, oder eher unser, Problem hat vermutlich eine ganz andere Ursache, nämlich das OOo-Base (zumindest in Abfragen und nichts anderes sind die verküpften Unterformulare) die Daten ja nur ins Formular schreibt, aber NICHT auch gleich in die hinterlegte Tabelle einfügt.
Aus dem, was dazu hier im Forum steht, bin ich auch noch nicht so richtig schlau geworden. Benutze einfach mal die Begriffe RESULTSET, ROWSET oder INSERT ROW in der Suche. Die führen zu einer ganzen Menge interessanter Beiträge dazu. Bin aber selbst da noch nicht so richtig durchgestiegen. Ich selbst denke für meine Lösung eher an folgende Version:
- Formularwerte in eine Variable, oder ggf. ein eindimensionales Array übernehmen lassen.
- Variable bzw. Array per SQL-Statement mit der hinterlegten Tabelle vergleichen.
- Inhalt von Variable oder Array per INSERT bzw. UPDATE Befehl in die Tabelle schreiben.
- Diese Aktion mit Reload abschließen.
Wie ich das allerdings konkret per Basic-Cade anstelle, weiß ich selbst noch nicht und bin für jeden Tipp dankbar.
Gutes Gelingen bei Deinem Projekt
Gruß
henzmen
Henzmen
OOo 2.4, MySQL 5.03 auf Debian-Etch
OOo 2.4, MySQL 5.03 auf Debian-Etch
Re: Subformular - Verknüpfung Fremd-Primä�chlüs�l
Im englischen Forum hatten zwei Leute dasselbe Problem und die Lösung ist denkbar simpel:
Die key-Variablen muessen als reine Integer deklariert sein, nicht "UNSIGNED"!
Nach dieser �erung funktioniert die Anbindung/Dateneingabe im Subformular bei MySQL-Base.
Die key-Variablen muessen als reine Integer deklariert sein, nicht "UNSIGNED"!
Nach dieser �erung funktioniert die Anbindung/Dateneingabe im Subformular bei MySQL-Base.