Neuigkeiten:

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

Mobiles Hauptmenü

Datensatz aufsplitten

Begonnen von Torsten., Mai 08, 2011, 18:38:28

⏪ vorheriges - nächstes ⏩

Torsten.

Hallo,
wir haben folgende Tabelle mit ca. 2500 Datensätze, im Prinzip wie folgt aufgebaut:

|Produkt-Nr       |Bezeichnung    |Ausführung
--------------------------------------------------------------
|125                  |Käse                |12, 17, 19, 25
|130                  |Schinken          |17,25

Nun möchten wir die Information in "Ausführung" als 4 bzw. 2 Datzensätze aufsplitten,
so wie unten dargestellt.

|Produkt-Nr       |Bezeichnung    |Ausführung
--------------------------------------------------------------
|125                  |Käse                |12
|125                  |Käse                |17
|125                  |Käse                |19
|125                  |Käse                |25
|130                  |Schinken          |17
|130                  |Schinken          |25

Ist das möglich?

Ich bitte um Hilfe

DF6GL

Hallo,

ja, das ist möglich (mit entspr. programmierten VBA-Code).


Welche Art von Hilfe benötigst Du?

Torsten.

Hallo,
am besten wie der Code ist um die Tabelle zu erstellen.

DF6GL

Hallo,

lad mal die DB mit der Tabelle hier hoch.


Bevor ich da irgendwelchen Code "entwerfe", will ich sicher sein, dass die Daten(strukturen)  in der Tabelle mit Deiner Beschreibung übereinstimmen.

Torsten.

In der Tabelle sind diverse Internas enthalten, die nicht öffentlich zugänglich sein dürfen.
Kann ich sie Dir irgendwie anders zukommen lassen?

DF6GL

#5
Hallo,

probieren wir es erst so:


erstell eine Public Funktion in einem Standardmodul:

Public Function SplitDS()
Dim rs As DAO.Recordset, db As Database, Ausf, i As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("tblTabelle1", dbOpenSnapshot)    ' tblTabelle1 ist die Ursprungstabelle
Do Until rs.EOF
Ausf = Split(rs!Ausführung, ",")
   For i = LBound(Ausf) To UBound(Ausf)
   db.Execute "insert into tblTabelle2 ([Produkt-Nr],Bezeichnung,Ausführung) Values ('" & rs![Produkt-Nr] & "','" & rs!Bezeichnung & "'," & Ausf(i) & ")" ' tblTabelle2 ist identisch mit tblTabelle1 außer dass "Ausführung" den Datentyp Zahl, Long Integer besitzt
   Next

rs.MoveNext
Loop


rs.Close

Set rs = Nothing
End Function
Diese Funktion kann im Direktfenster direkt aufgerufen  oder mit Taste F5 und Cursor in der Funktion platziert  direkt ausgeführt werden .

Torsten.

Ich bekomme eine Fehlermeldung:
"Benutzerdefinierter Typ nicht definiert"
"rs As DAO.Recordset" ist blau hinterlegt.
Ich muß noch dazusagen, das in Spalte "Ausführung" auch Buchstaben vorkommen - wie 320i, 323i, 325i, 328i, 318tds, 325td, 325tds.
Alle 3 Spalten sind als Felddatentyp Text eingerichtet.

Ich habe es so verstanden, das eine weitere leere Tabelle angelegt werden soll, "aktuell" beinhaltet die Datensätze, "aktuell_01" hat die gleiche Struktur ohne Datensätze.


Public Function SplitDS()
Dim rs As DAO.Recordset, db As Database, Ausf, i As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("aktuell", dbOpenSnapshot)    ' tblTabelle1 ist die Ursprungstabelle
Do Until rs.EOF
Ausf = Split(rs!Ausführung, ",")
    For i = LBound(Ausf) To UBound(Ausf)
    db.Execute "insert into aktuell_01 ([Produkt-Nr],Bezeichnung,Ausführung) Values ('" & rs![Produkt-Nr] & "','" & rs!Bezeichnung & "'," & Ausf(i) & ")" ' tblTabelle2 ist identisch mit tblTabelle1 außer dass "Ausführung" den Datentyp Zahl, Long Integer besitzt
    Next

rs.MoveNext
Loop


rs.Close

Set rs = Nothing
End Function

DF6GL

Hallo,

ja, nicht umsonst wollte ich die Tabelle/DB sehen...   ::)



"Benutzerdefinierter Typ nicht definiert"

öffne den VBA-Editor und setze einen Haken vor "DAO3.6 Library" unter Menüleiste/Extras/Verweise.




"...das in Spalte "Ausführung" auch Buchstaben vorkommen "   

das entspricht eben nicht Deiner ersten Beschreibung...



Das Feld "Ausführung" in Tabelle  "aktuell_01" muß den Datentyp TEXT aufweisen.



Versuch diesen Code (nach o. g. Setzen des Verweises):


Public Function SplitDS()
Dim rs As DAO.Recordset, db As Database, Ausf, i As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("aktuell", dbOpenSnapshot)   
Do Until rs.EOF
Ausf = Split(rs!Ausführung, ",")
    For i = LBound(Ausf) To UBound(Ausf)
    db.Execute "insert into aktuell_01 ([Produkt-Nr],Bezeichnung,Ausführung) Values ('" & rs![Produkt-Nr] & "','" & rs!Bezeichnung & "','" & Ausf(i) & "')"
    Next

rs.MoveNext
Loop


rs.Close

Set rs = Nothing
End Function

Torsten.

Hallo Franz,
das hat bestens funktioniert.
Vielen Dank für Deine Hilfe.
Gruß TVH