Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: JulianZ. am September 20, 2010, 11:18:19

Titel: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 11:18:19
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.
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 11:24:05
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
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 11:32:35
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
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 12:01:18
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  :)
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 12:40:38
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
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 12:46:06
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!
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 14:46:07
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.
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 14:55:36
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
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 15:10:54
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
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 15:17:48
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.
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 15:32:34
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....
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 15:40:44
Kannst die DB mit ein paar Testdatensätzen komprimieren und hochladen?
Ich schau mir das am Echtsystem an.
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: DF6GL am September 20, 2010, 15:41:17
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.

Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 15:58:11
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
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 16:07:35
 ;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

Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: JulianZ. am September 20, 2010, 16:27:37
Ja, es klappt, er schreibt nur die falscher werte aus dem Kombifeld in die Tabelle VZ25.
Wisst ihr denn auch, wie ich dann die Warnmeldun ausschalte. Mit einem Makro ist das ganz leicht...?!?!
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: MzKlMu am September 20, 2010, 18:43:54
Hallo,
der Hinweis von Franz ist irgendwie untergegangen. Das Vorhaben ist ja im Normalfall überflüssig. Es genügt ja vollkommen den einen Wert (den den Du schon übertragen hast) zu übernehmen. Die anderen Felder ergeben sich ja autiomatisch aus den Beziehungen.

@Peter
Was ist denn los mit Dir  ;D, normalerweise erkennst Du doch auch solche falschen Ansätze.
Titel: Re: Mehrere Werte aus Kombinationsfeld in Tabelle speichern
Beitrag von: database am September 20, 2010, 19:23:56
@MzKlMu
Da hast du ausnahmslos recht, natürlich wäre es RICHTIG  Werte nicht doppelt abzulegen.
Mangel Kenntnis der Strukturen ist es in die Richtung gegangen und auch dort geblieben.  :-\ der Nachmittag war auch ein wenig mit Frust belegt (arbeitsplatzbedingt)
Vielleicht auch ein wenig nachlässig von mir ...  gelobe Besserung  bzw. Rückkehr auf den wahren Pfad der DB-Tugend  ;)

Da wir aber schon so weit sind ...
Zitater schreibt nur die falscher werte aus dem Kombifeld
Da musst die die Positionen der Columns in der Datenherkunft des Kombifeldes nachzählen - das erste Feld beginnt mit Position 0 - und dann bei ... Me!DeinKombifeld.Column(1) ...  berichtigen, natürlich auch beim 2. Feld

Überlege aber auf jeden Fall die Vorschläge und Einwände von Franz und Klaus - anhand des übergebenen Wertes aus der tbl_Berufe kannst du die 2 zusätzlichen Werte mittels Abfrage
jederzeit ermitteln und musst sie NICHT extra in VZ25 auslagern. Dies widerspricht einer normalisierten Datenhaltung.


ZitatWisst ihr denn auch, wie ich dann die Warnmeldun ausschalte
Ja,


DoCmd.SetWarnings False   'ausschalten

DoCmd.RunSQL strSQL

DoCmd.SetWarnings True    'einschalten


Grüße
Peter