Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Günther Rupitz am 14.07.11 - 12:23:49

Titel: LS:DO Addrow Probleme
Beitrag 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.
Titel: Re: LS:DO Addrow Probleme
Beitrag von: ghostmw am 14.07.11 - 15:12:20
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

Sollte eigentlich klappen ...
Titel: Re: LS:DO Addrow Probleme
Beitrag von: Günther Rupitz am 15.07.11 - 08:55:24
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?
Titel: Re: LS:DO Addrow Probleme
Beitrag von: Tode am 15.07.11 - 09:25:41
ü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

Titel: Re: LS:DO Addrow Probleme
Beitrag von: Günther Rupitz am 15.07.11 - 10:43:31
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
Titel: Re: LS:DO Addrow Probleme
Beitrag von: ghostmw am 15.07.11 - 10:52:08
... schade.

Dann muss ich erstmal passen, wenn's nicht noch einen undokumentieren Befehl gibt, um den SQL auszuwerten.
Titel: Re: LS:DO Addrow Probleme
Beitrag von: Günther Rupitz am 15.07.11 - 10:57:38
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.
Titel: Re: LS:DO Addrow Probleme
Beitrag von: Günther Rupitz am 15.07.11 - 11:52:39
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?