Domino 9 und frühere Versionen > ND8: Entwicklung

LS:DO Addrow Probleme

(1/2) > >>

Günther Rupitz:
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.

ghostmw:
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.


--- Zitat ---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

--- Ende Zitat ---

Sollte eigentlich klappen ...

Günther Rupitz:
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?

Tode:
ü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

Günther Rupitz:
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

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln