Auswahl bei Combobox durch Ziffer ersetzt

Moderator: ModerationP

Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 14. Jul 2019, 09:53

Hallo,
ein Ort kann viele Ortsteile haben und die wiederum viele Wohnungen.
Ich habe also jeweils 1:n-Beziehungen zwischen tblWohnungen <<--> tblOrtsteile <<--> tblOrte mit der Referenz auf der n-Seite zum jeweiligen PK.

Der Ort wird in einem Formular in einer Combobox ausgewählt. Das funktioniert, wenn ich eine Abfrage über die 3 Tabellen verwende.
Wie kann man nun erreichen, dass in einer anderen Combobox nur die Ortsteile angezeigt werden, die zum Ort gehören?
Ich vermute, dass es nur mit VBA geht oder auch anders?
Ich bekomme bei letzterem (also ohne VBA) in der Statuszeile den Fehler: „Um Änderungen an diesem Feld vornehmen zu können, muss erst der Datensatz gespeichert werden“, wenn ich den Ortsteil in der Combobox wähle.
Wird wie verlangt erst gespeichert, wird der Ort durch eine Ziffer überschrieben. Kann mir darauf keinen Reim machen.
Vielen Dank!
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 14. Jul 2019, 10:45

Wird wie verlangt erst gespeichert, wird der Ort durch eine Ziffer überschrieben. Kann mir darauf keinen Reim machen.

Das ist gelöst. Es war ein falscher Steuerelementinhalt eingetragen.

Aber der Fehler in der Statuszeile: „Um Änderungen an diesem Feld vornehmen zu können, muss erst der Datensatz gespeichert werden...“ kommt immer noch.
Wie kann man den umgehen?
Und ist es überhaupt möglich, ohne VBA nur die Anzeige der Ortsteile für den jeweiligen Ort zu bekommen?
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon derArb » 14. Jul 2019, 12:58

Hallo,
beim Verlassen eines Formulars oder Steuerelements....einfach mal ausprobieren:
Code: Alles auswählen
If Me.Dirty Then Me.Dirty = False

Das meint: Wenn der Datensatz noch nicht gespeichert ist, dann speichere ihn, ansonsten nicht.
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
derArb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14337
Registriert: 19. Apr 2006, 18:39
Wohnort: Berlin

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Beaker s.a. » 14. Jul 2019, 14:33

Hallo Benny,
wird der Ort durch eine Ziffer überschrieben. Kann mir darauf keinen Reim machen.

Das ist gelöst. Es war ein falscher Steuerelementinhalt eingetragen.

Nee, das ist absolut richtig, dass die Ziffer (= Fremdschlüssel) gespeichert wird, -
das ist ja (sollte jedenfalls) der Steuerelementeinhalt sein. Die richtige Beziehung
hast du ja wohl
tblOrtsteile <<--> tblOrte mit der Referenz auf der n-Seite zum jeweiligen PK.

Normal sollte das die erste Spalte im Kombi sein, die durch "Breite = 0" nicht sicht-
bar ist.
gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 14. Jul 2019, 22:04

Hallo
danke.

@derArb
der Code passt. Habe ihn im AfterUpdate der TextBox.
Grüble noch, warum der überhaupt nötig ist und wie man nur die Ortsteile bekommt, wenn ein Ort gewählt wird.

@ekkehard
das ist ja (sollte jedenfalls) der Steuerelementeinhalt sein
Jetzt ist es richtig.
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Bitsqueezer » 15. Jul 2019, 10:04

Hallo,

wobei man sich das "If Me.Dirty" schenken kann, denn wenn Me.Dirty nicht True ist, passiert beim Setzen von Me.Dirty=False auch nix. Also einfach "Me.Dirty=False", fertig.

Vermutlich hast Du die falschen Felder in die Abfrage eingebaut, den PK der Lookup-Tabelle statt den FK. Dann versucht Access, Änderungen an der Lookup-Tabelle vorzunehmen statt den FK einzutragen.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6907
Registriert: 21. Jun 2007, 12:17

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 15. Jul 2019, 12:25

Hallo,
den PK der Lookup-Tabelle statt den FK

das hatte ich schon korrigiert und geschrieben.

Aber die Änderung der dirty-Zeile wird nicht helfen wg. folgender Beobachtung.
Um nur die Ortsteile in cboOteName zu zeigen, die für den Ort in cboWohOrt gelten, habe ich dies:
Code: Alles auswählen
Private Sub cboWohOrt_AfterUpdate()
Dim sSQL As String
'ote Ortsteil
sSQL = "SELECT oteID, oteName, oteortIDRef" & _
        " FROM tblOrtsteile" & _
        " WHERE oteOrtIDRef = " & cboWohOrt.Value & _
        " ORDER BY oteName" & ";"
'Debug.Print sSQL
With Me!cboOteName
   .RowSourceType = "Table/Query"
   .RowSource = sSQL
End With
'If Me.Dirty Then Me.Dirty = False' Me.Dirty=False
End Sub

Ist die Zeile mit Me.Dirty aktiv, kann man den Fehler in der Statuszeile: „Um Änderungen an diesem Feld vornehmen zu können, muss erst der Datensatz gespeichert werden...“ vermeiden.
Es wird dann aber der Ortsteil, der in cboOteName steht, dem Ort zugewiesen, der in cboWohOrt ausgewählt wurde.
Offensichtlich wird die DS-Änderung gespeichert. Bei Me.Dirty=false verschwindet nämlich der Stift des DS-Markierers.
Also eine gravierende, tückische Datenänderung, die man evtl gar nicht bemerkt.
Kommentiert man die Zeile mit Me.Dirty aus, kommt es zum oben genannten Fehler in der Statuszeile.
Also alles keine Lösung. Hängt das evtl. mit der 1:n-Beziehung tblOrte : tblOrtsteile zusammen? Aber die muss doch sein.
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Bitsqueezer » 15. Jul 2019, 12:42

Hallo Benny,

entweder lädtst Du eine Beispieldatenbank mit beteiligten Tabellen, Abfragen und Formularen hoch oder zeigst die Abfrage, die Du benutzt.

Rumraten hilft da wenig.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6907
Registriert: 21. Jun 2007, 12:17

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 15. Jul 2019, 13:28

Hallo Christian,
vielleicht hilft das und die Beziehung s. Bild:
Die Datensatzquelle des Formulars:
SELECT tblOrtsteile.oteID, tblOrte.ortName, tblOrtsteile.oteName, tblOrtsteile.oteortIDRef, tblWohnungen.*
FROM (tblOrte INNER JOIN tblOrtsteile ON tblOrte.ortID = tblOrtsteile.oteortIDRef) INNER JOIN tblWohnungen
ON tblOrtsteile.oteID = tblWohnungen.wohoteIDRef;

Für cboWohOrt (Combo der Orte)
SELECT tblOrte.ortID, tblOrte.ortName
FROM tblOrte
ORDER BY tblOrte.ortName;
In dieser Combo steckt auch das gezeigte AfterUpdate-Event

Für cboOteName (Combo der Ortsteile)
SELECT tblOrtsteile.oteID, tblOrtsteile.oteName, tblOrtsteile.oteortIDRef
FROM tblOrtsteile
ORDER BY tblOrtsteile.oteName;

Gruß Benny
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Beaker s.a. » 15. Jul 2019, 13:59

Hallo Benny,
Für das Formular braucht du nur die Tabelle tblWohnungen
Code: Alles auswählen
SELECT * FROM tblWohnungen

Da du keine eigene Sortierung willst, kannst du auch einfach den Tabellen-
namen in die DS-Herkunft schreiben.
Das Kombi "cboWohOrt" ist dann ungebunden (da gibt es ja keinen Fremd-
schlüssel in den Wohnungen).
Das Kombi "cboOteName" bekommt seine DS-Herkunft durch das AfterUpdate-
Ereignis des vorigen Kombis (da sollte dein Code eigentlich stimmen), und
ist an das Feld "wohotelIDRef" gebunden.
gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 15. Jul 2019, 14:38

Hallo Ekkehard,
danke, das sieht vermutlich gut aus.
Habe das so geändert.
Jetzt kommt:
Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle 'tblOrtsteileAlt' mit diesem Datensatz in Beziehung stehen muss.

Kommt wahrscheinlich wg. der der Option 'Objektnamenautokorrektur ausführen' (in Aktuelle DB)
Die Tabelle gibt's noch. Aber auch tblOrtsteile.
Wie vertreibt man denn diesen Spuk?
Ich glaube, dann ist es geschafft. :D
Gruß Benny

Edit
Stelle gerade fest, dass die Msg nur bei einer bestimmten Ort/Ortsteil-Kombi eintritt.
In 'tblOrtsteileAlt' gibt's die Referenz auf die neue Stadt noch nicht. Aber wieso kommt 'tblOrtsteileAlt' überhaupt ins Spiel. Überall steht doch 'tblOrtsteile' !!?
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Beaker s.a. » 15. Jul 2019, 14:58

Hallo Benny,
Schwer zu sagen. Prüfe die DS-Herkünfte und Code nach der Tabelle. Evtl. musst
du die alte und die neue Tabelle mal nach diesem Muster: http://www.donkarl.com?FAQ3.16
vergleichen, da die Fehlermeldung auf verwaiste DS hindeutet; - Ortsteile zu denen
es keinen Ort gibt.
gruss ekkehard

edit: gerade erst deine Ergänzung gelesen.
Siehe oben. Kannst du die nicht einfach löschen? Anschliessend das Komprimieren
nicht vergessen.
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Bitsqueezer » 15. Jul 2019, 15:21

Hallo,

wie ich schon sagte, es ist sehr wahrscheinlich, daß Du die falschen ControlSources einsetzt. Access versucht immer, alle Änderungen in alle beteiligten Tabellen einer Abfrage zu speichern. Wenn Du als ControlSource die ID der Ortsteiletabelle verwendest (also den PK), was bei Dir gleich das erste Feld der Abfrage ist, wird das so nicht funktionieren. Dein Formular darf nur so aufgebaut sein, daß nur die Felder der Tabelle Wohnungen editiert werden.

Aber wie gesagt, da kann man nur rumraten, wenn man nicht Dein Formular zur Hand hat und sieht, was Du da gebastelt hast.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6907
Registriert: 21. Jun 2007, 12:17

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon benny66 » 15. Jul 2019, 15:51

Hallo
@ekkehard
Das Kombi "cboWohOrt" ist dann ungebunden

Die Konsequenz fiel mir zu spät auf. Geht doch nicht, die Orte sollen doch gezeigt werden, d.h. als Steuerelementinhalt muss die Referenz stehen.

@Christian
ich lad die abgespeckte DB gleich hoch. Muss mich jetzt erst um den Nachschub für den Kühlschrank kümmern.
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 22. Nov 2015, 21:56

Re: Auswahl bei Combobox durch Ziffer ersetzt

Beitragvon Beaker s.a. » 15. Jul 2019, 16:17

Hallo Benny,
die Orte sollen doch gezeigt werden, d.h. als Steuerelementinhalt muss die Referenz stehen.

Die gibt es aber nicht.
Lösung (Luftcode):
Code: Alles auswählen
Private Sub Form_Current()
    If Not Me.NewRecord Then   
        Me.cboWohOrt = DLookup("ortName","tblOrte","OrtID = " & Me.cboOteName.Column(2)
    Else
        Me.cboWohOrt = Null
    End If
End Sub


gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 620
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Mister Stringer, mmarkus und 0 Gäste