Namensspalte aufteilen

Hallo Leute,
in meiner Datenbank ist leider etwas schief gelaufen.
Ich habe nun den „Nachnamen1“, „Vorname2“,"Nachname2
alles in einer Spalte und möchte mit einem Makro die einzelnen Teile herauskopieren.
Ich habe dafür die folgende Schleife geschrieben.
Public Sub Datenmanipulation()

Dim db As Database
Set db = DBEngine.Workspaces(0).Databases(0)

Dim recLesen, recSchreiben, recnummer As Recordset
Dim intPos As Variant
Dim nummer As Double

'altDepotnummer = 0

Set recLesen = db.OpenRecordset(„Select * From Tabelle1“)
Set recSchreiben = db.OpenRecordset(„Select * From Tabelle1“)
Do Until recLesen.EOF

If Not IsNull(recLesen![Nachname1]) Then

recLesen.Edit

intPos = InStr(1, recLesen![Nachname1], " ")

If intPos > 0 Then
If Len(recLesen![Nachname1]) > „“ Then
recSchreiben![Vorname1] = Trim(Mid(recLesen![Nachname1], (intPos - 1), 4))
Else
recSchreiben![Nachname2] = „“
End If

End If
recLesen.Update
recLesen.MoveNext

End If
Loop
End Sub

Leider funktioniert das nicht ganz.
kann jemand helfen ?

Cruß Christian

Hallo Christian,

Ich habe nun den „Nachnamen1“, „Vorname2“,"Nachname2
alles in einer Spalte und möchte mit einem Makro die einzelnen
Teile herauskopieren.

Makro? du meinst eine VBA-Funktion?

Ich habe dafür die folgende Schleife geschrieben.
Public Sub Datenmanipulation()

Dim db As Database
Set db = DBEngine.Workspaces(0).Databases(0)

Dim recLesen, recSchreiben, recnummer As Recordset
Dim intPos As Variant
Dim nummer As Double

'altDepotnummer = 0

Set recLesen = db.OpenRecordset(„Select * From Tabelle1“)
Set recSchreiben = db.OpenRecordset(„Select * From
Tabelle1“)

warum öffnest du zwei Recordsets? Du liest und schreibst doch in ein und der selben Tabelle!

Do Until recLesen.EOF

If Not IsNull(recLesen![Nachname1]) Then

recLesen.Edit

hier schaltest du das Bearbeiten beim LESEN ein!? warum?

intPos = InStr(1, recLesen![Nachname1], " ")

If intPos > 0 Then
If Len(recLesen![Nachname1]) > „“ Then

LEN liefert einen Zahlenwert und kann nicht mit einem String verglichen werden!!
richtig wäre: If Len(recLesen![Nachname1]) > 0 Then

recSchreiben![Vorname1] =
Trim(Mid(recLesen![Nachname1], (intPos - 1), 4))
Else
recSchreiben![Nachname2] = „“
End If

End If
recLesen.Update

du startest das Editieren im Recordset LESEN und führst auch dort das Update durch. SCHREIBEN erledigst du aber im Recordset recSchreiben. Das kann nicht funktionieren!

recLesen.MoveNext

End If
Loop
End Sub

Leider funktioniert das nicht ganz.

logisch, siehe oben

kann jemand helfen ?

ich würde einfach eine Abfrage über die Tabelle laufen lassen.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo,

schreib folgende Funktion in ein allgemeines Modul:

Public Function fktExtract(Q, Pos As Long) As String
Dim a
a = Split(Nz(Q, „“), „,“)
If Pos >= LBound(a) And Pos

Hallo Franz,

das hab ich nicht verstanden:

Was meinst Du mit einer Aktualisierungsabfrage ?
wo soll ich den folgenden Code hineinschreiben ? - ich bin zu blöd !

UPDATE Tabelle1 SET Nachname1 = fktExtract([Vorname1],0), Vorname2 = fktExtract([Nachname1],1), Nachname2 = fktExtract([Nachname1],2)

Gruß Christian

Hallo Christian,

Was meinst Du mit einer Aktualisierungsabfrage ?

schau mal Links die Auflistung in deinem Haupt-Datenbankfenster an:
> Tabellen
> Abfragen
> Formulare
> Berichte
usw.

dort wählst du -> Abfragen
nun erstellst du eine neue leere Abfrage

  • In diesem Abfrageassistenten klickst du oben links das erste Icon mit dem kleinen Pfeil an. (Pfeil treffen)

  • wähle SQL

  • kopiere nun diesen SQL-String dort hinein:

UPDATE Tabelle1 SET Nachname1 = fktExtract([Vorname1],0), Vorname2 = fktExtract([Nachname1],1), Nachname2 = fktExtract([Nachname1],2)

  • wähle wieder das Icon mit dem Pfeil
  • wähle nun Entwurfsansicht

den SQL-String kannst du natürlich auch in VBA abarbeiten lassen:
siehe dazu die Hilfe für z.B. DOCMD.RUNSQL

DOCMD.RUNSQL „UPDATE Tabelle1 SET Nachname1 = fktExtract([Vorname1],0), Vorname2 = fktExtract([Nachname1],1), Nachname2 = fktExtract([Nachname1],2)“

btw das Wort UPDATE in einem SQL-String besagt, dass die Tabellenfelder aktualisiert werden.

Es gibt ein gutes Buch zur SQL-Programmierung: SQL in 24 Tagen
(die Erfahrung zweigt: um SQL richtig zu lernen benötigt man mehr als 24 Tage) :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)