Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Torsten. am Mai 08, 2011, 18:38:28

Titel: Datensatz aufsplitten
Beitrag von: Torsten. am Mai 08, 2011, 18:38:28
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
Titel: Re: Datensatz aufsplitten
Beitrag von: DF6GL am Mai 08, 2011, 18:41:15
Hallo,

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


Welche Art von Hilfe benötigst Du?
Titel: Re: Datensatz aufsplitten
Beitrag von: Torsten. am Mai 08, 2011, 18:46:10
Hallo,
am besten wie der Code ist um die Tabelle zu erstellen.
Titel: Re: Datensatz aufsplitten
Beitrag von: DF6GL am Mai 08, 2011, 18:48:40
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.
Titel: Re: Datensatz aufsplitten
Beitrag von: Torsten. am Mai 08, 2011, 18:52:04
In der Tabelle sind diverse Internas enthalten, die nicht öffentlich zugänglich sein dürfen.
Kann ich sie Dir irgendwie anders zukommen lassen?
Titel: Re: Datensatz aufsplitten
Beitrag von: DF6GL am Mai 08, 2011, 19:14:44
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 .
Titel: Re: Datensatz aufsplitten
Beitrag von: Torsten. am Mai 08, 2011, 19:49:36
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
Titel: Re: Datensatz aufsplitten
Beitrag von: DF6GL am Mai 08, 2011, 22:06:03
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
Titel: Re: Datensatz aufsplitten
Beitrag von: Torsten. am Mai 09, 2011, 20:49:20
Hallo Franz,
das hat bestens funktioniert.
Vielen Dank für Deine Hilfe.
Gruß TVH