Fehler bei Suche in Datenbank

  • Hi, ich habe folgendes Problem.
    Ich gehe über eine Volltextsuche auf eine andere Datenbank. Dort soll er mir überprüfen ob ein bestimmtes Feld den Status "Aktiv" hat.
    Nun habe ich das Problem das wenn ich auf die Datenbank gehe er mir sagt das der Drucker "Aktiv" ist.
    Durch die Volltextsuche kommt jedes mal ein "Schrott" heraus (ich habe es auch überprüft indem ich nach "Schrott" gesucht habe, das findet er auch, auch wenn ich nicht weiß wo)


    Jetzt meine Frage: woran kann das liegen das die Volltextsuche ein Shrott findet und ich, wenn ich direkt in die Datenbank zugreife, ein "Aktiv" in dem Feld finde



    Hier ein Code abschnitt:




    'Initialisierung und überprüfung des Datenbankzugriffs'
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db=New NotesDatabase("SERVER" , "Datei.nsf")
    If Not db.IsFTIndexed Then
    Call db.UpdateFTIndex(True)
    End If

    Set db=New NotesDatabase("SERVER" , "DATEI.nsf")
    If Not db.IsFTIndexed Then
    On Error 4080 Resume Next
    Call db.UpdateFTIndex(True)
    If Err=4080 Then
    Messagebox("Datenbank kann nicht auf dem Server " & db.Server & " indiziert werden!")
    Exit Sub
    End If
    End If

    Dim ws As New notesUIWorkspace
    Set UIdoc=ws.CurrentDocument
    Dim Rückgabewert As Integer
    Dim Fieldname As String

    suchNr = uidoc.FieldGetText("Inventarnummer")
    If suchNr = "" Then
    suchNr = uidoc.FieldGetText("Seriennummer")
    End If
    Set doccol = db.FTSearch(suchNr, 0)
    If doccol.Count > 0 Then
    Set doc = doccol.GetFirstDocument
    Forall x In doc.GetItemValue("keyObjectStatus")
    If x = "Aktiv" Then
    Call uidoc.FieldSetText("test","")
    Call uidoc.FieldSetText("DruckerInaktiv","")
    Call uidoc.FieldSetText("Bearbeiten","True")
    Else
    Call uidoc.FieldSetText("DruckerInaktiv","Der Drucker ist Inaktiv")
    Call uidoc.FieldSetText("fldStatus",x)
    var = Messagebox("Der Drucker ist laut Inventory nicht Aktiv. Wollen Sie dennoch die Maske öffnen? ", 36, "Inaktiv")
    If var = 6 Then
    Call uidoc.Save
    End If
    If var = 7 Then
    Call uidoc.Save
    Call uidoc.Close(True)
    End If
    End If
    End Forall



    Normalerweise funktioniert das ganze einwandfrei!!

  • Und was hat das bitte mit Volltextsuche zu tun ?
    Mit einer Volltextsuche gehst du nicht auf eine andere Datenbank, sondern suchst innerhalb einer Datenbank nach Dokumenten die gewissen Kriterien entsprechen.


    Lass dir doch mal direkt im Script ausgeben was er findet.
    Ich vermute dass eher eine der Aktionen die auf deine Feldsetzungen folgen nicht funktionieren

  • So, hab mal den rest auch dazugefügt.
    Ich suche doch in einer anderen Datenbank nach einem bestimmten Kreterium, somit ist das doch auch eine Volltextsuche, oder?



    Ich habe das ganze getestet indem ich das "Aktiv" mit "Schrott" vertauscht habe, da das das Ergebnis der suche war
    (ich gebe es ja durch "Call uidoc.FieldSetText("fldStatus",x)" aus. Das findet er so wie ich mir das mit dem "Aktiv" wünsche.


    Bei den anderen Dokumenten die ich überprüft habe funktioniert das auch einwandfrei.

  • Jou, das stimmt auch.


    Ich habe es aber jetzt, ich habe da wohl ein bisschen auf dem Schlauch gesessen. Ich habe gerade mal die Anzahl vom Zähler ausgegeben und bin auf 2 Dokumente gekommen. Da liegt dann ein fehler in der anderen Datenbank vor, die Inventarnummer sollte nicht zweimal vorkommen.


    Danke für deine Mühe,
    Christian


    PS: das ganze fällt doch unter Volltextsuche, oder?



    OK, hab mich gerade mal informiert, anscheinend müsste das ein Antwortdokument sein.
    Kann mir jemand sagen wie ich die Suche auf die Hauptdokumente konzentriere? So das er die Antwortdokumente einfach überließt?

  • Ich sollte mir das ändern meiner Texte abgewöhnen!! Sonst sieht keiner das ich noch eine Frage habe.



    Kann mir jemand sagen wie ich die Suche (wie oben beschrieben) auf die Hauptdokumente konzentriere, so das er Antwort und Rückantwortdokumente nicht überprüft?

  • Du muesstest einen suchstring generieren der in etwa so aussehen koennte:
    "[Seriennummer] =" + uidoc.fieldgettext("Seriennummer") + |"|+ "[Form] = "Hauptdokument"

  • Den String akzeptiert er, aber er bringt mir die Fehlermeldung:



    Notes error: Der in der Abfrage benutzte Feldname wurde in der Datenbank nicht gefunden. ([Inventarnummer] = "IN1000169""[Form] ="os")

  • Ok, ich habe jetzt den Fehler!!


    uidoc.fieldgettext("Seriennummer") + " AND "+ "Hauptdokument"


    , so muß es heißen!!! Da ich ja nach Wörtern suche und nicht in bestimmten Feldern funzt das mit Feldangabe nicht.


    Herzlichen Dank für euere Hilfe!!

  • Ich habe jetzt mal weiter getestet und festgestellt das der Unterschied zwischen den Dokumenten die ich suche im Feld $Ref liegt.
    Wenn $Ref = "" dann habe ich das richtige Dokument.
    Somit muss ich jetzt mit Feldern arbeiten.


    Hab jetzt mal


    test = ""
    suchNr = uidoc.fieldgettext("Inventarnummer") + " And " + "[$Ref] CONTAINS test"


    getestet, aber das funzt auch nicht ganz (er macht halt nichts!!!)

  • Hast Du Dir mal angesehen was z.B. im Feld $Ref dtrinsteht? Ich befuerchte, da wird nirgendwo test stehen ;)
    Du kannst das doch ganz einfach testen im Suchfenster. Wenn Du da reinschreibst:
    "232334" AND [form] = hauptdokument........was zeigt er dann an, vorrausgesetzt, Du gibst eine gueltige Inventarnummer an

  • $Ref muss leer sein, da ich aber die "" bei der Formel


    suchNr = uidoc.fieldgettext("Inventarnummer") + " And " + "[$Ref] CONTAINS """


    nicht angeben kann da er mir dann die drei """ falsch versteht, habe ich erst


    test = ""


    gesetzt.


    Alternativ ist in $Ref ein DocLink

  • Leider nicht, die Dokumente werden mit der Maske erstellt und bei Änderung (z.B. das Gerät ist zur Reperatur) wird eine neue Version erzeugt.


    Die alten Dokumente sind, glaube ich, für die History.
    Das Problem ist das ich die andere Datenbank auch noch nicht so gut kenne, da ich erst knapp 2 Monate dabei bin.