Zeitverhalten bei SQL-Abfrage und Dokumenterstellung

  • Hallo, ich habe einen Agenten der per ODBC ein Resultset
    erzeugt und anhand der gefundenen Daten Dokumente erzeugen soll.


    das Resultset erhalte ich in sehr kurzer Zeit (< 2 Min)
    Wenn ich dann aber den Code miteinbringe der einfach aus einer Nummer das Dokument erzeugt, dann dauert der Agent länger als eine Stunde. Hier mal der Code----->


    qry.SQL = "SELECT Projektnr_, Zeilennr_, Nr_, Startdatum, Enddatum, Menge, Menge_in_Projektverbrauch, Beschreibung_Oberzeile FROM Projektplan WHERE Art = 'Ressource' AND Nr_ LIKE 'RS%'"
    result2.Execute
    If result2.IsResultSetAvailable Then
    Do
    result2.NextRow

    If Mid$(result2.GetValue("Nr_"),3,1) <> "9" Then


    projektnum = result2.GetValue("Projektnr_")
    searchform$ = {FORM = "Projektkopf" & Projektnummer = "} & projektnum & {"}
    Set collection = db.Search(searchform$, Nothing, 0)
    If collection.Count > 0 Then
    REM Ab hier der Code der SOOO lange benötigt
    Set doc = db.CreateDocument
    REM Nur mal zum mitzählen
    i = i+1
    doc.Projektnummer = projektnum
    Call doc.Save(True, True)
    End If
    End If
    Loop Until result2.IsEndOfData
    Messagebox(i)
    result2.Close



    was kann denn da die Zeit verbrauchen? oder habe ich was bei der Programmierung vergessen?
    es sollen ungefähr 3500 Dokumente erzeugt werden damit..

  • HI,


    der db.Search ist ein echter Performancekiller.


    Ich würde an Deiner Stelle eine Ansicht erstellen, in der nur die Dokumente vom Typ "Projektkopf" drin stehen und deren erste Spalte sortiert nach "projektnum" ist.



    Set vw = db.GetView("Projektnrview")
    If vw is Nothing Then Print "Ansicht nicht gefunden!"


    Set collection = db.GetAllDocumentsByKey(projektnum,true)



    Das sollte um einiges schneller gehen hoffe ich


    Gruß Manu

  • hmmm..das ist aber nicht das problem dieses dbsearch.


    die eigentliche Performance verschwindet wenn ich den code einbinde:



    REM Ab hier der Code der SOOO lange benötigt
    Set doc = db.CreateDocument
    REM Nur mal zum mitzählen
    i = i+1
    doc.Projektnummer = projektnum
    Call doc.Save(True, True)

  • Hi,


    Du könntest auch noch


    doc.Projektnummer = projektnum


    durch


    doc.ReplaceItemValue ("Projektnummer",projektnum)


    ersetzen.


    Soll auch einen kleinen Tuck schneller sein.


    Kleinviech macht ja bekanntlich auch Mist ;)


    Gruß Manu

  • Hi,


    was mir gerade auffällt.
    Du weist dem Dokument keine Maske zu.


    Evtl. ist das ja der Knackpunkt. Notes sucht dann vielleicht nach der Defaultmaske oder sowas.


    Welchen Maskentyp soll das Dokument denn hinterher haben?


    Erstell doch mal ne Dummymaske und mache ein


    doc.Form = "Dummy".


    Wenn es die Maske gibt, vielleicht ist es dann schneller?


    Gruß Manu

  • ne den code mit dem maskentyp der kommt hinterher noch rein.
    Habe aber mal das mit dem db.Search an diesem punkt weggenommen und SIEHE DA...die ganze prozedur läuft nur noch 3 Min.....war also doch deine erste vermutung! deine anderen Hinweise werde ich auch nochmal überprüfen :strike: