Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Yves-KA am 20.11.06 - 22:14:32
-
Hallo zusammen,
ich importiere mir Datensätze aus einer Excel-Datei, basierend auf dem hier schon öfter verlinkten Beispiel aus der Sandbox: href="http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/ae94b2c10a4cb8a685256f0a0063866f?OpenDocument"
Jetzt hab ich natürlich das Problem mit Duplikaten. Ich hab dazu folgenden Code (im wesentlichen aus der Sandbox) in einem Agenten versucht:
Sub Initialize
Dim s As New notessession
Dim db As notesdatabase
Set db =s.currentdatabase
Set alldocs = db.getview("All")
Dim doc1 As notesdocument
Dim doc2 As notesdocument
Set doc1=alldocs.getfirstdocument
Do While Not (doc1 Is Nothing)
Set doc2=alldocs.getnextdocument(doc1)
If doc2 Is Nothing Then
Exit Do
End If
If Trim(Ucase(doc1.Name(0))) = Trim(Ucase(doc2.Name(0))) Then
doc1.remove True
End If
Set doc1=doc2
Loop
End Sub
Mir scheint aber, das kann theoretisch nur funktionieren, wenn die Duplikate direkt aufeinander folgen. Praktisch löscht mir der Code alle Dokumente bis auf das Letzte ;-)
Hat jemand eine Idee, wieso der Code oben nicht funktioniert? Oder gleich die sauberste Lösung: Wie ich bereits beim importieren von Datensätzen prüfen kann, ob ein entspr. Dokument bereits vorliegt?
Bin dankbar für jeden Tipp, Link, etc..
EDIT: Die Datensätze meiner Exceldatei haben schlicht mehrere Textfelder, eines davon ist einzigartig und soll als sozusagen unique id fungieren..
-
Zunächst einmal: Deine Deutung des Codes ist korrekt. So einfach wird es aber nicht mit "jeden Tipp, Link, etc.": Das Ganze ist zunächst erst einmal eine konzeptionelle Aufgabe - was ist denn bei Dir ein Duplikat? Was ist dann das Kriterium, welches die gültige Version ist? Sollen ggf. (unter welchen Bedingungen?) Daten aus "Duplikaten" zusammengeführt werden (nach welchen Regeln?), wenn solche gefunden werden?
Ich denke, hier musst Du erheblich mehr spezifizieren. Dann können wir Tipps (aber wegen der Spezifik wohl eher keinen fertigen Code) liefern.
Bernhard
-
Ich versuche es mal so darzustellen:
Exceldatei zum Zeitpunkt A:
| Lieblingsfarbe | Name | ID |
| grün | Max | 1 |
| blau | Moritz | 2 |
Exceldatei zum Zeitpunkt B:
| Lieblingsfarbe | Name | ID |
| grün | Max | 1 |
| gelb | Moritz | 2 |
| rot | Bernd | 3 |
Der Datensatz mit der ID "1" wäre dann ein Duplikat, welches ich nicht neu importieren, sprich verwerfen möchte. Der Datensatz mit der ID "2" wäre kein Duplikat, da sich ein Feld geändert hat. Datensatz "3" wäre schlicht neu und würde dazugefügt werden.
Wichtig ist dabei natürlich, dass die die Menge der Datensätze in der Exceldatei natürlich wesentlich höher ist und außerdem deren Reihenfolge durchaus variieren kann.
Interessant wäre ausserdem - über das Duplikatproblem hinaus - eine Art History der geänderten Einträge (in obigem Beispiel der Datensatz "2"). Wie wäre das am Besten zu lösen, mit Response-Dokumenten? ...aber das nur im Hinterkopf, das soll später dazukommen, hat aber sicher Einfluss auf mein eigentliches Duplikatproblem oben.
Danke! :)
-
Hallo,
Du müßtest durch die Datensätze "schleifen" und für jeden Datensatz prüfen, ob es zu der ID schon ein Dokument ni der Datenbank gibt.
z.B
Set doc = view.GetDocumentByKey(ID, True)
If Not (doc Is Nothing) Then
...Updateverarbeitung
Else
...neues Dokument anlegen
End If