Kombinationsfeld: Neue Werte hinzufügen

Hallo!

Ich habe eine Tabelle in einer Access-2007-Datenbank. Eines der Felder ist ein Kombinationsfeld und holt sich seine Werte aus einer anderen Tabelle (Beispiel: Adressdatenbank mit dem Feld „Land“, welches als „Kombinationsfeld“ angelegt ist mit der Eigenschaft „Herkunftstyp: Tabelle/Abfrage“, wobei die entsprechende Tabelle Ländernamen beinhaltet).

Ich möchte nun, dass wenn ich in meiner Adressdatenbank einen neuen Datensatz erstelle und in dem Feld „Land“ ein neues Land eingebe, welches noch nicht in der untergeordneten Tabelle ist, dass dieses dann automatisch in die Tabelle „Länder“ aufgenommen wird und beim nächsten Mal im Kombinationsfeld als Auswahl angeboten wird.

Ich dachte, es würde vielleicht ausreichen, die Option „Wertlistenbearbeitung zulassen“ auf „Ja“ zu stellen, aber es klappt dann trotzdem nicht.

Hat jemand eine Idee?

N’abend,

dazu gibt es ein paar Regeln zu beachten:

Bei den eigenschaften für das Feld sind folgende Einstellungen vorzunehmen:

  • Nur Listeneinträge = JA
  • Wertlistenbearbeitung zulassen: je nach Bedarf (du willst ja eine Automatik)
  • bei nicht in Liste: Ereignisprozedur

Private Sub Land_NotInList(NewData As String, Response As Integer)
NIL NewData, Response
End Sub

NIL (Not in List) ist eine Funktion:

Public Function NIL(NewData, Response)
Dim sql As String

 sql = "INSERT INTO tblLAND (Land) SELECT '" & NewData & "' AS inLand;"
 DoCmd.RunSQL sql
 Response = acDataErrAdded
End Function


    
    
    
    Grüße aus Rostock
    Wolfgang
    (Netwolf)

Vielen Dank für die schnelle Antwort!

Ich habe bislang noch nie die Visual Basic-Funktion genutzt und diesbezüglich noch keine Vorkenntnisse. Ich weiß nicht warum, aber ich musste gewisse Änderungen an dem Code vornehmen (s. unten), bis es funktionierte. Wahrscheinlich resultiert das aus meiner Unwissenheit, aber vielleicht sind hier noch andere Anfänger unterwegs, denen meine Angaben hilfreich sein werden. Zunächst noch einmal die Eckdaten meiner Testdatenbank:

Tabelle „Adressen“ mit Feld „Land“
Tabelle „Land“ mit Feld „Land“
Formular „Adressen“ mit dem Feld aus der Tabelle „Adressen“

  • Nur Listeneinträge = JA

Stimmt für das Feld „Land“ in der Tabelle „Adressen“.

  • Wertlistenbearbeitung zulassen: je nach Bedarf (du willst ja
    eine Automatik)

Verstehe ich nicht so ganz. Worüber genau entscheidet „Wertlistenbearbeitung“?

  • bei nicht in Liste: Ereignisprozedur

Kann ich nur im Bereich des Formulares für das Feld „Land“ einstellen (im Bereich der Tabelle selbst geht das bei mir nicht). Daraufhin öffnet sich Visual Basic. Folgenden Text batest Du mich einzufügen (sofern ich das richtig verstanden habe):

Private Sub Land_NotInList(NewData As String, Response As
Integer)
NIL NewData, Response
End Sub

Public Function NIL(NewData, Response)
Dim sql As String

sql = „INSERT INTO tblLAND (Land) SELECT '“ & NewData & „’
AS inLand;“
DoCmd.RunSQL sql
Response = acDataErrAdded
End Function

So kommt es aber zu Fehlermeldungen. Wenn ich den Text nun folgendermaßen abändere, dann klappt es. Um Missverständnissen durch automatische Zeilenumbrüche vorzubeugen, mache ich für jede neue Zeile hier einen Spiegelstrich:

-Private Sub Land_NotInList(NewData As String, Response As Integer)

  • NIL NewData, Response
    -End Sub

-Public Function NIL(NewData, Response)
-Dim sql As String

  • sql = „INSERT INTO Land (Land) SELECT '“ & NewData & „’ AS inLand;“
  • DoCmd.RunSQL sql
  • Response = acDataErrAdded
    -End Function

Mit anderen Worten:
(1) die Zeile „inLand;“" gehört noch in dieselbe Zeile wie „sql = …“ (leider generiert WerWeißWas hier einen Zeilenumbruch, der für Missverständnisse sorgt,
(2) ich musste die beiden "

" wegmachen und
(3) an der Stelle "INSERT INTO tblLAND (Land)" muss das "tblLAND" durch den Namen der Tabelle ersetzt werden ohne die Buchstabenfolge "tbl" (ich dachte, es handelt sich um einen festen Ausdruck".

Nochmals danke für die Hilfe!

Hallo,

wie ich immer sage: wenn du Anfänger bist, schreibe es hier. Dann fallen i.d.R. die Antworten ausführlicher aus.

Zunächst noch einmal die Eckdaten meiner Testdatenbank:

Tabelle „Adressen“ mit Feld „Land“
Tabelle „Land“ mit Feld „Land“
Formular „Adressen“ mit dem Feld aus der Tabelle „Adressen“

hättest du diese Informationen gleich mit gepostet, wären Missverständnisse vermieden worden.

  • Wertlistenbearbeitung zulassen: je nach Bedarf (du willst ja
    eine Automatik)

Verstehe ich nicht so ganz. Worüber genau entscheidet
„Wertlistenbearbeitung“?

Diese Funktion ist neu in Access 2007 und bietet das Editieren (bearbeiten) der Vorgabe-Daten (also der Daten in der LAND-Tabelle) für das Kombifeld. Es ist auch möglich, ein extra Formular dafür anzugeben, wenn man dafür eins erstellt hat.
Aber du wolltest ja kein Editieren, sondern das automatische Hinzufügen.

  • bei nicht in Liste: Ereignisprozedur

Kann ich nur im Bereich des Formulares für das Feld
„Land“ einstellen (im Bereich der Tabelle selbst geht das bei
mir nicht).

Generell: eine Tabelle ist auch nicht dafür gedacht Daten zu bearbeiten, sondern lediglich diese aufzunehmen und zu halten.
Die Daten sollten IMMER in einem Formular bearbeitet werden.
Auswertungen sollten dann über einen Bericht laufen.

(2) ich musste die beiden "

" wegmachen und

sorry, mein Fehler, ich habe das PRE nicht richtig abgeschlossen.

(3) an der Stelle „INSERT INTO tblLAND (Land)“ muss das
„tblLAND“ durch den Namen der Tabelle ersetzt werden ohne die
Buchstabenfolge „tbl“ (ich dachte, es handelt sich um einen
festen Ausdruck".

siehe oben :smile:

Grüße aus Rostock
Wolfgang
(Netwolf)