Notes > Access

  • Hallo zusammen,


    nachfolgenden Code hab ich von Sandbox auf meine Bedürfnisse gekürzt und angepasst.


    Sub Click(Source As Button)
    Msgbox("Die Tabelle Kollektionen wird nun bearbeitet!")
    Dim mytext As String
    Dim SQL As String
    'Set up MS Access DB location and Object
    mytext = "D:\meine.mdb"
    Set Acc = CreateObject("Access.Application.9")
    Acc.Opencurrentdatabase(mytext)
    Set dbs = Acc.CurrentDB()
    SQL = "UPDATE TKollektionen SET TKollektionen.STATUS = 'Update';"
    dbs.execute(SQL)
    'Closes down MS Access
    Acc.Quit
    'Msgbox("Fertig, Sie können jetzt eine Datenübertragung starten.")
    End Sub


    Wenn ich die Msgbox wie oben im Code auskomentiere, wird Access auch gleich nach der Aktion geschlossen. Soll die Msgbox aber angezeigt werden, bekommt Access den Focus und ist im Vordergrund, also über Notes. Auch wird Access erst geschlossen, wenn die MsgBox beantwortet wird. Auch ein acc.Visible = false hilft da nix. Ich würde aber gern die MsgBox einblenden, aber Access soll nach dem Acc.Quit SOFORT geschlossen werden, ohne auf die Antwort der Msgbox zu warten.


    Ist das möglich? Und wenn ja, wie?


    Da ich mit Lotus Script bis jetzt noch nie was gemacht habe, wäre auch noch die Fehlerbehandlung interessant. Was sollte ich in dieser Sub einbauen? Kann mir jemand etwas Beispielcode posten?


    Vielen Dank schon im voraus.
    Servus
    Sunny

    • Offizieller Beitrag

    ist leider so.


    Objekte, die im WIN-UI angezeigt werden (Visible=True) werden nach dem Quit erst aus der Taskliste entfernt, wenn das Script beendet ist. Wird die Anwendung nicht im Win-UI angezeigt, dann wird nach dem Quit der Task sofort beendet.


    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


  • Hallo nochmal,


    jetzt hab ich das mal bei mit einem Client getestet und bekomme
    in der Zeile:
    Set Acc = CreateObject("Access.Application.9")
    einen Fehler: "Cannot Create Automation Object"


    Was läuft da falsch? ACL-Berechtigungen? Der User in diesem Fall hat Manager-Rechte auf seine DB. Der Client ist 6.52 DE. Die Access-Version ist 2000, leider ist es nur eine Runtime-Version. Kann es daran liegen?


    Servus
    Sunny

  • Du könntest noch versuchen das ganze über eine "*lsxc-Verbindung" zu realisieren. Dafür müssen meines Erachtens nur die Datenbanktreiber installiert sein was auch bei der Runtime der Fall sein sollte.


    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • Zitat


    pascal_x schrieb:


    Hallo pascal_x,


    das würd ich gerne mal probieren, aber bei:
    src. Execute ("Mein SQL Statement", nothing)
    bekomm ich den Fehler: 15: Illegal use of parentheses.


    Ich bin in Sachen Lotus Script überhaupt nicht fit, deshalb wär es richtig super, wenn Du mir auf die Sprünge helfen würdest.


    Danke.
    Sunny

  • Sunny... Sorry natürlich muss es "call src. Execute ("Mein SQL Statement", nothing)" heissen....


    taurec
    Der odbc-treiber wird auch bei der Runtime im System bereitgestellt. Bei mir funktioniert es jedenfalls und wenn der Code von Sunny schon bis zu dem Aufruf gelaufen ist dann scheint es ja auch zu gehen.

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • Die Frage warum er keinen ODBC Zugriff verwenden will war für Sunny gedacht.


    Das hätte den Vorteil der plattformunabhängigkeit weil es z.b. auch unter Linux/Unix tut.
    Im Gegensatz zu deiner und seiner Ursprungslösung

  • ....das kann man natürlich auch machen.....


    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • pascal_x


    ich wollte das durch Klick auf eine Schaltfläche realisieren > DAU's ;) Es kommt zuerst die Fehlermeldung: "Public is not allowed in this module" und wenn ich das auskomentiere: "Not a Sub or a function name: src". Ihr seid da bestimmt richtig fit darin, wäre schön wenn ihr mir da weiter helfen könntet.


    Vielen Dank schon im voraus.


    Sunny

  • taurec
    Soweit ich weiß, benötige ich für eine ODBC-Verbindung auch eine DSN, und die hab ich nicht auf den Notebooks, die sich nur immer zum Aufträge versenden bzw. Notes replizieren einwählen.


    Jetzt erklär ich erstmal was ich erreichen möchte, dann könnt ihr mir bestimmt besser helfen:


    Unsere Außendienst hat eine Access 2000 Datenbank in Frontend und Backend aufteilt auf dem Notebook. Eine Möglichkeit wäre, eine kleine MDB auf CD zu kopieren, oder per Mail zu versenden (dazu muß ich die Extension MDB wieder bei Trendmicro freigeben) und dort als erstes und einzigstes diese Aktion (Aktualisierungsabfrage) laufen zu lassen.


    Wie so vieles im Leben, brennt mir diese Aktualisierung ziemlich unter den Nägeln, deshalb mein Gedanke das in Notes per Klick auf eine Schaltfläche zu erledigen. Funktioniert aber leider nicht mit der installierten Runtime.


    Welche Möglichkeiten hätte ich denn, eine DSN, anghängt am Mail ins Filesystem zu kopieren und dafür zu benutzen? Wie schon geschrieben, das sind meine ersten Versuche mit Lotus Script, habt bitte Nachsicht mit mir. ;)


    Vielen Dank schon im voraus.


    Sunny

  • Hi all,


    jetzt klappt es wie gewünscht auch in der Runtime durch einfaches Klicken auf eine erstellte Schaltfläche. Ohne Erstellung einer DSN oder ähnliches. Mit einem jungfräulichen Testclient. ;) Morgen gibts einen weiteren Test mit einem *echten* Client an der Front. ;)


    In den Options zu der Schaltfläche:
    Uselsx "*lsxlc"


    ****************
    In der Sub:
    Sub Initialize
    Dim se As New NotesSession

    'Neue LSX-Session
    Dim thislcsession As New LCSession

    'Verbindung zur ACCESS Datenbank herstellen
    Dim con As New Lcconnection("oledb")
    con.provider = "Microsoft.Jet.OLEDB.4.0"
    con.server = "D:\VP\alkdaten.mdb"
    con.Userid = "admin"
    con.Password = "" '(Username und Passwort falls benötigt)
    con.metadata = "T_KOLLEKTION" 'Welche Tabelle wird angesprochen
    con.Connect 'Verbindung zur Datenquelle herstellen

    Call con. Execute ("UPDATE T_Kollektion SET T_Kollektion.CODE = 'Update'", Nothing)

    con.Disconnect

    End Sub
    *************
    Hurra!! Herzlichen Dank für eure super Unterstützung!


    Servus
    Sunny


    P.S. Sollte es morgen nicht klappen, habt ihr mich wieder an der Backe kleben. ;)