Domino 9 und frühere Versionen > ND6: Entwicklung

Probleme mit FTsearch

(1/3) > >>

bikerboy:
Hallo zusammen,

also ich habe hier ein Problem. Ich versuche gerade eine Dublettenprüfung zu realisieren, aber im Moment ärgert mich Notes. Ich habe eine NotesDocumentCollection zusammen gestellt in der einfach alle Dokumente enthalten sind.

Dann lasse ich ein FTSearch auf die Collection los. hier ein kurzer Programmschnipsel


--- Code: ---If colSearch.Count  <> 0 Then
searchField = "company"
searchValue =docCol.GetItemValue(searchField)(0)
Call colSearch.FTSearch(searchValue,0)
End If
--- Ende Code ---

Im Wert für searchValue ist ein ordentlicher String er findet das passende Dokument auch und schmeisst alle anderen Dokumente aus der Collection raus. Wenn ich aber die Firma doppelt in der DB habe , gibt er mir kein Dokument zurück obwohl die Strings identisch sind, weil ich die Daten einfach kopiert habe.

Desweiteren ist interessant, dass wenn ich (komische Satzkonstruktion) zuerst auf PLZ prüfen lasse


--- Code: ---If colSearch.Count <> 0 Then
searchField = "zip"
searchValue = docCol.GetItemValue(searchField)(0)
Call colSearch.FTSearch(searchValue,0)
End If
--- Ende Code ---

Er mir die 4 passenden Dokumente liefert.


-------------------------------------------------------------------------------------------------------------------------

Damit wäre das erste Mysterium erklärt und ich hoffe es wird auch verstanden.
Wenn nicht bitte melden

Die zweite Sache ist halt die, dass ich bei dem 2. Durchlauf mit FTSearch immer nichts zurück bekomme obwohl die Daten eindeutig vorhanden sind. Darf man keine 2 Ftsearch hintereinander auf eine Collection durchführen ? in der Hilfe steht es so zumindest nicht drin.

Bitte helft mir ich bin am verzweifeln.

Gruss Robert

Axel:
Kann es vielleicht sein, dass dein Volltext nicht aktuell ist?


Axel

bikerboy:
Doch ich aktualisiere den index immer wenn der agent läuft

Axel:
Was passiert denn, wenn du FTSearch nicht auf eine Collection loslässt sondern auf die Datenbank? Das Ergebnis ist dann ein Collection der gefundenen Dokumente.


Axel



 

bikerboy:
Es geht ja darum die Suche immer wieder zu verfeinern.

Quasi das Sandkastenprinzip. Man siebt so lange bis man die den feinsten Sand hat.

Wenn ich gleich am Anfang alle Daten berücksichtige schreibe ich vllt dennoch häufig doppelte Datensätze in die Datenbank


Ich schreibe euch nochmal den gesamten Code. Vielleicht ist ja doch noch irgendwo der Wurm drin


--- Code: ---Dim session As NotesSession ' Die Session zum Arbeiten
Dim dbthis As NotesDatabase ' Die göffnete DB "preDocHouse"
Dim collection As NotesDocumentCollection ' Die NotesDocumentCollection aus dieser DB
Dim docCol As NotesDocument ' Die Dokumente aus der "preDocHouse"-DB
Dim dbDocHouse As NotesDatabase    ' Die "DocHouse"-Db
Dim isOpenFlag As Boolean ' Diese Flag zeigt an ob die DB geöfnet wurde
Dim i As Integer ' Der Zähler für die For-Schleife
Dim colSearch As NotesDocumentCollection ' Die NotesDocumentCollection für die Suche in der "DocHouse"DB
Dim docSearch As NotesDocument ' ein Dokument aus der colSearch
Dim strFieldname As String ' Feldname aus der DocHouseDB das untersucht werden soll
Dim strErgebnis As String ' String in dem die Suchergebnisse dargestellt werden
Dim searchField As String ' Das Feld in dem gesucht werden soll
Dim searchValue As String ' Der Suchtext für das zuvor deklarierte Feld
Dim colCount As Integer ' Beinhaltet die Azahl der Dokumente in der colSearch

Set session = New NotesSession ' Eröffnen der Session
Set dbthis = session.CurrentDatabase ' Initalisieren der aktuell geöffnetten DB
Set collection = dbthis.UnprocessedDocuments ' Einsammeln der bis jetzt unbearbeiteten Dokumente
Set dbDocHouse = session.GetDatabase("","DocHouse") ' Initalisieren der DocHouse DB


If Not dbthis.IsOpen Then ' Prüfen ob die DB geöffnet wurde
Msgbox "Die Datenbank konnte nicht geöffnet werden ! "
End If

If Not dbDocHouse.IsOpen Then ' Prüfen ob die DocHouse DB geöffnet werden konnte
Msgbox "Die Datenbank (DocHouse) konnte nicht geöffnet werden ! "
End If


Call dbDocHouse.UpdateFTIndex(True) ' aktualisieren des Indexes


Set colSearch = dbDocHouse.AllDocuments Aufstellen der Collection in der gesucht werden soll
Call colSearch.FTSearch("form",0) ' erstes Filtern der Daten

colCount = collection.Count

For i = 1 To colCount

If i = 1 Then
Set docCol = collection.GetFirstDocument
Else
Set docCol = collection.GetNextDocument(docCol)
End If

If colSearch.Count  <> 0 Then
searchField = "company"
searchValue =docCol.GetItemValue(searchField)(0)
Call colSearch.FTSearch(searchValue,0)
End If

If colSearch.Count  <> 0 Then
searchField = "city"
searchValue =docCol.GetItemValue(searchField)(0)
Call colSearch.FTSearch(searchValue,0)
End If

If colSearch.Count <> 0 Then
searchField = "street"
searchValue = docCol.GetItemValue(searchField)(0)
Call colSearch.FTSearch(searchValue,0)
End If

If colSearch.Count  <> 0 Then
searchField = "street"
searchValue = docCol.GetItemValue(searchField)(0)
Call colSearch.FTSearch(searchValue,0)
End If

If colSearch.count =0 Then
' kein Datensatz in der Form vorhanden
Call docCol.ReplaceItemValue("status","1")
Call docCol.Save(True,False)
Elseif colSearch.count = 1Then
' ein Datensatz in der Form vorhanden
Call docCol.ReplaceItemValue("status","2")
Call docCol.Save(True,False)
Elseif colSearch.count <1 Then
' mehere Datensätze in der Form vorhanden
Call colSearch.StampAll("status","3")
End If

Next
--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln