Domino 9 und frühere Versionen > ND6: Entwicklung
Datenbanksuche mit db.Search
TMC:
--- Zitat von: koehlerbv am 20.11.04 - 20:51:45 ---Nein, nein - bei grossen DBs macht es einen grossen Unterschied, ob man über den FTI, eine Lookup-Ansicht oder dbSearch geht.
--- Ende Zitat ---
"Nein nein" bezüglich was, Bernhard? Klar, dbSearch ist nunmal langsamer als FTI etc. Aber dies stand auch hier nicht zur Diskussion.
--- Zitat von: koehlerbv am 20.11.04 - 20:51:45 ---An sich: SELECT in einer Ansicht basiert ja auf den gleichen Routinen wie dbSearch - und da geht es ja auch. Aber auch mit @Date etc. - es läuft nicht. Aber: AFAIK. Ich hoffe, mir fällt auch die Begründung wieder ein.
--- Ende Zitat ---
Würde mich wundern, wenn es nicht geht. Wie gesagt: Die ND6 Designerhilfe sagt nix darüber (was aber überhaupt nichts heißt, es wurde dort ja schon so vieles vergessen zu erwähnen).
Bin gespannt auf die Ergebnisse von Markus.
Matthias
Onkel Domino:
Hallo,
ich habe ein wenig rumprobiert, es aber nicht ans Laufen bekommen. Der Type Mismatch von eben lag dem falschen Datentyp von sDate und eDate zugrunde. Das musst nämlich vom Typ String sein und nicht von Typ NotesDateTime...
Mein Code bis jetzt:
--- schnipp ---
Dim sDate As String
Dim eDate As String
sDate = uidoc.FieldGetText("StartDate")
eDate = uidoc.FieldGetText("EndDate")
Msgbox uidoc.FieldGetText("StartDate")
searchFormula$ = { "Date > } & sDate & {"}
Set col = db.Search(searchFormula$, Nothing,0)
Msgbox col.Count
Msgbox col.Query
--- schnipp ---
Auch wenn ich ein Datum eingebe nach dem es auf jeden Fall Dokumente geben müsste, meldet col.Count 0 Dokumente. col-Query liefert z.B. "Date > 01.11.2000". Irgendwie scheint das Format noch nicht zu stimmen.
Zum Hintergrund:
Es gibt in der DB Rechnungen und Personen, die ggfs. für die Rechnungen Provision bekommen. Meine Idee war: alle Rechnungsdokumente im betreffenden Zeitraum zu einer NotesDocumentCollection zusammensuchen, dann den ersten Sachbearbeiter wählen und alle Rechnungen in dem der Sachbearbeiter vorkommt in eine neue NotesDocumentCollection packen.
Tja, mit diesen Schwierigkeiten gleich am Anfang hätte ich jetzt nicht gerechnet :-(
Was sind denn so die "best pracitces" wenn man Dokumente innerhalb eines bestimmten Zeitraumes haben möchte? Der Zeitraum muss natürlich variabel sein...
Nachtrag zum Code:
"Date" ist ein Feld im Rechnungsdokument. Vielleicht stimmt bei der Syntax schon was nicht?!
koehlerbv:
--- Zitat von: Onkel Domino am 20.11.04 - 23:14:47 ---Auch wenn ich ein Datum eingebe nach dem es auf jeden Fall Dokumente geben müsste, meldet col.Count 0 Dokumente. col-Query liefert z.B. "Date > 01.11.2000". Irgendwie scheint das Format noch nicht zu stimmen.
--- Ende Zitat ---
Das Herangehen an die Problematik ist grundsätzlich falsch, Markus.
Du musst immer ausgehen von einer puren @functions SELECT-Formel. Und "Date > 01.11.2000" hat da überhaupt nichts zu suchen - "01.11.2000" ist ein String, kein Datum. Sowas wie
Date > @Date ([01.11.2000]) würde dem entsprechen.
Es ist ein interessantes Thema - auch wenn ich vom Verfahren wegen der Performace-Probleme überhaupt nichts halte - und daher schade, dass ich heute / morgen (naja, vielleicht doch, wenn es weiter so flott läuft wie heute ;D) so wenig Zeit habe.
Bernhard
y20frank:
Jop, da hat Bernhard wie so oft Recht... so funzt es zB
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim sDate As String
Dim eDate As String
Dim ws As New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
sDate = uidoc.FieldGetText("StartDate")
eDate = uidoc.FieldGetText("EndDate")
' searchFormula = "Datum = @Today"
searchFormula = "Datum < @Today"
Set col = db.Search(searchFormula , Nothing ,0)
Msgbox col.Count & Chr(10) & col.Query & Chr(10) & datum & " " & sDate
Onkel Domino:
Hallo,
erst eimmal danke für die vielen Tipps. Besonders an Bernhard: ich konnte nun das Datumproblem umsetzen. Folgender Code funktioniert:
--- schnipp ---
(...)
Dim sDate As String
Dim eDate As String
sDate = uidoc.FieldGetText("StartDate")
eDate = uidoc.FieldGetText("EndDate")
searchFormula$ = { Date = @Date([} & sDate & {])}
Set col = db.Search(searchFormula$, Nothing,0)
Msgbox col.Count
Msgbox col.Query
--- schnipp ---
Nur was ich beim besten Willen nicht verstehe:
searchFormula$ = { (Form = "invoice") & (Date = @Date([} & sDate & {]))}
will nicht funktionieren, obwohl der Searchstring damit dann (z.B.)
(Form = "invoice") & (Date = @Date([22.10.2004]))
lautet und das ist doch eine ordentliche SELECT Abfrage, oder? Fehlermeldung kommt keine, es kommen einfach nur 0 Dokumente zurück obwohl es definitiv welche gibt...
Noch irgendwelche Ideen?
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln