Ich habe folgendes Problem:
Bei einem neuen Datensatz und ohne Eingaben im Hauptformular wird dem
Datensatz im Unterformular bei dortiger Eingabe keine Verknüpfung
zugewiesen. Wenn ich nun etwas im Hauptformular eingebe, verschwindet die
Eingabe des Unterformulars. In der Tabellenansicht ist der Datensatz
vorhanden, jedoch ohne ID des Hauptformulars...
In den Beziehungen sind die Tabellen korrekt mit referentieller Integrität
verknüpft, und in der Tabellenansicht funktioniert die Eingabe in die
untergeordnete Tabelle problemlos nur halt im Formular nicht.
Ist das ein bekanntes Phänomen, bzw. kann mir jemand sagen, wie es zu
beseitigen ist...
Ich habe leider keine Vorstellung, was der Grund dafür sein könnte, weiss
also auch nicht, welche weitere Informationen wichtig wären...
Vielen Dank,
Markus Hentschel
email: mar...@hentschel-info.de
"Markus Hentschel" <hents...@t-online.de> schrieb:
>
>Ich habe folgendes Problem:
>Bei einem neuen Datensatz und ohne Eingaben im Hauptformular wird dem
>Datensatz im Unterformular bei dortiger Eingabe keine Verknüpfung
>zugewiesen.
wie den auch - wenn der HauptDS noch nicht da ist? Die die beiden sind
sicherlich durch die ID miteinander verbunden, die ID im HauptDS wird
aber erst angelegt, wenn Du mindestens ein Feld ausfüllst (egal ob
manuell oder per VBA)
>Wenn ich nun etwas im Hauptformular eingebe, verschwindet
>Eingabe des Unterformulars.
Klar, es sollen im UFo ja auch nur die DS angezeigt werden, die zu dem
DS im HFo passen - da die ID aus dem HFo nicht im DetailDS gespeichert
wurde (weil sie ja noch nicht da war) gehört der DS nicht zu dem
Hauptdatensatz...
>In der Tabellenansicht ist der Datensatz
>vorhanden, jedoch ohne ID des Hauptformulars...
>In den Beziehungen sind die Tabellen korrekt mit referentieller Integrität
>verknüpft, und in der Tabellenansicht funktioniert die Eingabe in die
>untergeordnete Tabelle problemlos nur halt im Formular nicht.
>
>Ist das ein bekanntes Phänomen, bzw. kann mir jemand sagen, wie es zu
>beseitigen ist...
es ist gar kein Phänomen, nur ein Eingabefehler ;-)
Beginne die Dateneingabe im Hauptformular und wenn Du nur ein Feld
ausfüllst und schon klappt es.
HTH und Gruss Anette
--
==> Keine Mails zu NG-Fragen - ist das sooo schwer zu verstehen! <==
http://www.pc-creativ.de
APP: http://www.accessprofipool.de
FAQ: http://www.donkarl.com
Richtig zitieren: http://got.to/quote
ganz so einfach ist es nicht. Wir haben ein ähnliches Verhalten in einer
ADP. Dort sind auf einem Formular verschachtelte Unterformulare angelegt
(HF - UF1[UF2]). Nun ist es möglich, im Hauptformular Daten einzugeben und
dann direkt auf das verschachelte Unterformular UF2 zu springen. Im UF1 ist
ein leerer neuer Datensatz zu sehen. Wenn der Anwender nun UF1 leer lässt
und nur im UF2 eingibt, werden die Datensätze in der Datenherkunft zu UF2
korrekt gespeichert, wobei das mit UF1 verknüpfte Feld leer ist.
Wir haben das Formular so umgebaut, dass ein Zwangseingabe für UF1 erfolgen
muss.
Gruß
Ralf
"Ralf Albrecht" <ralb...@programmiererei.de> schrieb:
>ganz so einfach ist es nicht. Wir haben ein ähnliches Verhalten in einer
>ADP. Dort sind auf einem Formular verschachtelte Unterformulare angelegt
>(HF - UF1[UF2]). Nun ist es möglich, im Hauptformular Daten einzugeben und
>dann direkt auf das verschachelte Unterformular UF2 zu springen. Im UF1 ist
>ein leerer neuer Datensatz zu sehen. Wenn der Anwender nun UF1 leer lässt
>und nur im UF2 eingibt, werden die Datensätze in der Datenherkunft zu UF2
>korrekt gespeichert, wobei das mit UF1 verknüpfte Feld leer ist.
...und was willst Du mir damit sagen? Irgendwe verstehe ich Deine
Anmerkung nicht richtig, aber ich will es mal versuchen....
Wenn das Verknüpfte Feld im UFo1 wirklich leer ist, dann kann der DS
im UFO2 nicht zu dem DS im UFo 1 gespeichert werden - geht definitiv
nicht, wo soll die Verbindung herkommen.
Wenn im UFo2 aber vielleicht auch die ID des HauptDS gespeichert wird,
dann kann UFo2 wieder den DS anzeigen, weil eine Verbindung zwischen
HauptDS und UFo2 vorhanden ist und UFo1 einfach ignoriert wird. Das
ganze liegt mehr an den Beziehungen und den verknüpften Feldern.
>Wir haben das Formular so umgebaut, dass ein Zwangseingabe für UF1 erfolgen
>muss.
Das war ja mein Reden: "Beginne die Dateneingabe im Hauptformular und
wenn Du nur ein Feld ausfüllst und schon klappt es." = auf Den
Beispiel angewendet: Erst eine Eingabe im HauptDS, dann im UFo1 und
dann im UFo2 - dabei ist es unerheblich ob die Eingabe manuell oder
per VBA erfolgt.
der Sachverhalt ist nicht ganz einfach als Text zu beschreiben, aber ich
versuchs noch mal:
Folgende Tabellen:
Rechnung (RechnungsNr PK, weitere Felder)
RechnungsGruppe (GruppenNr PK, RechnungNr FK, weitere Felder)
RechnungsDetails ( DetailNr PK, GuppenNr PK, weitere Felder)
angelegt auf SQL Server 2000, Beziehungen mit Cascading Update/Delete
Das Hauptformular ist über RechnungsNr mit UF1 verknüpft, UF2 innerhalb von
UF1 über GruppenNr verknüpft.
Auf dem Hauptformular wird ein Rechnungsdatensatz neu angelegt, danach
direkt zum UF2 gesprungen. Die Eingaben in UF2 können gespeichert werden;
sie haben alle eine leere GruppeNr. Es wird kein Datensatz in die Tabelle
RechnungsGruppe von UF1 gespeichert.
Bei MDBs wird der Datensatz von UF1 automatisch angelegt und gespeichert,
auch wenn der Anwender dort keine Eingabe vorgenommen hat.
Was ich also sagen wollte: Dies Verhalten ist fehlerhaft, oder? Und ähnlich
wie das zu Beginn des Threads beschrieben...
Gruß
Ralf
Danke für Deine Antwort.
> Beginne die Dateneingabe im Hauptformular und wenn Du nur ein Feld
> ausfüllst und schon klappt es.
Da hast Du recht. Ich weiß das auch, aber die Benutzer der Datenbank...?
In dem Hauptformular decke ich viele Eingaben durch Standardwerte ab (Datum,
Kommis.Nr, ...), um dem User schnelle Eingabe der relevanten Daten zu
ermöglichen. Gibt es nicht doch einen eleganten Weg, bei Eingabe in das UF
automatisch den Datensatz im HF zu erzeugen und die passende ID auch im UF
zu setzen?
Oder muss ich im BeforeUpdate-Eriegnis des UF prüfen, ob eine ID im HF
vergeben ist, und den User gegebenenfalls informieren (halte ich aber für
eher unelegant).
Markus Hentschel
email: mar...@hentschel-info.de
"Markus Hentschel" <hents...@t-online.de> schrieb:
>Danke für Deine Antwort.
>
>>Beginne die Dateneingabe im Hauptformular und wenn Du nur ein Feld
>>ausfüllst und schon klappt es.
>
>Da hast Du recht. Ich weiß das auch, aber die Benutzer der Datenbank...?
jaja - immer diese Dau's
>
>In dem Hauptformular decke ich viele Eingaben durch Standardwerte ab (Datum,
>Kommis.Nr, ...), um dem User schnelle Eingabe der relevanten Daten zu
>ermöglichen. Gibt es nicht doch einen eleganten Weg, bei Eingabe in das UF
>automatisch den Datensatz im HF zu erzeugen und die passende ID auch im UF
>zu setzen?
>
>Oder muss ich im BeforeUpdate-Eriegnis des UF prüfen, ob eine ID im HF
>vergeben ist, und den User gegebenenfalls informieren (halte ich aber für
>eher unelegant).
Stanardwerte werden nicht als anlegen eines DS gewertet, Du kann beim
Anzeigen des Frm fragen ob es sich um einen neuen DS handelt und das
UFo als enabled = False darstellen. Erst wenn der DS angelegt wurde,
kann der User nun Daten in das UFo geben.
if me.newrecord Then
me!DeinUfo.enabled = false
Else
me!DeinUfo.enabled = True
End if
Dann z.B. nach der ersten Eingabe das UFo auf enabled=true setzen.
"Ralf Albrecht" <ralb...@programmiererei.de> schrieb:
>der Sachverhalt ist nicht ganz einfach als Text zu beschreiben, aber ich
>versuchs noch mal:
>
>Folgende Tabellen:
>
>Rechnung (RechnungsNr PK, weitere Felder)
>RechnungsGruppe (GruppenNr PK, RechnungNr FK, weitere Felder)
>RechnungsDetails ( DetailNr PK, GuppenNr PK, weitere Felder)
>
>angelegt auf SQL Server 2000, Beziehungen mit Cascading Update/Delete
>
>Das Hauptformular ist über RechnungsNr mit UF1 verknüpft, UF2 innerhalb von
>UF1 über GruppenNr verknüpft.
>
>Auf dem Hauptformular wird ein Rechnungsdatensatz neu angelegt, danach
>direkt zum UF2 gesprungen. Die Eingaben in UF2 können gespeichert werden;
>sie haben alle eine leere GruppeNr. Es wird kein Datensatz in die Tabelle
>RechnungsGruppe von UF1 gespeichert.
>Bei MDBs wird der Datensatz von UF1 automatisch angelegt und gespeichert,
>auch wenn der Anwender dort keine Eingabe vorgenommen hat.
sorry, aber das glaube ich nicht. Wenn in der Rechnungsgruppe kein
Datensatz angelegt ist, dann kann in den Details keine Beziehung zu
dem DS gespeichert werden. Wenn der Cursor gleich in das UFo 2
springt, ist es ein Fehler vom Programmierer.
Wenn in der MDB automatisch ein DS angelegt wurde, dann vermute ich,
dass wurde irgendwo im Code gemacht - guckt doch mal nach, was
passiert wenn der HauptDS gespeichert wird oder was beim UFo2 "Beim
Hingehen" eingetragen ist.
>Was ich also sagen wollte: Dies Verhalten ist fehlerhaft, oder? Und ähnlich
>wie das zu Beginn des Threads beschrieben...
Nein, das Verhalten ist IMO nicht fehlerhaft - Es sind Beziehungen
definiert und nach diesen Beziehungen richtet sich die Anwendung. Es
wäre schlimm, wenn Access ohne Aufforderung einfach Datensätze anlegt
;-)
> Stanardwerte werden nicht als anlegen eines DS gewertet, Du kann beim
> Anzeigen des Frm fragen ob es sich um einen neuen DS handelt und das
> UFo als enabled = False darstellen. Erst wenn der DS angelegt wurde,
> kann der User nun Daten in das UFo geben.
Das ist eine gute Idee, ich denke das werde ich vorerst so machen.
Danke für die schnelle Antwort,
Markus Hentschel
email: mar...@hentschel-info.de
das Verhalten tritt OHNE eine Zeile Programmierung auf. Reproduzierbar, mit
Access 2002 SP1.
Gruß
Ralf