002
30.09.2005, 20:51 Uhr
scarred
|
Zitat von ~Gaschd: |
hallo,
hier eine frage, die mir wahrscheinlich nur ein echter crack beantworten kann. ich habe in access-vba ein modul implementiert, das datensätze nach jahren aufsplittet (funktioniert problemlos) un dann doppelte einträge löschen soll, allerdings nicht einfach einen von beiden, sondern den, der in einer bestimmten spalte den niedrigeren wert enthält. erstmal der code zum veranschaulichen:
Visual Basic: |
Function MaxInts() Dim jahr As Integer, ende As Integer, vor_jahr As Integer, vor_int As Integer, satz As Integer Dim vor_kID As Long Dim db As Database Dim Intens As Recordset, MaxInt As Recordset Set db = CurrentDb Set Intens = db.OpenRecordset("Intensities2") Set MaxInt = db.OpenRecordset("MaxInts")satz = 1 Do Until MaxInt.EOF MaxInt.Delete MaxInt.MoveNext Loop
Do Until Intens.EOF With Intens jahr = Year(!PeriodStart) If IsNull(!periodend) Then ende = Year(Date) Else ende = Year(!periodend) End If
If ende > Year(Date) Then MsgBox ("Fehler: Bei Konflikt " & Intens!conflictID & " ist das Jahr " & ende & " eingetragen, das sich In der Zukunft befindet.")
If IsNull(Intens!intensitycode) Then .MoveNext GoTo 20 End If End With
With MaxInt While jahr <= ende .AddNew !konfliktID = Intens!conflictID !jahr = jahr !maximaleint = Intens!intensitycode jahr = jahr + 1 .Update Wend End With
vor_jahr = jahr - 1 vor_kID = Intens!conflictID vor_int = Intens!intensitycode Intens.MoveNext20Loop
'--------------------------------------------------------- 'bis hier läuft alles wie es soll '---------------------------------------------------------
Set MaxInt = db.OpenRecordset("MaxInts")
With MaxInt Do Until .EOF If !konfliktID = vor_kID And !jahr = vor_jahr Then If !maximaleint > vor_int Then .MovePrevious .Delete .MovePrevious End If
vor_jahr = !jahr vor_kID = !konfliktID vor_int = !maximaleint .MoveNext Loop End With
db.Close
End Function
|
an dem problematischen teil des codes sieht man schon, dass nach der größeren int (in dem fall stehts für intensität) überprüft werden soll.
und jetzt der hammer: warum funktioniert der code für weniger als 100 datensätze problemlos, bei mehr (wir behandeln ca. 14000) aber nicht mehr? die problematik stellt sich in der form dar, dass eben nicht alle doppelten einträge entfernt werden. diejenigen, die drinbleiben, sind aber in keiner weise ungewöhnlich oder signifikant unterschiedlich zu denen, bei denen alles glatt geht.
vielen dank im voraus für hilfreiche antworten!
|
Das ist bei mir das gleiche und ich habs jetzt zum 100ten mal probiert sgeht nicht -- cteam2005.de Das Team für Anfänger |