Neuigkeiten:

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

Mobiles Hauptmenü

Datensätze in mehrere auflösen

Begonnen von Torsten., Februar 07, 2013, 14:47:27

⏪ vorheriges - nächstes ⏩

Torsten.

Hallo,
in der Tabelle (siehe Anhang) soll bei den Datensätzen die mehr als die eine
Artikelnr. in der Spalte sp_08 enthalten (8255333;8260024;8260039),
der Datensatz dementsprechend kopiert werden - so, das immer nur eine Artikelnr. in sp_08 ist.

Anhand der Abb. sind das 3 Sätze (sp_01) 10005, 10010 und 10012 die bearbeitet werden müßten

Das Ergebinis sollte dann so aussehen wie im unteren Block der Abb.

Gibt es eine Lösung für die Situation und kann mir jemand dabei helfen?

Gruß Torsten

[Anhang gelöscht durch Administrator]

DF6GL

#1
Hallo,

prinzipieller Luftcode:


Dim SP08 , i as Long
Dim rs as Dao.Recordset, db as Database

set db =Currentdb
set rs=db.Openrecordset("select * from Test where Instr(sp_08,';') >0", dbOpenSnapshot)

If not (rs.BOF or rs.EOF) Then
 Do Until rs.EOF
 SP08=Split(rs!sp_08,";")
 
    For i= Lbound(SP08) to Ubound(SP08)
       db.Execute "Insert into Test (sp_01,sp_02,sp_03,sp_04,sp_05,sp_06,sp_07,sp_08) Values ('" & _
      rs!sp_01 & "','" & rs!sp_02 & "','" & rs!sp_03 & "','" & rs!sp_04 & "','" & rs!sp_05 & "','" & rs!sp_06 & "','" & rs!sp_07 & "','"  &  SP08(i) & "')"
    Next

  rs.Movenext
  Loop

End if

rs.Close:set rs=Nothing
set db= Nothing



Torsten.

#2
Hallo,
ich habe im Kopf zunächst Public Function SplitDS() eingefügt - warum? Habe ich von Deinem Code zuvor übernommen. Ich weiß also nicht ob das richtig ist.
Bei set db =Currendb in Zeile 3 habe ich das t eingefügt und am Ende habe ich End Function angehängt.
Somit konnte ich mit F5 den Code starten.

In die Tabelle wurden über 1 Millionen Datensätze eingefügt.
Alle bezogen auf sp_01 = 10005 - siehe Anhang

Könntest Du da bitte noch mal drauf schauen.
Willst Du ggf. eine CSV-Datei mit den Daten haben?

Gruß Torsten

[Anhang gelöscht durch Administrator]

database

Hallo,

füge zwischen den Codezeilen  Next und Loop  die rot markierte Anweisung ein

If not (rs.BOF or rs.EOF) Then
 Do Until rs.EOF
 SP08=Split(rs!sp_08,";")
 
    For i= Lbound(SP08) to Ubound(SP08)
       db.Execute "Insert into Test (sp_01,sp_02,sp_03,sp_04,sp_05,sp_06,sp_07,sp_08) Values ('" & _
      rs!sp_01 & "','" & rs!sp_02 & "','" & rs!sp_03 & "','" & rs!sp_04 & "','" & rs!sp_05 & "','" & rs!sp_06 & "','" & rs!sp_07 & "','"  &  SP08(i) & "')"
    Next
    rs.MoveNext
  Loop

End if

Dieser Schritt wird benötigt um von einem Datensatz zum nächsten zu springen.
Fehlt die Anweisung bleibt die Verarbeitung immer am gleichen Datensatz stehen und stellt dadurch eine s.g. Endlosschleife dar.

HTH

DF6GL

Hallo,

in der Tat    :o   8)     


habe auch im  Original-Post korrigiert...

Torsten.

Hallo Ihr beiden,
vielen Dank für Eure Hilfe.
Hat funktioniert.
Gruß Torsten