Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mehrere Werte aus Kombinationsfeld in Tabelle speichern

Begonnen von JulianZ., September 20, 2010, 11:18:19

⏪ vorheriges - nächstes ⏩

JulianZ.

Hallo...

Folgendes Problem:

Ich möchte einen Wert (eine Schule) in einem Formular aus einem Kombinationsfeld wählen.
Nun sollen aus sich der beziehenden Tabelle 3 Werte in eine andere Tabelle speichern.
Wie mache ich das. Bislag habe ich es bloß mit einem Wert geschafft.

Ich würde mich sehr über eine schnelle Antwort freuen.

Mfg Julian Z.

database

Hallo,
da gibts sicher verschiedene Lösungsansätze dazu.
Erst aber einmal 4 Fragen:
"beziehende Tabelle " --- meinst du damit jene Tabelle, welche die Datenherkunft des Kombifeldes darstellt?

und wenn ja, sind die interessanten Werte ebenfalls im Kombifeld vorhanden oder nur in der Tabelle?

Ist das Kombifeld so aufgebaut, dass die gebundene Spalte das ID-Feld der Herkunftstabelle darrstellt?

ZitatBislag habe ich es bloß mit einem Wert geschafft
Wie hast du das bewerkstelligt?

Fragen über Fragen ...  :)

Grüße

peter

JulianZ.

wow, danke für die schnelle Antwort.

Also....
Die mit beziehende Tabelle meine ich die, wo die Berufe stehen und im Kombinationsfeld angezeigt werden.
Die interessanten Werte stehen noch im Kombinationsfeld, also berufsnummer(0001) und Berufsbezeichnung(0010).....
Was ist ID-Feld?? Aslo wie gesagt, das Kombinationsfeld holt die Wertte aus der Tabelle Berufe und soll dann 3 Werte aus der Tabelle in eine andere Tabelle schreiben.

Ein Wert zu übergeben ist einfach. Das Formular bezieht sich auf die Tbelle Berufe und im Kombinationsfeldassistenten kann ich sagen, Berufsnummer in Tabelle X speichern. (Bezogen auf den Datensatz) .....

Hoffe du hast noch einen Durchblick...

Danke im vorraus

database

Jou...  Durchblick hoffe ich ist noch gegeben ...  :)

Also wie bereits erwähnt gäbe es da verschieden Möglichkeiten. Ich versuche dir eine davon näher zu bringen.

Mit ID-Feld ist im Allgemeinen immer der Primärschlüssel der Tabelle gemeint.
In der Regel wird ein Kombifeld so aufgebaut, dass eben dieses ID-Feld ausgeblendet uim Kombifeld vorhanden ist und - weil's ja so leichter verständlich ist - ein Textwert angezeigt wird.

Da die interessierenden Werte im Kombifeld stehen, können sie von dort bezogen werden, nachdem du eine Auswahl getroffen hast.
Diese Werte werden in Variablen eingelesen und dann per SQL in die Zieltabelle geschickt.
Zu diesem Zweck muss man sich eines Ereignisses bedienen - im gegenständlichen Fall das Ereignis 'Nach Aktualisierung' deines Kombifeldes.

Markiere im Formularentwurf dein Kombifeld und wähle per rechtsklick die Eigenschaften des Kombifeldes aus.
Dann gehst du azuf die Registerkarte 'Ereignisse' und da wählst du im Dropdown des Ereignisses 'Nach Aktualisierung' den Eintrag Ereignisprozedur aus.
Danach klickst du auf die 3 Punkte - du gelangst in den VB-Editor und befindest dich in der Routine 'Private Sub NameDeinesKombis_AfterUpdate()'

Hierhin (zwischen Private Sub...   und End Sub) kannst du den folgende Code kopieren, wenn in die Tabelle die Auswahl als NEUER Datensatz geschrieben werden soll:

Dim strBeruf as String, strBezeichnung as String, lngID as Long, strSQL as String
strBeruf = Me!DeinKombifeld.Column(2)
strBezeichnung = Me!DeinKombifeld.Column(3)
lngID = Me!DeinKombiFeld

strSQL = "INSERT INTO DeineZieltabelle(Zielfeld1, Zielfeld2, Zielfeld3)VALUES(" & lngID & ",'" & strBeruf & "','" & strBezeichnung & "')"

DoCmd.RunSQL strSQL



Wird hingegen ein Datensatz geändert, lautet der Code folgendermaßen:


Dim strBeruf as String, strBezeichnung as String, lngID as Long, strSQL as String
strBeruf = Me!DeinKombifeld.Column(2)
strBezeichnung = Me!DeinKombifeld.Column(3)
lngID = Me!DeinKombiFeld

strSQL = "UPDATE DeineZieltabelle SET Zielfeld2 ='" & strBeruf & "', Zielfeld3='" & strBezeichnung & "' WHERE Zielfeld1=" & lngID

DoCmd.RunSQL strSQL



Ausgehend davon, dass das Kombifeld so aufgebaut ist, wie ich oben beschrieben habe, stellt dann    Column(2)    die 3. Spalte im Kombifeld dar (1. Spalte die I)D, 2. Spalte der Name der Schule, 3. Spalte die Nummer des Berufs , ...)

HTH
Peter

p.s. Hoffe du hast jetzt noch den Durchblick  :)

JulianZ.

Ich weiß nicht, was genau ich jetzt in dem VBS code verädern muss.. Ich schilder dir nun mal meinen vorgang.
Ich habe ein Formular (Formular1), dort befindet sich das Kombinationsfeld2. Dies bezieht sich auf die Tabelle tbl_berufe.
In der Tabelle soll der wert berufsfeld in die Tabelle VZ25 in SCHBERW1_1 stehen. Der Wert Berufsgruppe in Tabell VZ25 in Schuberw1_2.

Danke

database

Naja dann - also ein neuer Datensatz in der Tabelle VZ25:

ZitatIn der Tabelle soll der wert berufsfeld in die Tabelle VZ25 in SCHBERW1_1 stehen. Der Wert Berufsgruppe in Tabell VZ25 in Schuberw1_2.


Dim strBeruf as String, strBezeichnung as String, lngID as Long, strSQL as String
strBeruf = Me!DeinKombifeld.Column(2)
strBezeichnung = Me!DeinKombifeld.Column(3)
lngID = Me!DeinKombiFeld

strSQL = "INSERT INTO VZ25(SCHBERW1_1, Schuberw1_2)VALUES('" & strBeruf & "','" & strBezeichnung & "')"

DoCmd.RunSQL strSQL



sollte so funktionieren

TESTEN BITTE IMMER MIT EINER KOPIE DER DATENBANK - NIEMALS AM ORIGINAL!

JulianZ.

Nein, es soll eine Update-abfrage sein.. bekomm dass nochnicht soganz hin.. Aber vielen Dank schonmal.

Ich bin sehr beeindruckt, wie schnell ich hier Antworten bekomme

mfg Julian Z.

database

Na gut, dann eben ein Update ... ist ja kein Problem   ;D


Allerdings müsstest du selbst noch das Vergleichsfeld eintragen, dessen Namen kenne ich nicht bzw. weiß nicht was da drin steht.


Dim strBeruf as String, strBezeichnung as String, lngID as Long, strSQL as String
strBeruf = Me!DeinKombifeld.Column(2)
strBezeichnung = Me!DeinKombifeld.Column(3)
lngID = Me!DeinKombiFeld

strSQL = "UPDATE VZ25 SET SCHBERW1_1='" & strBeruf & "',  Schuberw1_2='" & strBezeichnung & "' WHERE Vergleichsfeld =" & lngID

DoCmd.RunSQL strSQL



Das Vergleichsfeld bzw der Vergleichswert MUSS sein, damit der richtige Datensatz aktualisiert werden kann.
Wir dieser nicht angegeben, wird die GESAMTE Tabelle mit den neuen Werten überschrieben.

Greets

JulianZ.

Jetzt kommt ein Parameter Vergleichsfeld... Was ist das Vergleichsfeld?
ZitatDim strBeruf As String, strBezeichnung As String, lngID As Long, strSQL As String
strBeruf = Me!Kombinationsfeld2.Column(2)
strBezeichnung = Me!Kombinationsfeld2.Column(3)
lngID = Me!Kombinationsfeld2

strSQL = "UPDATE VZ25 SET SCHBERW1_1='" & strBeruf & "',  SCHBERW1_2='" & strBezeichnung & "' WHERE Vergleichsfeld =" & lngID

DoCmd.RunSQL strSQL

database

Hallo,

ist klar, dass da eine Frage kommt, wenn du WHERE Vergleichsfeld ...  geschrieben hast.  Statt Vergleichsfeld musst du den Namen jenes Feldes Schreiben in dem der Wert gespeichert ist, der den Datensatz als den richtigen kennzeichnet.
Nach deiner Aussage ...
ZitatBerufsnummer in Tabelle X speichern. (Bezogen auf den Datensatz
...wurde bereits ein Wert in die Tabelle X (nehme an, das ist VZ25) eingetragen.
Wenn du nun 2 Weitere Werte in den gleichen Datensatz eintragen willst muss verglichen werden welcher Datensatz zu nehemn ist.

JulianZ.

Mein code sieht nun so aus:


Private Sub Kombinationsfeld2_AfterUpdate()
Dim strBeruf As String, strBezeichnung As String, lngID As Long, strSQL As String
strBeruf = Me!Kombinationsfeld2.Column(1)
strBezeichnung = Me!Kombinationsfeld2.Column(3)
lngID = Me!Kombinationsfeld2

strSQL = "UPDATE VZ25 SET SCHBERW1_1='" & strBeruf & "',  SCHBERW1_2='" & strBezeichnung & "' WHERE ppindex =" & lngID

DoCmd.RunSQL strSQL



Es kommt zwar schon ein Fenster wo steht, dass keine Daten in TABELLE VZ25 geschrieben werden, aber schonmal ein Anfang...

DANKE SCHON MAL....

database

Kannst die DB mit ein paar Testdatensätzen komprimieren und hochladen?
Ich schau mir das am Echtsystem an.

DF6GL

Hallo,

"lngID = Me!Kombinationsfeld2"
ist ja wohl auch die falsche "ID"  (ist das Primärschlüsselfeld bzw. -wert in Tabelle "tbl_Berufe")


Was Du brauchst, ist der ID-Wert des Datensatzes aus Tabelle VZ25, in welchem die Werte geschrieben (aktualisiert) werden sollen.



Insgesamt habe ich den Eindruck, dass es sich um eine mürbe Datenbasis (Tabellenbeziehungen) handelt. Normalerweise wird nur der ID-Wert EINES Datensatzes (hier aus "tbl_Berufe") in eine andere Tabelle (als Fremdschlüsselwert) geschrieben, und nich sonstige Attribute aus dem selben Datensatz.


JulianZ.

Es klappt schon fast.. ppindex ist der Primärschlüssel und mein Code sieht nun so aus:


Private Sub Kombinationsfeld2_AfterUpdate()
Dim strBeruf As String, strBezeichnung As String, lngID As Long, strSQL As String
strBeruf = Me!Kombinationsfeld2.Column(1)
strBezeichnung = Me!Kombinationsfeld2.Column(3)
lngID = Me!Kombinationsfeld2

strSQL = "UPDATE VZ25 SET SCHBERW1_1='" & strBeruf & "',  SCHBERW1_2='" & strBezeichnung & "' WHERE VZ25.ppindex= [Formulare]![AOK_2010]![ppindex]"

DoCmd.RunSQL strSQL

database

#14
 ;D

lngID = Me!Kombinationsfeld2  ... war beispielhaft zu sehen - ich kenne deine Gegebenheiten leider nicht, daher ...


strSQL = "UPDATE VZ25 SET SCHBERW1_1='" & strBeruf & "',  SCHBERW1_2='" & strBezeichnung & "' WHERE ppindex=" &  Me!ppindex


oder


Dim strBeruf as String, strBezeichnung as String, lngIndex as Long, strSQL as String
strBeruf = Me!DeinKombifeld.Column(1)
strBezeichnung = Me!DeinKombifeld.Column(3)
lngIndex = Me!ppindex  'wenn das Feld am aktuellen Formular ist sonst     Forms!AOK_2010!ppindex

strSQL = "UPDATE VZ25 SET SCHBERW1_1='" & strBeruf & "',  Schuberw1_2='" & strBezeichnung & "' WHERE ppindex=" & lngIndex

DoCmd.RunSQL strSQL