Autor Thema: db.search liefert ungewollte Ergebnisse  (Gelesen 6120 mal)

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
db.search liefert ungewollte Ergebnisse
« am: 08.01.08 - 11:41:17 »
Hallo Forum,

kann mir vielleicht jemand einen Fingerzeig geben, warum folgende beiden Searchformula nicht das selbe Ergebnis bringen:

searchformula$ = {Form = "Device" & Serialnumber = "}+SerialFrom+{" }
searchformula$ = {Form = "Device" & Serialnumber >= "}+SerialFrom+{" & Serialnumber <= "}+SerialTo+{"}

Die Variablen SerialFrom und SerialTo enthalten den Wert "GJR2394100R1210 81AA03A-E 9094   92", der tatsächlich exakt nur einmal in der DB vorkommt.

Im Debugger sieht alles korrekt aus:
Form = "Device" & Serialnumber = "GJR2394100R1210 81AA03A-E 9094   92"
Form = "Device" & Serialnumber >= "GJR2394100R1210 81AA03A-E 9094   92" & Serialnumber <= "GJR2394100R1210 81AA03A-E 9094   92"

Ergänze möchte ich, dass das Feld Serialnumber ein Mehrfachwert ist.

Danke für jeden Hinweis wo ich anzetzen könnte.

Alexis




« Letzte Änderung: 09.01.08 - 12:20:00 von Alexis »
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: db.search liefert ungewollte Ergebnisse
« Antwort #1 am: 08.01.08 - 12:00:52 »
Meines Erachtes müsste das so aussehen:

searchformula$ = {Form = "Device" & (Serialnumber >= "}+SerialFrom+{" & Serialnumber <= "}+SerialTo+{")}


Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #2 am: 08.01.08 - 12:04:31 »
Ich glaube die Klammern sind an der Stelle überflüssig bzw dürfte keinen Unterschied machen.

Das ist ja etwa so vom Wesen her:
a & b & c = a & (b & c)

Ich frage mich nur gerade, ob der größer bzw kleiner-Vergleich auch bei Strings geht? Könnte ja gehen, wenn man die lexikographische Ordnung zu Rate zieht.

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #3 am: 08.01.08 - 12:14:41 »
Richtig Markus,

die Klammern haben keinen Einfluss, das Ergebnis ist exakt das gleiche.

Ob der größer bzw kleiner-Vergleich bei Texten greift erscheint mir eine sehr berechtigte Frage zu sein.

Ich versuche dem mal nachzugehen.

Danke zunächst.

Alexis
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: db.search liefert ungewollte Ergebnisse
« Antwort #4 am: 08.01.08 - 12:15:21 »
Ich glaube die Klammern sind an der Stelle überflüssig bzw dürfte keinen Unterschied machen.

Jain.  ;)

Mit den Klammern kannst du die Auswertungsreihenfolge der Formel steuern.

Ich frage mich nur gerade, ob der größer bzw kleiner-Vergleich auch bei Strings geht?

Das hab ich auf die Schnelle übersehen. Ich glaube, dass dieser Vergleich bei Strings nicht möglich ist. Zumindest bei der Search-Methode. Ich lasse mich aber gerne vom Gegenteil überzeugen.

Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #5 am: 08.01.08 - 12:20:33 »
Aber das Ergebnis sollte in dem Fall das gleiche bleiben.  ;) Zudem kann man mit Klammern die Lesbarkeit steigern, was aber in diesem Fall aber nicht unbedingt viel bringen würde, da "dynamisch ermittelte" Suchformeln meistens schlecht lesbar sind...

Leider kann ich das mit den Strings hier nicht selbst testen... Sonst hätte ich das auch noch schnell gemacht... ;)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: db.search liefert ungewollte Ergebnisse
« Antwort #6 am: 08.01.08 - 12:20:57 »
Grösser und kleiner funktioniert natürlich bei Strings und auch im Zusammenhang mit dbSearch.

Unsicher wäre ich eher auf Grund der Tatsache, dass es Mehrfachwerte sind. Arrays mit einem skalaren Wert zu vergleichen ...

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #7 am: 08.01.08 - 12:23:30 »
Da war ich mir gerade nicht sicher, ob das bei Notes geht mit Strings... Wie es gehen kann habe ich ja in meinem ersten Posting in diesem Thread geschrieben... Aber damit haben wir das schonmal geklärt... Danke Bernhard, wieder was gelernt!

Aber der Hinweis von Bernhard könnte schon zum Ziel führen... Denn mit der Abfrage hier erwischt man nur die Dokumente, bei denen die passende Seriennummer als Einzelwert drinnen steht. Evtl sollte man dann lieber mit @IsMember oder @Contains in der Suchformel arbeiten.

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #8 am: 08.01.08 - 12:31:40 »
Super Eure Anregungen!

Habe getestet: Stringvergleich ist (natürlich) möglich.

Der Fehler liegt sehr wahrscheinlich bei den Mehrfachwerten. In meinem Skript ermittle ich später ein Array mit der gefundenen Seriennummer. Und siehe da, wo ich früher ein Vorhandensein des Kriteriums fand ist dieses nun nicht mehr der Fall.

Also werde ich das Skript umbauen.

Alexis
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #9 am: 08.01.08 - 14:06:34 »
@ MadMetzger:

@IsMember etc. ist m.E. nicht anwendbar, denn ich möchte bei der Suche einen Seriennummern-Bereich auswerten, was durch direkten Vergleich praktisch unmöglich ist.

@ Bernhard:

Ich sehe leider keine andere Möglichkeit als den von mir beschrittenen Weg. Höchst unsauber ist meine ad hoc - Lösung: Ich durchforste die gefundenen Ergebnisse und überprüfe sie nochmals auf das gesuchte Intervall der Seriennummer, oder siehst Du einen anderen Ansatz?

Anbei: Ein Dokument (sprich Gerätetyp) kann einige hundert Seriennummern enthalten und in der Datenbank sind z.Z. mehr als 5000 Geräte vorhanden.

Bin leider etwas ratlos  ???

Alexis
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #10 am: 08.01.08 - 14:18:52 »
Okay, da hast du natürlich recht... das geht so nicht.

Hm... Interessantes Design: Ein Dokument je Typ und die vorhandenen Seriennummern in einem Mehrfachwertefeld... Sollte man das nicht vielleicht nochmal überdenken? Evtl kann man ja die Geräte mit den Seriennummern in Antwortdokumente verlagern, so das die Verknüpfung eines Gerätes mit seinem Typ erhalten bleibt...

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #11 am: 08.01.08 - 14:49:48 »
Hallo Marcus,

das Konzept ist bereits schon so kategorisiert, wie Du es vorschlägst: die Seriennummern sind in den Gerätedokumenten in einem Feld gespeichert.

Ziel der Suche ist es übrigens, bei Fehlern in einer Serie die entsprechenden Kunden herauszugekommen.

Bin aber unzufrieden, dass das nicht besser zu lösen ist. Bernhards Hinweis vermag ich nicht in einem konkreten Lösungsansatz umzusetzen.

Alexis

wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #12 am: 08.01.08 - 14:58:52 »
Also gibt es pro Gerät schon ein Dokument, oder wie?

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #13 am: 08.01.08 - 15:33:38 »
Ja
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: db.search liefert ungewollte Ergebnisse
« Antwort #14 am: 08.01.08 - 15:36:09 »
Aber warum stehen dann hunderte Seriennummern im Dokument? Und Du schreibst ja auch von "Gerätetyp" ...

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #15 am: 08.01.08 - 15:44:18 »
Genau aus dem Grunde habe ich nachgefragt... Warum suchst du dann nicht direkt nach den Gerätedokumenten?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: db.search liefert ungewollte Ergebnisse
« Antwort #16 am: 08.01.08 - 15:58:05 »
Ich denke, jetzt kommen wir vom Thema etwas ab - man kann das Problem ja auch allgemeiner sehen: Wie suche ich nach ranges in Strings in Mehrfachfeldern?

Die ideale Lösung wäre sicherlich:
1 Dokumenttyp "Gerätetyp"
1 Dokumenttyp "Gerät"
Dadurch auch nur eine Seriennummer pro Dokument, und man kann das einzelne Gerät zudem noch viel besser beschreiben (Auslieferung, Bemerkungen, Kunde, Standort, Historie). Aber auch das ist wieder zu konkret für das allgemeine Problem - siehe oben.

Ich sehe für das Kernproblem (wenn die Applikation nicht gerade gezogen werden kann oder soll) nur eine Möglichkeit (zumindest auf die Schnelle und so zwischendurch gepostet):
- Ermittlung der "Gleichteile" der Strings für "von" und "bis"
- Bilden einer DocumentCollection auf Basis des "Gleichteils" (mit dbSearch und @Contains oder mit einer kategorisierten Ansicht und GetAllDocumentsByKey (key, False))
- Und dann Loopings drehen ...

Bernhard

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #17 am: 08.01.08 - 16:02:29 »
Bernhard Du warst schneller, trotzdem meine Erklärung:

Tut mir leid wenn ich mich nicht deutlich genug ausgedrückt habe:

Jedes Gerät wird in zig Anlagen eingesetzt und wird in der Datenbank als ein Antwortdokument pro Anlage einmal geführt mit der Stückzahl n. In diesem Dokument sind nun alle n Seriennummern gespeichert, die in der Anlage vorkommen.

Dieses wiederholt sich hundertfach entsprechend der Vielzahl von Geräten, die in der Anlage vertreten sind.

Ich hoffe es ist jetzt ausreichend klar.

Alexis
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: db.search liefert ungewollte Ergebnisse
« Antwort #18 am: 08.01.08 - 16:12:54 »
Ich glaube jetzt habe ich es verstanden... Ein Gerätetyp kann x-mal in einer Anlage verbaut sein und je Typ und Anlage gibt es ein Antwortdok mit allen Seriennummern der eingebauten Geräte?

Algorithmus hat ja Bernhard schon geliefert... Poste doch aber bitte hinterher, wie und ob du es hinbekommen hast... Einige sind bestimmt neugierig... ;)

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: db.search liefert ungewollte Ergebnisse
« Antwort #19 am: 09.01.08 - 10:05:18 »
Hallo,

ich habe mich für folgenden Weg entschieden:

- User wählt Gerätetyp und Seriennummernbereich aus
- Baue aus ersterem eine Collection über alle erfassten Geräte in der DB
- Untersuche dann per Schleife das Array mit allen Seriennummern auf Übereinstimmung
- Bei Erfolg wird das/die Dokument(e) in ein Ordner gestellt
 
Dieser Weg macht wohl auch dadurch Sinn, dass ich nicht ausschließen kann, dass Gerätefamilien ev. sogar gleiche Seriennummernbereiche verwenden (bitte nicht fragen warum). Der Zeitfaktor dürfte bei dem Ziel (Rückrufaktion) keine zu große Rolle spielen.

Danke für Eure anregenden Beiträge. Bei Erfolg setze ich ein "Daumen hoch".

Alexis
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz