Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ReneB am April 08, 2019, 12:42:51

Titel: mehrere Werte über Update Anweisung
Beitrag von: ReneB am April 08, 2019, 12:42:51
Hallo Forum,

hoffe hier wieder Hilfe zu finden. Ich muss mehrere Werte in einem Feld unterbringen und zwar über eine update-Anweisung. Bisher wurde nur ein Wert benötigt, alles super. Jetzt hat sich herausgestellt, daß mehrere Werte hintereinander dargestellt werden sollen. Hat jemand eine Idee dazu?

Danke vorab.

Rene
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: PhilS am April 08, 2019, 13:04:21
Zitat von: ReneB am April 08, 2019, 12:42:51
Ich muss mehrere Werte in einem Feld unterbringen und zwar über eine update-Anweisung. Bisher wurde nur ein Wert benötigt, alles super. Jetzt hat sich herausgestellt, daß mehrere Werte hintereinander dargestellt werden sollen.
Das ist eine Struktur, die man eher vermeiden sollte. Gemäß der 1. Normalform (https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Erste_Normalform_(1NF)) sollen Werte in Datenbankfelder atomar (=unteilbar) sein.

Wenn du dein Ansinnen trotzdem fortsetzen willst, kannst du natürlich die Werte einfach kommagetrennt (oder wie auch immer) in ein Feld schreiben. - Das sollte in den meisten Fällen technisch trivial sein.

Falls du Daten aus mehreren Datensätzen zu einer kommagetrennten Liste zusammenfassen möchtest, gib es dazu bereits eine Reihe von Beispielen. Z.B.:  Daten einer Spalte als kommagetrennte Zeichenfolge ausgeben (https://codekabinett.com/rdumps.php?targetDoc=access-vba-daten-spalte-kommagetrennt-ausgeben)
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: ReneB am April 08, 2019, 14:01:00
Hallo,

danke für die schnelle Hilfe. Ich weiss schön ist das nicht, aber ich muss eine Produktionslinie nachbilden und da werden leider mehrere Produkte an einem Tag produziert. Es ist nur eine grafische Übersicht und sollte keine Probleme machen.
Ich probiere es aus und melde mich.

Bis dahin
Rene
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: MzKlMu am April 08, 2019, 15:20:22
Hallo,
die wenigsten Probleme kriegst Du, wenn Du für die Produktionslinie eine extra Tabelle machst (mit einem Fremdschlüssel zur Tabelle der Produktionslinie) und die Produkte als je ein Datensatz erfasst. Auch die Produkte als Fremdschlüssel.
Mit einem entsprechenden Formular können dann alle Daten übersichtlich dargestellt werden. Du solltest darüber nachdenken.
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: Milvus am April 08, 2019, 16:28:13
Ich stimme den vorherigen Beiträgen zu.

Für Dich wäre vermutlich folgende Alternative möglich:

1. atomares Schreiben in Felder
2. in einer SELECT-Abfrage (für die Darstellung) dann die Felder zusammen kleben

Falls noch Hilfe benötigt, einfach melden.
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: ReneB am April 09, 2019, 07:45:15
Hallo Leute,

für die Produktion an sich und auch für die Liniendarstellung habe ich getrennte Tabellen angelegt, deswegen wird es da auch keine Probleme geben. Wie gesagt aktuell bediene ich die Tabelle für die Liniendarstellung per update-Anweisung, aber da kann ich nicht mehrere Werte an ein Feld übergeben. Hier suche ich eine einfache Lösung, da ich nicht der Riesen Access Crack bin. Eine möglich Lösung habe ich schon bekommen, aber vieleicht hat nich jemand eine Idee?

Danke Euch.

Rene
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: DF6GL am April 09, 2019, 09:16:20
Hallo,

was verstehst Du denn genau hierunter:
Zitatda kann ich nicht mehrere Werte an ein Feld übergeben

Willst Du (irgend)einen Text in ein einzelnes normales Tabellenfeld vom Datentyp "kurzer Text" eintragen oder soll es sich um ein Mehrwertfeld (das wird intern als extra Tabelle in 1:n-Beziehung realisiert)  handeln?

Wenn Ersteres der Fall ist, dann kann der gewünschte Text (die "Auflistung"  der "Werte", vielleicht noch getrennt durch ein besonderes Zeichen) prinzipiell so mit Hilfe einer Aktualisierungsabfrage an das Tabellefeld übergeben werden:
Zitat
Dim strWerteListe as String, lngLinienID As Long

strWerteListe = "100;200;300;400;500"  'String (Text) zusammenbauen, woher die Daten auch immer kommen mögen)
lngLinienID = 4711

Currentdb.Execute "Update tblLiniendarstellung set LinienFeld = " & strWerteListe & " where LinienID = " & lngLinienID, dbFailOnError



Wenn die Tabellenstruktur entspr. meinen Vorrednern geändert (normalisiert) würde, so könnte man auf diese Lösung
http://dbwiki.net/wiki/VBA_Tipp:_Zeilen_einer_Spalte_einer_Tabelle_in_kommaseparierte_Liste_umwandeln
zurückgreifen und die "Lieniendarstellung" erst dann erzeugen, wenn sie gebraucht wird, z. B. in einem Bericht.
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: ReneB am April 09, 2019, 12:57:55
Hallo,

erster Fall passt für mich, da es sich eh nur um eine Hilfstabelle handelt, welche die Belegung unserer Produktionslinien darstellen soll. Hier wird nicht gerechnet und die Daten fliessen auch nirgendwo mit ein. Also reden wir über eine Aktualisierungsabfrage, welche mehrere Werte an ein Tabellenfeld übergibt, richtig? Habe mir Deinen Vorschlag angesehen und versuch mal das umzusetzen.

Danke.
Rene
Titel: Re: mehrere Werte über Update Anweisung
Beitrag von: ReneB am April 10, 2019, 13:19:08
Hallo Leute,

habe es gelöst über eine Funktion und eine Abfrage.
Funktion:
Public Function SZ(Linie As String, Datum As Date) As String
Dim strSQL As String
Dim rs As DAO.Recordset
strSQL = "SELECT Materialbeschreibung FROM ProduktionsplanungDetail_qry" & _
" WHERE Linie ='" & Linie & "'" & _
"And Datum= " & Format([Datum], "\#yyyy-mm-dd\#")
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)
Do While rs.EOF = False
SZ = SZ & ";  " & rs!Materialbeschreibung
rs.MoveNext
Loop
SZ = Mid(SZ, 2, 100)
rs.Close
Set rs = Nothing
End Function


Abfrage:
SELECT ProduktionsplanungDetail_tbl.Datum, ProduktionsplanungDetail_tbl.Linie, SZ([Linie],[Datum]) AS Materialbeschreibung
FROM ProduktionsplanungDetail_tbl
GROUP BY ProduktionsplanungDetail_tbl.Datum, ProduktionsplanungDetail_tbl.Linie
ORDER BY ProduktionsplanungDetail_tbl.Datum;


läuft super.

Danke für Eure Anregungen.

Rene

Bitte keine unleserlichen Farbspielereien. Codetags machen das besser. MzKlMu