open database

  • Hallo zusammen,


    ich habe eine Datenbank aus der ich über script eine andere datenbank öffnen will.


    was muss ich tun?


    bis jetzt habe ich


    set db = session.currentdatabase
    set db2 = session.getdatabase("","datenbankname")


    call db2.open("","")



    Beim letzten Statement bekomme ich die Meldung:


    Datenbank.... ist geöffnet und der bricht alles ab.


    ist da was falsch dran?


    ps: Es ist nur die Datenbank geöffnet, in der ich den Agenten aufrufe!

    • Offizieller Beitrag
    Zitat

    aus der Designer-Hilfe
    Creates a NotesDatabase object that represents the database located at the server and file name you specify, and opens the database, if possible.


    besagt, dass die DB mit session.GetDatabase schon geöffnet wird.


    Mit NotesDatabase.isOpen kann geprüft werden ob diese wirklich offen ist.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • und warum funktioniert dann folgender script nicht?


    Forall b In db2.Agents
    agentnames(i) = b.Name
    End Forall


    bekomme ein TypeMismatch


    isOpen steht auf true, wie ihr schon sagtet... aber dann müsste ich mir ja so die Agenten holen können... oder?

  • So sieht der Orginalscript aus:


    Sub Initialize
    Dim s As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim dbmanager As NotesDatabase
    Dim agent As NotesAgent
    Dim agentnames() As String
    Dim i As Integer
    Dim auswahl As String


    Set db = s.CurrentDatabase

    Set dbmanager = s.GetDatabase("","Databasemanager.nsf")
    i = 0
    Call dbmanager.Open("","Databasemanager.ntf")
    Forall a In dbmanager.Agents <---Hier bekomme ich TypeMissmatch
    Messagebox( a.Name )
    End Forall

    Redim agentnames(i)
    i = 0
    Forall b In dbmanager.Agents
    agentnames(i) = b.Name
    End Forall

    auswahl = ws.Prompt(PROMPT_OKCANCELCOMBO,"Agent...","Bitte wählen sie einen Agenten aus",agentnames(0),GefNames)

    Set agent = dbmanager.GetAgent(auswahl)
    Call agent.Run
    End Sub

    • Offizieller Beitrag

    sieht eher nach einem Problem von agentnames() oder i aus


    zeig mal den Dim des Arrays.


    Gruß
    Dirk

    • Offizieller Beitrag

    was meint der Debugger zu dbmanager.Agents?


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Der debugger sagt, er hat die Datenbank und iOpen = true!


    wenn ich das .Agent von db aufrufe gehts!
    in der hilfe steht, das die Datenbank geöffnet sein muss für das Statement... aber isOpen gibt ja true zurück...

  • Hi,


    Zitat


    Set dbmanager = s.GetDatabase("","Databasemanager.nsf")
    i = 0
    Call dbmanager.Open("","Databasemanager.ntf")
    Forall a In dbmanager.Agents <---Hier bekomme ich
    End Sub


    Zuerst setzt du die DB (.nsf), anschliessend das Template (.ntf)...vielleicht ist dies der fehler...


    HTH

  • Einen type mismatch gibt es auch, wenn NotesDatabase.Agents Nothing zurückgibt. Prüfe vor derartigen Konstrukten unbedingt mit Isarray ab, ob Du überhaupt ein Array of NotesAgents zurückbekommst (generell sollte man (fast) niemals ohne irgendwelche Prüfung ein Objekt nach der Instantiierung ansprechen).


    Ich halte allerdings auch die nacheinander erfolgende Zuweisung der NSF und dann des NTF für bedenklich. Allerdings solltest Du bei einer nicht vorhandenen NTF eine andere Meldung bekommen ("object variable not set").


    Bernhard

  • koehlerbv


    Du wirst an dieser Stelle nie ein Object Variable not set bekommen, da die Property Agents immer existiert sobald ein NotesDatabase Objekt erzeugt wurde, nur ist es eben immer leer wenn es auf eine nicht vorhandene Datenbank zeigt.


    Mal ganz davon abgesehen daß Agents auch kein Object ist.

  • Du hast mein Posting nicht richtig gelesen, taurec. "Object variable not set" bezieht sich auf einen Fehlschlag bei der Instantiierung des NotesDatabase object. Ohne Instantiierung führt ein Zugriff auf die Agents property von NotesDatabase (was nun ja Nothing ist) zu einem "Object variable not set".