Hallo Leute,
ich bin schon am Rande der Verzweiflung, da ich folgenden Fehler nicht verstehe .
Ich greife per VB auf eine Oracle-Datenbank zu (Client 9i). Eine Funktion ruft ein Recordset mit ca 240.000 Geburtsdaten ab (Formatbsp.: 30011975 für 30.01.1975) welche ich bearbeite und dann in ein Datenfeld ablege.
Die Prozedur sieht folgendermassen aus:
Public Sub setGeburtsdatum()
'Diese Funktion fügt den Spalten "GeburtsdatumE900D010" und
' "GeburtsdatumE900DU00"
'das Geburtsdatum im Format TT.MM.JJJJ hinzu.
Dim Datum As String
Dim Jahr As String
Dim Monat As String
Dim Tag As String
Dim Datumscheck As Boolean
Dim i As Long
Dim j As Long
On Error GoTo errhandler
'Datenbankverbindung öffnen
OracleOpen
'Anzahl der Datensätze zählen
SQL = " Select Count(E900D010) AS Anzahl From " & kundenDaten
Set tabelle = New ADODB.Recordset
tabelle.Open SQL, conn, adOpenForwardOnly, adLockOptimistic
i = tabelle.Fields(0).value
tabelle.Close
Set tabelle = Nothing
'Recordset wird abgerufen
SQL = "Select E900D010, GeburtsdatumE900D010 From " & kundenDaten
Set tabelle = New ADODB.Recordset
tabelle.Open SQL, conn, adOpenStatic, adLockOptimistic
'Aufruf der Datensätze
Do While Not tabelle.EOF
j = j + 1
Datum = tabelle.Fields(0).Value
'Überprüfen des Datums und zelegen des Strings in Jahr, Monat un Tag
If Datum <> 0 And Len(Datum) > 6 Then
Jahr = Right(CStr(Datum), 4)
If Len(Datum) = 8 Then
Tag = Left(CStr(Datum), 2)
Monat = Mid(CStr(Datum), 3, 2)
Else
Tag = Left(CStr(Datum), 1)
Monat = Mid(CStr(Datum), 2, 2)
End If
Datum = Tag & "." & Monat & "." & Jahr
If IsDate(Datum) = True Then
Datumscheck = True
Else
Datumscheck = False
End If
End If
If Datumscheck = True Then
tabelle.Fields(1).Value = Datum
tabelle.Update
Datumscheck = False
End If
tabelle.MoveNext
Loop
'Schließen der Datenbankverbindung und zerstören des Recordset "tabelle"
tabelle.Close
Set tabelle = Nothing
ProgressBar.Value = 0
j = 0
SQL = "Select E900DU00, GeburtsdatumE900DU00 From " & kundenDaten
Set tabelle = New ADODB.Recordset
tabelle.Open SQL, conn, adOpenStatic, adLockOptimistic
'Aufruf der Datensätze
Do While Not tabelle.EOF
j = j + 1
Datum = tabelle.Fields(0).Value
'Überprüfen des Datums und zelegen des Strings in Jahr, Monat un Tag
If Datum <> 0 And Len(Datum) > 6 Then
Jahr = Right(CStr(Datum), 4)
If Len(Datum) = 8 Then
Tag = Left(CStr(Datum), 2)
Monat = Mid(CStr(Datum), 3, 2)
Else
Tag = Left(CStr(Datum), 1)
Monat = Mid(CStr(Datum), 2, 2)
End If
Datum = Tag & "." & Monat & "." & Jahr
If IsDate(Datum) = True Then
Datumscheck = True
Else
Datumscheck = False
End If
End If
If Datumscheck = True Then
tabelle.Fields(1).Value = Datum
tabelle.Update
Datumscheck = False
End If
tabelle.MoveNext
Loop
'Schließen der Datenbankverbindung und zerstören des Recordset "tabelle"
tabelle.Close
Set tabelle = Nothing
'Datenbankverbindung schließen
OracleClose
Exit Sub
'Bei einem Fehler wird dieser geloggt
errhandler:
fehlerAnzahl = fehlerAnzahl + 1
FehlerBearbeitung "Anfügen des Geburtsdatums fehlgeschlagen. Von " & i & "" & _
"Datensätze wurden " & j & " Datensätze bearbeitet. " & Err.Description
Resume Next
End Sub Beim Aufruf der Prozedur stürzt meine Entwicklungsumgebung ab. Leider kann ich den Fehler aber nicht lokalisieren. Bei einem Probelauf erhielt ich die Fehlermeldung "Division durch Null" beim Zugriff auf das Recordset. Datum = tabelle.Fields(0).Value
Vielleicht hat ja schon jemand so ein Problem gehabt und kann mir weiterhelfen.
Gruß
Brogi |