ODBC-Zugriff

  • Hallo!


    Ich hätte mal wieder ein blödes Notes-Problem.


    Ich will die Punkte einer Dialogliste basierend auf einer Datenbank aufbauen. Allerdings ist kein direkter Zugriff auf eine Daten-Tabelle möglich, sondern die Daten müssen erst über eine StoredProcedure aufbereitet und in einer temporären Tabelle bereitgestellt werden.


    Eigentlich wollte ich folgenden Code verwenden. Notes mag aber nicht, wie es soll.


    Code
    @DbCommand("ODBC"; "Datenbank"; "Benutzer"; "Passwort"; "call getValid('Titel','2008-11-05 000:00:00',0); SELECT Titel FROM TempTable":"");


    Wenn ich nur einen SELECT auf eine bestehende Tabelle in den Befehl einbaue, dann funktioniert die Abfrage. Die Datenbankverbindung ist also ok.


    In LotusScript kriege ich die Befehle sauber abgearbeitet, indem ich zwei Queries mit den beiden SQL-Befehlen hintereinander ausführe. In der Macro-Sprache funktioniert aber auch das nicht. Möglicherweise, weil der erste SQL-Befehl kein Ergebnis zurückliefert? Als Fehlermeldung kriege ich "could not execute db-function".


    Alternativ könnte ich die Abfragen über Lotus Script ausführen.
    Da ist mir aber bisher kein Weg eingefallen, die Werte dann in die Dialogliste zu schreiben. Außer für jeden Datenbank-Eintrag ein Notes-Dokument zu erstellen und dann in der Dialogliste eine spezielle Ansicht mit diesen Dokumenten aufzurufen. Aber das will ich eigentlich vermeiden, weil die Werte sich eben bei jedem Aufruf ändern können.


    Vielleicht hat ja jemand eine tolle Idee.


    Viele Grüße


    Oli

  • Hallo Oliver,


    welche werte möchtest du denn in der Dialogliste auswählen lassen?
    Was soll der Rückgabewert der Dialogliste sein?


    Vielleicht finden wir eine andere Lösung als der Weg mit den vielen Dokumenten?


    Ein anderer Punkt wäre, dass es vielleicht Rechtprobleme beim ausführen des Befehls gibt?
    Die Meldung "could not execute db-function" klingt ein wenig so.

  • Hallo!


    Ich sehe gerade, dass ich hier noch gar nicht geantwortet habe. Komisch. Ich dachte eigentlich, das hätte ich.


    Also, ich habe mir verschiedene versteckte Ansichten gebastelt, die jeweils die Daten für eine Dialogliste enthalten. Im QueryOpen-Event habe ich jeweils ein Script drin, das eine MySQL-Datenbank abfragt und für jeden Treffer ein Dokument erzeugt. Die Auswahl der Dokumente für die jeweilige Ansicht erfolgt über die verschiedenen Masken-Namen, die ich in die erzeugten Dokumente schreibe.
    Performance-technisch ist das nicht besonders toll, so oft wird das aber auch nicht benötigt.


    Der Vorschlag von Taurec mit dem versteckten Feld ist auch nicht schlecht und sicher deutlich performanter. Dafür habe ich bei meiner Lösung mit den Ansichten die Möglichkeit, auch mehrere Felder pro Option anzuzeigen und dem Benutzer auch ein Sortieren nach verschiedenen Kriterien zu ermöglichen.


    So sieht der Anfang meines Codes aus:


    Entscheidend sind die beiden SQLs am Ende. Mit dem ersten sollen die Daten über die aufgerufene StoredProcedure aufbereitet und in eine temporäre Tabelle kopiert werden. Mit dem zweiten SQL wird diese temporäre Tabelle dann abgefragt.


    Beide Befehle sind korrekt und funktionieren, wenn ich sie direkt in MySQL eingebe. Ich meine, sie hätten auch in Notes funktioniert, aber vermutlich hat mir jetzt das Rechenzentrum den Saft abgedeht und ich kann von Notes aus die StoredProcedure nicht mehr aufrufen. Der direkte Zugriff auf eine Tabelle wie im zweiten SQL-Befehl funktioniert aber. Beim Aufruf der StoredProcedure aus Notes passiert dagegen gar nichts. Auch keine Fehlermeldung. :-?


    Naja, vielleicht finde ich ja das Problem noch.


    Viele Grüße,


    Oli

  • Hallo Taurec,


    das Abfragen von ODBC-Fehlern hat leider nicht viel gebracht.


    Ich habe testweise mal folgendes eingebaut:

    Code
    extendedMessage$ = con.GetExtendedErrorMessage
    extendedMessage$ = qry.GetExtendedErrorMessage
    extendedMessage$ = result.GetExtendedErrorMessage


    Das habe ich direkt vor und nach dem ersten result.Execute getestet und den Rückgabewert im Debugger verfolgt. Die ersten beiden Abfragen haben nichts geliefert. Die letzte lieferte "No Error".
    Ich habe auch mit GetError den Fehlercode abgefragt und damit dann die Fehlermeldung abgefragt. Der Fehlercode war aber immer 500 und das bedeutet wohl "No Error".


    Der SQL-Code ist ja auch korrekt. Der funktioniert ja, wenn ich ihn direkt an die Datenbank schicke. Und auch die Verbindung zur Datenbank ist ok. Ich kann ja problemlos Daten abfragen.


    Meine Vermutung ist, dass Notes (aus Sicherheitsgründen?) die Ausführung von StoredProcedures unterbindet.
    Ich hatte früher auch schon mal von Word Pro-Scripts aus auf Notes-DB zugegriffen. Aber dann hat unser Rechenzentrum einen Riegel vorgeschoben und es ging nicht mehr.


    Die Frage wäre halt, welche Einstellung das ist bzw. wo man das wieder rückgängig machen kann. Das RZ gibt da leider keine Auskunft bzw. man kommt da an die Leute nicht ran, die sich auskennen. Im Prinzip können wir auf unserem Server schon einstellen was wir wollen, aber manchmal kommt das RZ halt auf die glorreiche Idee bestimmte Standardeinstellungen auf die Server zu verteilen. Die passen sicher für die meisten Kunden, weil die keine eigene Notes-Entwicklung machen, aber wir haben dann eben manchmal ein Problem.


    CU,


    Oli