Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

mehrere Werte über Update Anweisung

Begonnen von ReneB, April 08, 2019, 12:42:51

⏪ vorheriges - nächstes ⏩

ReneB

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

PhilS

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 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
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

ReneB

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

MzKlMu

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.
Gruß Klaus

Milvus

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.

ReneB

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

DF6GL

#6
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.

ReneB

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

ReneB

#8
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