Hallo,
ich habe folgende Situation:
Access 2002
In einer Tabelle mit 70.000 Datensätze ist u.a. eine Spalte (Textformat)
die Eigenschaften enthält die ich in einzelne Spalten aufgeteilt haben muß.
Der Inhalt pro Datensatz ist per Semikolon getrennt.
Beispiel
1. Datensatz:|jung;dynamisch |
2. Datensatz:|jung;dynamisch;kreativ |
3. Datensatz:|jung |
... u.s.w.
Ist es möglich diese 3 Eigenschaften in 3 Spalten zu bekommen?
z.B. wie folgt
|jung|dynamisch| |
|jung|dynamisch|kreativ|
|jung| | |
Kann mir da jemand helfen?
in etwas so:
dim rs1 as dao.recordset
dim rs2 as dao.recordset
dim s as string, sf() as string
dim i as long
set rs1=currentdb.openrecordset(DeineUrsprungsTabelle)
set rs2=currentdb.openrecordset("Select sp1, sp2, sp3 from DeineNeueTabelle")
do while rs1.eof = false
s = rs1(NamederTextspalte)
sf() = split(s,";")
rs2.Addnew
for i = 0 to ubound(sf)
rs2(i) = sf(i)
next
rs2.Update
rs1.movenext
loop
Hi,
vielen Dank zunächst.
Komme damit aber nicht weiter.
Bitte helfe:
Wenn kopiert wohin mit dem Code?
Zunächst einmal den Code kannst du nicht so einfach übernehmen, denn in Ermangelung deiner Datenstruktur, sind die Tabellen- und Spaltennamen frei gewählt. den Code hinterlegst du dann am besten auf einen Buttonklick.
Mit Buttonklick kann ich nichts anfangen,
kannst Du es mir etwas genauer erklären?
Hallo,
vielleicht hilft dir ein etwas "leichterer" Code:
Public Function Part(pString As String, pDelimiter As String, pPart As Integer) As String
'Teile aus String erstellen
Dim pArray As Variant
pArray = Split(pString, pDelimiter)
If Not IsNumeric(pPart) Then Exit Function
If pPart - 1 <= UBound(pArray) Then Part = pArray(pPart - 1)
End Function
den Code einfach in ein Modul deiner DB kopieren u. dann eine Abfrage:
select Textfeld, Part([Textfeld],"; ",1) AS Teil1, Part([Textfeld],";",2) AS Teil2, Part([Textfeld],";",3) AS Teil3
from DeineTabelle
gegebenfalls kannst du noch mehrere Teile zufügen u. aus Abfrage kann gegebenfalls eine Tabellenerstellungsabfrage gemacht werden.
Gruß Oma
PS: wenn du mit einen Buttonklick nichts anfangen kannst, wird das ganze schwierig:
das ist ein Ereignis: Beim Klicken, dass man auf ein erstellten Button anwenden kann.
Hi, vielen Dank für die Unterstützung.
Frage zum Code für die Abfrage:
- ist es richtig, dass ich für "Textfeld" den Namen der Spalte angebe? Im Beispiel "Eigenschaft" - und das 3mal
- für "DeineTabelle" die Tabelle worin die Spalte "Eigenschaft" enthalten ist?
Gruß
Hallo,
ja, das ist richtig.
Allerdings macht der Code noch nicht ganz das was du brauchst, er reagiert nämlich nicht darauf wenn die Reihenfolge der Einträge unterschiedlich ist
und die SQL der Abfrage enthält hier ... Part([Textfeld],"; ",1) ... nach dem Semikolon ein Leerzeichen zuviel.
Das muss raus, sonst füllt die Abfrage die erste Spalte mit dem Ganzen Text.
@oma ... stimmt, mir entgeht fast nix ... :D ;) ;D
Der Code, den ich hier poste ist zwar nicht einfacher aber er teilt die Textteile in die richtigen Spalten auf.
Zum 'Spielen' habe ich dir ein kleines Beispiel angehängt.
Öffne das Formular in der Entwurfsansicht, setze einen Haltepunkt auf die Kopfzeile der Private Sub... und klick dann auf den Button.
Du kannst anschließend mit F8 den Code schrittweise durchlaufen und siehst was passiert.
Private Sub cmdSplitt_Click()
Dim splitter() As String
Dim strSQL1 As String, strSQL2 As String, strSQL3 As String
Dim rst As DAO.Recordset
On Error Resume Next
'Access Meldungen unterdrücken
DoCmd.SetWarnings False
'Tabelle einlesen
Set rst = CurrentDb.OpenRecordset("SELECT ID, DeinMischfeld FROM DeineTabelle")
rst.MoveFirst
Do While Not rst.EOF
'Mischtext ins Array laden
splitter = Split(rst!DeinMischfeld, ";")
'Text-Aufteilung vornehmen und in die Einzelfelder eintragen
Select Case Left(splitter(0), 1)
Case "j"
strSQL1 = "UPDATE DeineTabelle SET feld1='" & splitter(0) & "' WHERE ID=" & rst!ID
DoCmd.RunSQL strSQL1
If Left(splitter(1), 1) = "d" Then
strSQL2 = "UPDATE DeineTabelle SET feld2='" & splitter(1) & "' WHERE ID=" & rst!ID
DoCmd.RunSQL strSQL2
End If
If Left(splitter(2), 1) = "k" Then
strSQL3 = "UPDATE DeineTabelle SET feld3='" & splitter(2) & "' WHERE ID=" & rst!ID
DoCmd.RunSQL strSQL3
End If
Case "d"
strSQL2 = "UPDATE DeineTabelle SET feld2='" & splitter(0) & "' WHERE ID=" & rst!ID
DoCmd.RunSQL strSQL2
If Left(splitter(1), 1) = "k" Then
strSQL3 = "UPDATE DeineTabelle SET feld3='" & splitter(1) & "' WHERE ID=" & rst!ID
DoCmd.RunSQL strSQL3
End If
Case "k"
strSQL3 = "UPDATE DeineTabelle SET feld3='" & splitter(0) & "' WHERE ID=" & rst!ID
DoCmd.RunSQL strSQL3
End Select
'nächster Datensatz
rst.MoveNext
Loop
End Sub
Mach eine KOPIE deiner Datenbank, bevor du herumexperimentierst!!!!!
Den Code kopierst du ins Ereignis 'Beim Klicken' eines Button auf einem Formular, erstellst in der betroffenen Tabelle 3 Felder (feld1, feld2,feld3)
Passe die Namen der Felder und der Tabelle im Code an und klick dann mal auf den Button..
Viel Spaß und gutes Gelingen! ;)
[Anhang gelöscht durch Administrator]
Hallo,
es hat funktioniert.
Vielen Dank an alle die mir geholfen haben.
Jetzt gibts Werder auf Sky und danach geht es mit der nächsten Frage weiter.
Freundliche Grüße
SUPER :D ;D ;)
bitte diesen Thread in DEINEM ersten Beitrag auf 'gelöst' setzen - DANKE!
Hallo,
@Peter: das Leerzeichen habe ich extra eingebaut um zu testen, ob du heute auch fit bist! ;D ;D
Gruß Oma
Hallo,
:D :D :D Test bestanden!