Autor Thema: Dublettenprüfung - Wie , Womit  (Gelesen 1884 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Dublettenprüfung - Wie , Womit
« am: 12.01.07 - 10:33:20 »
Hallo ich arbeite nun seit Wochen an einer Dublettenprüfung, aber ich komme nicht vorwärts.

In den meisten Fällen sind meine Ideen einfach zu Laufzeitlastig. Jetzt wollte ich euch Fragen ob ihr mit sowas schon Erfahrung gemacht habt , vielleicht selber eine geschrieben habt und so also alles was euch zusammen zu dem Thema einfällt.

Ich bedanke mich schon im Vorraus für die Anregungen.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Dublettenprüfung - Wie , Womit
« Antwort #1 am: 12.01.07 - 10:37:13 »
Ich kenn nur eine Bulletenprüfung.  ;D

Etwas mehr Details, was Du beispielsweise unter "Laufzeitlastig" verstehst und was Du gerne verbessert hättest, wären durchaus hilfreich.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Glombi

  • Gast
Re: Dublettenprüfung - Wie , Womit
« Antwort #2 am: 12.01.07 - 10:44:41 »
Mir fällt dazu GetDocumentByKey und UniversalID ein.


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Dublettenprüfung - Wie , Womit
« Antwort #3 am: 12.01.07 - 10:47:27 »
hmm, so etwas ?
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Dublettenprüfung - Wie , Womit
« Antwort #4 am: 12.01.07 - 14:33:34 »
So liebe Gemeinde,

ich habe etwas vollbracht. es läuft. Ist wer an dem Code interessiert. Dann würde ich euch damit überfluten. Es sind insgesamt 6 Module. Also wenn interesse dann bitte melden. Ich will ja nicht unnötig , dass Forum zu posten
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Dublettenprüfung - Wie , Womit
« Antwort #5 am: 12.01.07 - 14:37:02 »
na, dan mal her damit
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Glombi

  • Gast
Re: Dublettenprüfung - Wie , Womit
« Antwort #6 am: 12.01.07 - 14:38:50 »
Wenn Du kritikfähig bist, kannst Du es gerne posten.  ;)

Also, nur Mut und her damit.

Andreas

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Dublettenprüfung - Wie , Womit
« Antwort #7 am: 12.01.07 - 15:06:48 »
Ach wie schnell das Wetter umschlagen kann , spätestens jetzt hättet ihr alles bekommen. Gerade lief es noch so wie es sollte und nun , wieder nur Kappes.

Gut fangen wir an :

Decleration :

Code
Dim session As NotesSession								' Die Session zum Arbeiten
Dim dbthis As NotesDatabase								' Die göffnete DB "preDocHouse"
Dim dbDocHouse As NotesDatabase					' Die "DocHouse"-Db
Dim docProfile As NotesDocument						' Beinhaltet das Profile-Dokument

Dim collection As NotesDocumentCollection		' Die NotesDocumentCollection aus dieser DB
Dim docCol As NotesDocument							' Die Dokumente aus der "preDocHouse"-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

Dim score As Double											' Beinhaltet den Scorewert
Dim key As String												' Beinhaltet das aktuelle Schlüsselfeld
Dim runFlag As Boolean										' Entscheidet darüber ob eine Prüfung läuft oder nicht
Dim forCollection As NotesDocumentCollection	

Dim char As String
Dim char2 As String
Dim newString As String
Dim convChar As String



Initalize :

Code
Sub Initialize
	Dim server As String
	Dim database As String
	
	
	
	Set session = New NotesSession						' Eröffnen der Session
	Set dbthis = session.CurrentDatabase					' Initalisieren der aktuell geöffnetten DB	
	
	Set docProfile = dbthis.GetProfileDocument("Profile-Document")
	
	server = Cstr(docProfile.GetItemValue("server")(0))
	database = Cstr(docProfile.GetItemValue("database")(0))
	Set dbDocHouse = session.GetDatabase(server,database)
	
	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
	
	If Not dbDocHouse.IsFTIndexed Then
		Call dbDocHouse.UpdateFTIndex(True)
	End If
	
	Call checker
	
End Sub

checker :

Code
Sub checker
	Dim searchFormula As String
	Dim searchFormula2 As String
	
	searchFormula = {Form = "form"}		
	searchFormula2 = {status = 0}
	
	Set collection = dbthis.search(searchFormula2, Nothing, 0)
	Set colSearch  = dbDocHouse.Search(searchFormula,Nothing, 0)
	
	If colSearch.count = 0 Then	
		Call CopyAgent
		Exit Sub
	End If
	If colSearch.count = 0 Then
		Msgbox "Fehler"
		Exit Sub
	End If
	colCount = collection.Count
	
	For i = 1 To  colCount
		runflag = False
		If i = 1 Then
			Set docCol = collection.GetFirstDocument
		Else
			Set docCol = collection.GetNextDocument(docCol)
		End If
		
		If colSearch.Count  <> 0 Then
			searchField = docProfile.GetItemValue("firstkey")(0)
			searchValue =docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If
		
		If Not runflag = True Then
			If colSearch.Count  > 1 Then
				searchField = docProfile.GetItemValue("secondkey")(0)
				searchValue =docCol.GetItemValue(searchField)(0)
				Call colSearch.FTSearch(searchValue,0)
			Elseif colSearch.count = 1 Then
				Set docSearch = colSearch.GetFirstDocument						
				Call detailchecker
			Elseif colSearch.Count = 0 Then
				runflag = True
				Call docCol.CopyToDatabase(dbDocHouse)
			End If
		End If
		
		If Not runflag = True Then
			If colSearch.Count > 1 Then
				searchField = docProfile.GetItemValue("thirdkey")(0)
				searchValue = docCol.GetItemValue(searchField)(0)
				Call colSearch.FTSearch(searchValue,0)
			Elseif colSearch.count = 1 Then
				Set docSearch = colSearch.GetFirstDocument			
				Call detailchecker
			Elseif colSearch.Count = 0 Then
				If Not runflag = True Then
					Call docCol.CopyToDatabase(dbDocHouse)
					runflag = True
				End If
			End If
		End If
		
		If Not runflag = True Then
			If colSearch.Count  > 1 Then
				searchField = docProfile.GetItemValue("fourthkey")(0)
				searchValue = docCol.GetItemValue(searchField)(0)
				Call colSearch.FTSearch(searchValue,0)
			Elseif colSearch.count = 1 Then
				Set docSearch = colSearch.GetFirstDocument						
				Call detailchecker
			Elseif colSearch.Count = 0 Then
				If Not runflag = True Then
					Call docCol.CopyToDatabase(dbDocHouse)
					runflag = True
				End If
			End If
		End If		
		If Not runflag = True Then		
			If colSearch.Count  > 1  Then
				searchField = docProfile.GetItemValue("fithtkey")(0)
				searchValue = docCol.GetItemValue(searchField)(0)
				Call colSearch.FTSearch(searchValue,0)
			Elseif colSearch.count = 1 Then
				Set docSearch = colSearch.GetFirstDocument						
				Call detailchecker
			Elseif colSearch.Count = 0 Then
				If Not runflag = True Then
					Call docCol.CopyToDatabase(dbDocHouse)
					runflag = True
				End If
			End If
		End If
		
		If Not runflag = True Then
			If colSearch.Count  > 1 Then
				searchField = docProfile.GetItemValue("sixtkey")(0)
				searchValue = docCol.GetItemValue(searchField)(0)
				Call colSearch.FTSearch(searchValue,0)
			Elseif colSearch.count = 1 Then
				Set docSearch = colSearch.GetFirstDocument						
				Call detailchecker
			Elseif colSearch.Count = 0 Then
				If Not runflag = True Then
					Call docCol.CopyToDatabase(dbDocHouse)
					runflag = True
				End If
			End If
		End If
		
	Next
	
End Sub


detailchecker:

Code
Sub detailchecker
	
	key = "secondkey"
	If Not docProfile.getitemvalue(key)(0) = "" Then
		searchField = docProfile.getitemvalue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 2
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 2
			End If
		End If
		
	End If
	
	key = "thirdkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then	
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1.5
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1.5
			End If
		End If
	End If
	
	key = "fourthkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1
			End If
		End If
	End If
	
	key = "fithtkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1
			End If
		End If
	End If
	
	key = "sixtkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then	
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1
			End If
		End If
	End If
	
	If score <= Cdbl(docProfile.GetItemValue("uncritical")(0)) Then
		Call docCol.CopyToDatabase(dbDocHouse)
	Elseif score <= Cdbl(docProfile.GetItemValue("critical")(0)) Then
		Call docCol.ReplaceItemValue("score",score)		
		Call docCol.ReplaceItemValue("status","2")
		Call docCol.Save(True, True)
	Elseif score > Cdbl(docProfile.GetItemValue("verycritical")(0)) Then
		Call docCol.ReplaceItemValue("score",score)		
		Call docCol.ReplaceItemValue("status","3")
		Call docCol.Save(True,True)
	End If
	runflag = True
	
End Sub
Roundex:

Code
Sub detailchecker
	
	key = "secondkey"
	If Not docProfile.getitemvalue(key)(0) = "" Then
		searchField = docProfile.getitemvalue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 2
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 2
			End If
		End If
		
	End If
	
	key = "thirdkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then	
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1.5
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1.5
			End If
		End If
	End If
	
	key = "fourthkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1
			End If
		End If
	End If
	
	key = "fithtkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1
			End If
		End If
	End If
	
	key = "sixtkey"
	If Not docProfile.GetItemValue(key)(0) = "" Then	
		searchField = docProfile.GetItemValue(key)(0)
		If Not Isnumeric(docCol.GetItemValue(searchField)(0)) Then
			If Roundex (Cstr(docCol.GetItemValue(searchField)(0))) = Roundex (Cstr(docSearch.GetItemValue(searchField)(0))) Then
				score = score + 1
			End If
		Else
			If Cstr(docCol.GetItemValue(searchField)(0)) = Cstr(docSearch.GetItemValue(searchField)(0)) Then
				score = score + 1
			End If
		End If
	End If
	
	If score <= Cdbl(docProfile.GetItemValue("uncritical")(0)) Then
		Call docCol.CopyToDatabase(dbDocHouse)
	Elseif score <= Cdbl(docProfile.GetItemValue("critical")(0)) Then
		Call docCol.ReplaceItemValue("score",score)		
		Call docCol.ReplaceItemValue("status","2")
		Call docCol.Save(True, True)
	Elseif score > Cdbl(docProfile.GetItemValue("verycritical")(0)) Then
		Call docCol.ReplaceItemValue("score",score)		
		Call docCol.ReplaceItemValue("status","3")
		Call docCol.Save(True,True)
	End If
	runflag = True
	
End Sub


copyagent :

Code
Sub CopyAgent
	For i = 1 To collection.Count
		If i = 1 Then
			Set docCol = collection.GetFirstDocument
		Else 
			Set docCol = collection.GetNextDocument(docCol)
		End If
		
		Call docCol.CopyToDatabase(dBDocHouse)
	Next
End Sub
« Letzte Änderung: 12.01.07 - 15:08:33 von bikerboy »
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Dublettenprüfung - Wie , Womit
« Antwort #8 am: 15.01.07 - 17:15:08 »
Habe den Fehler gefunden warum es bei einzelnen Suche funzt und sonst nicht.


Ich muss die Collection immer wieder naeuaufbauen und das habe ich nicht gemacht , er hat ja immer in der alten gesucht und ist klar dass er da nicht zu einem Ergebnis gekommen ist.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz