Das Notes Forum
Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: adminnaddel am 29.10.04 - 12:49:25
-
Hallo liebe Gemeinde,
eine Agent macht mir seit der letzten Nacht sorgen!
Jede Nacht greift er aus einer db auf eine andere db zu und holt sich Feldwerte und kippt sie rüber! Nun aber, urplötzlich läuft er nicht mehr und schmeißt mir diese Fehlermeldung heraus:
illegal function call
und das an der Stelle!
Set notesname = New notesname(Trim(Left(notesnametmp, pos# - 1)))
Ich glaube, die Stelle an dem er auf die Bretter geht, ist nicht so interessant, sondern eher, daß im debugger zumindestens alle wichtigen Daten aus der db gezogen wird. Die View stimmt, dass war nämlich meine erste Vermutung!
Der Server der db hatte Performance da habe ich mal folgende Überlegung gehabt:
mal ne fixup bzw updall über die db laufen lassen?! -...- vielleicht hat ja die View einen mitbekommen!?
Grüße
PS: wäre sehr wichtig
-
Illegal function call an dieser Stelle würde Sinn ergeben, wenn pos# = 0 wäre ...
Bernhard
-
Nun ja,
ich hätte mal mehr mitgeben sollen ;D
...
notesnametmp = docosdb.notes(0)
pos# = Instr(notesnametmp, "@")
Set notesname = New notesname(Trim(Left(notesnametmp, pos# - 1)))
...
vielleicht sollte man mal nachschauen, was sich im debugger hinter dem string notesnametmp verbirgt ???
Oder
Grüße
-
Ist in notesnametmp kein "@" enthalten, siehst Du garantiert einen "illegal function call" ...
Bernhard
-
Das mit dem Debugger ist mal eine ganz gute Idee, auf die man schon von selber hätte kommen können, und dann natürlich eine Validierung mit
if pos# > 0 Then
notesnametmp = Instr(.......)
end if
-
Das mit dem Debugger ist mal eine ganz gute Idee, auf die man schon von selber hätte kommen können, und dann natürlich eine Validierung mit
::) die db liegt aber net bei uns!
if pos# > 0 Then
notesnametmp = Instr(.......)
end if
??? .. warum sollte =0 sein? ... Instr liefert mir doch so oder so einen Wert, solange der das Feld gefüllt ist!
Grüße
-
Instr liefert 0, wenn das Zeichen nicht enthalten ist. Und Left (irgendwas, 0 - 1) ist ein illegal function call ...
Bernhard
-
Liebe Nadel (leider kann ich Dir den Namen nicht sagen ... da er weder im Fuss noch in der Marginale steht ....)
Instr bringt tatsächlich immer einen Wert zurück, 0 ist ja schliesslich auch ein Wert, und hat seine berechtigte Bedeutung, wie Bernhard eben auch gesagt hat.
Wieso soll für den Entwanzer eine Rolle spielen, ob die DB bei Euch oder woanders liegt? Notes ist doch schliesslich eine verteilte Infrastruktur ??
-
OKAY .... nunmal Klartext ::)
Natürlich ist 0 möglich, doch nur:
string1 is the empty string ("") 0
string2 is not found after begin in string1 0
begin is larger than the length of string1 0
string2 is the empty string ("") The value of begin. If you omit begin, InStr returns the value 1.
string1 is NULL NULL
string2 is NULL NULL
begin or compMethod is NULL Error
Aber ich muss davon ausgehen, das der String gefüllt ist!
Aber danke .... das ist auf jeden Fall ein Ansatz!!
Grüße
-
Falls es noch nicht richtig rübergekommen ist
DANKE
;D
-
Bitte, ist rübergekommen ;D
Jo, auch wenn der Name gefüllt ist, gibt es immer noch 0, wenn
string2 is not found after begin in string1
heisst, wenn @ nicht vorkommt. Abgesehen davon sollte man nie etwas selbstverständliches als gegeben ansehen, wenn vorher schon ein unbehandelter Fehler aufgetreten ist, bekommst Du plötzlich lauter Leer, wo Du vorher behauptet hast, da ist immer ein Wert vorhanden ....
-
Hi,
eines hab ich in den ganzen Jahren bei der ganzen Programmiererei (egal ob mit LotusScript, VB, VBA etc.) gelernt: In einem Programm ist vielleicht 20-30% Funktion, der Rest sind Fehlerabfragen und - behandlungen.
Also, auch wenn du dir noch so sicher bist, das eine bestimmte Situation nie vorkommen kann, irgendwann tritt sie auf und dann... :o
Axel
-
Absolut wahr. Jede Zeile muss unter dem Aspekt "Was erwarte ich - aber was kann sonst noch passieren ?" betrachtet werden.
Es gibt ganz wenige Prüfungen, die man auslassen kann wie
Set dbCurrent = NotesSession.CurrentDatabase
oder
strUserName = NotesSession.UserName
Alles andere muss hinterfragt werden.
Der Programmierer, der "adminnaddel"s Applikation geschrieben hat, war nicht nur "optimistisch", sondern grob fahrlässig. Selbst, wenn der Wert aus einem Feld kommt, in dem in der Eingabevalidierung auf das Vorhandensein der "Zuckerschnecke" (schwedische Bezeichnung für den "Klammeraffen" ;D ) geprüft wird: Das kann man alles umgehen, oder man vergisst es mit den Jahren - und irgendwann scheppert es.
Ich habe gerade die Tage eine Routine geschrieben und mir hinterher selber gesagt: He, das dauert aber lange - erst nach über 200 Zeilen kommst Du zum Kern der Sache - vorab waren alles grundlegende Instantiierungen und vor allem Überprüfungen. Erst dann kamen die eigentlichen funktionalen Teile (wieder mit vielen Überprüfungen).
Bernhard
-
"Zuckerschnecke" (schwedische Bezeichnung für den "Klammeraffen" ;D )
Kennt das Jens schon für den Glossar?
Ich rufe ihn mal: JEEEEEEEEEEEENNNNS
;D
-
Das kann man noch erweitern:
Der Klammeraffe hat in den meisten Sprachen einen Tiernamen erhalten. In Frankreich heisst er escargot (Schnecke), in Holland apestaartje (Affenschwänzchen), in Italien chiocciolina (Schnecklein), in Dänemark snabel-a (Rüssel-a), in Norwegen kanelbolle oder grisehale (Zimtschnecke, Sauschwanz), in Schweden kattfot oder kringla (Katzenpfote, Kringel), in Finnland kissahanta oder miumau (Katzenschwanz, Miau), in Polen malpa (Affe), in Russland sobatschka (Hündchen), in Tschechien zavinac (Rollmops), in Ungarn kukac (Wurm), in Bulgarien majmunka (Äffchen) und in Griechenland papaki (Entchen).
Dieter E. Zimmer: Die Bibliothek der Zukunft, Hoffmann und Campe, ISBN 3-455-10421-5
In Dänisch kenne ich allerdings den elefantsnabel (Elefantenrüssel) und nicht das snabel-a, aber das hat nix zu heissen.
Bernhard
PS: Verdient das Wörterbuch nicht längst einen festen Platz irgendwo, statt "irgendwo" im Off-Topic 'rumlungern zu müssen ?
-
Jo, ich mach mich mal daran, das Glossar ins Best Pracices umzuziehen.