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
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)
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
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.
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.
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
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.
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
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