Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Günther Rupitz am 14.07.11 - 12:23:49
-
Ich verwende tw. LS:DO+ODBC zum hinzufügen von Datensätzen.
Über ODBCResultSet.SetValue werden die einzelnen Spaltenwerte gesetzt.
Wenn beim einfügen eines neuen Datensatzes ein Fehler auftritt würde ich mir gerne im Log das entsprechende SQL Statement speichern bei dem der Fehler aufgetreten ist.
Nur wie bekomme ich das SQL Statement raus?
Da ich dieses nicht von Hand erstellt habe sondern das die Klassen habe erledigen lassen bekomme ich es ja über ODBCQuery.SQL nicht heraus.
-
Hi,
wie wärs damit, daß du eine eigene Klasse schreibst, die von der ODBCResultSetClass abgeleitet ist, und du bei jedem SetValue den Wert cached und beim UpdateRow die Liste wieder löscht ?
Dann hast du im Fehlerfalle die Werte und könntest dir das SQL-Statement zusammenbauen.
z.B.
Public Class My_ODBCResultSet as ODBCResultSet
private cacheValues List as Variant
sub new()
...
end sub
Public Function SetValue( varID as Variant , value as Variant ) as Integer
cacheValues ( Cstr ( varID ) ) = value
if isNumeric ( varID ) then
call ODBCResult..SetValue ( Cint ( varID ) , value )
else
call ODBCResult..SetValue ( CStr ( varID ) , value )
end if
end Function
Public Function UpdateRow
erase cacheValues
call ODBCResult..UpdateRow
end function
function getSQLStatement as String
dim strSQL as String
forall value in cacheValues
strSQL = strSQL + " , " + ListTag(value) + " = '" + Cstr ( value ) + "'
end forall
getSQLStatement = strRight ( value , " , " )
end function
...
end class
Sollte eigentlich klappen ...
-
hallo
das geht so leider nicht da man die notes-eigenen klassen nicht überladen kann.
das hätte ich mir schon ziemlich oft gewünscht dass das möglich wäre ....
da die klasse wahrscheinlich im hintergrund ja sicher den sql string zusammenstellt wäre es doch irgendwie sinnvoll wenn man den auch auslesen könnte.
gibts noch andere vorschläge?
-
überladen? Ich glaube Du verwechselst da das ein oder andere Prinzip... Marco verwendet hier die Klassenvererbung...
Und das funktioniert ziemlich sicher genau so... Hast Du es denn probiert???
Die wichtigen Zeilen in obigem Script sind:
Public Class My_ODBCResultSet as ODBCResultSet -> Vererbung
call ODBCResult..SetValue ( Cint ( varID ) , value ) -> Aufruf des SetValue der übergeordneten Klasse
-
hallo tode
ich weiss, überladen heisst es korrekterweise bei den operatoren, bei den klassen ist es die vererbung, du hast recht.
es ändert aber nichts daran dass man die notes-eigenen klassen nicht vererben kann, und ja ich habe es auch dieses mal wieder versucht in der hoffnung dass es vielleicht bei den ODBC klassen funktioniert.
Fehlermeldung "Cannot Subclass: ODBCResultSet"
ist auch in den diversen notes foren nachzulesen:
http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/98d9c35253e1cf1285257272007ef682?OpenDocument
-
... schade.
Dann muss ich erstmal passen, wenn's nicht noch einen undokumentieren Befehl gibt, um den SQL auszuwerten.
-
ich habs jetzt halt mal so gelöst dass ich bei jedem SetValue eine Liste ergänze und dann den listeninhalt bei auftreten eines odbc fehlers in meine openlog funktion mitgebe.
nur schöne lösung ist das halt keine.
-
wo wir aber schon beim thema sql sind hier eine zweite frage:
ich baue mir oft sql statements von hand zusammen, habe mir schon oft überlegt dafür eine klasse zu schreiben.
eine suche im netz ob es sowas für LS schon gibt war bisher immer ergebnislos, kennt hier vielleicht jemand sowas?