Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 07.11.03 - 09:42:04
-
NEU :
Ich will das Problem nochmal neu beschreiben :
Der User hat Lotus auf C,
das DATA Verzeichnis und seine ID Datei auf einem gemappten Laufwerk W.
Folgende Zeile:
Call LNSession.Initialize(strPassword)
wirft diesen Fehler auf:
-2147217504
Die ID Datei konnte nicht geöffnet werden.
Wer weiss Rat ?
********************************
Altes Posting
Hallo Leute,
ich habe ein Visual Basic Programm geschrieben, welches Datensätze in einer Lotus DB erstellt.
Das Programm funktioniert auch - auf meinem Rechner. ( NT )
Aber nicht beim Kunden.
Das Problem ist höchstwahrscheinlich das
DIM LNSESSION as NotesSession
Hat da jemand eine Idee für mich ?
Hier ein Codeauszug :
Const VERSION = "1.01"
Const OS = "NT Workstation"
Public strLotusserver As String
Public strLotusDBFile As String
Public strPassword As String
Public bLogging As Boolean
Public strLogfile As String
Private Sub Main()
' NT VERSION
Dim LNSession As NotesSession
Dim LNDB As NotesDatabase
' XP Version
'Dim LNSession As Variant
'Dim LNDB As Variant
Dim LNDoc As Variant
Dim item As Variant
Dim obj As NotesEmbeddedObject
Dim rti As NotesRichTextItem
Dim strCommandLine As String
Dim strNewPassword As String
Dim Zeile1 As String
Dim myBESITZER As String
Dim myVorname As String
Dim myNachname As String
Dim myTITEL As String
Dim myGRUPPE As String
Dim myVERZEICHNIS As String
On Error GoTo ErrHandler
strCommandLine = Command()
writeLog ("StrCommandline" & strCommandLine)
myGRUPPE = Trim(sWord(strCommandLine, "#", 1))
writeLog ("MyGruppe :" & myGRUPPE)
myBESITZER = sWord(strCommandLine, "#", 2)
writeLog ("MyBESITZER :" & myBESTIZER)
If myBESITZER <> "" Then
myVorname = Trim(sWord(myBESITZER, ",", 2))
myNachname = Trim(sWord(myBESITZER, ",", 1))
myBESITZER = myVorname & " " & myNachname
End If
myTITEL = sWord(strCommandLine, "#", 3)
myVERZEICHNIS = sWord(strCommandLine, "#", 4)
' NT & XP Version
Set LNSession = New NotesSession
writeLog ("Set LNSession = New NotesSession nachher")
' XP Version ?????
' Set LNSession = CreateObject("Notes.NotesSession")
strPassword = Decode(strPassword)
Call LNSession.Initialize(strPassword)
If Not LNSession Is Nothing Then
Set LNDB = LNSession.GetDatabase(strLotusserver, strLotusDBFile)
Set LNDoc = LNDB.CreateDocument
Call LNDoc.AppendItemValue("BESITZER", myBESITZER)
Call LNDoc.AppendItemValue("GRUPPE", myGRUPPE)
Call LNDoc.AppendItemValue("TITEL", myTITEL)
Call LNDoc.AppendItemValue("DATUM", Now)
Call LNDoc.AppendItemValue("Form", "frmDokument")
Set rti = LNDoc.CreateRichTextItem("BODY")
Set obj = rti.EmbedObject(EMBED_ATTACHMENT, "", myVERZEICHNIS & "\00001")
' Das Dokument speichern
LNDoc.Save True, False, False
On Error GoTo ErrHandler
Kill (myVERZEICHNIS & "\00001")
RmDir (myVERZEICHNIS)
End If
Exit Sub
ErrHandler:
writeLog (Now & " Fehler # " + Str(Err) + " aufgetreten:" + vbCrLf + Now + " " + Err.Description)
Set LNDB = Nothing
Set mLNsession = Nothing
End Sub
Private Function SetNewPassword(aNewPassword As String) As Boolean
Dim strError As String
If Not Registry_SchreibeWert(HKEY_LOCAL_MACHINE, RegistryPfad, "LotusPassword", Encode(aNewPassword), strError) Then
MsgBox "Das neue Kennwort konnte nicht gesetzt werden!,vbCritical) "
End If
End Function
Private Function sWord(sourceString As String, separator As String, number As Integer) As String
searchString$ = sourceString & separator
For i% = 1 To number
pos% = InStr(searchString$, separator)
If pos% = 0 Then Exit For
substring$ = Left(searchString$, pos% - 1)
searchString$ = Mid(searchString$, pos% + 1)
Next
If pos% > 0 Then
sWord = substring$
Else
sWord = ""
End If
End Function
-
Hi,
wo tritt denn der Fehler auf ? Wenn du sagst evt. bei NotesSession, dann überprüf doch mal die Registry ob der Notes Client bei der Installation richtig eingebunden wurde.
Unter HKEY_CLASSES_ROOT solltest du auf jeden Fall den Eintrag Notes.NotesSession finden. Wenn das nicht der Fall ist, würde ich den Client nochmals installieren.
Ich hatte schon Fälle, da hat es geholfen.
Axel
-
@Axel,
da der Fehler beim Kunden auftritt und nicht bei mir, weiss ich nicht genau wo der Fehler auftritt.
Ich vermute, dass es begsate LNSession Zeile ist, weil diese beim hausinternen testen auf einem XP Rechner Probleme gemacht hat,
während sie auf NT läuft.
Der Kunde hat jetzt aber NT und dennoch läuft der Code nicht.
Ich werde die Registry mal prüfen, danke für den Tipp
Ciao
Don Pasquale
-
Hat der Kunde eine Fehlermeldung oder nicht? Wenn ja, wie heisst den die?
-
@Semeahphorus
oh sorry. Der Kunde bekommt folgende Meldung :
Laufzeitfehler '13':
Typen unverträglich
Ciao
Don Pasquale
-
Wenn denn die Ole-Einstellungen stimmen, wie Axel beschrieben hat, dann kann ich mir nicht vorstellen, dass es die LNSession ist, die das auslöst, hab aber mangels Zeit grad auch keinen besseren Tip zur Hand ..........
-
in der registry steht :
notes.notessession
folgender Eintrag
Notes R4.0 NotesSession
Ciao
Don Pasquale
-
Der Fehler tritt in folgenden Zeile auf - übrigens jetzt auch bei mir - :
Call LNDoc.AppendItemValue("BESITZER", myBESITZER)
Call LNDoc.AppendItemValue("GRUPPE", myGRUPPE)
Ciao
Don Pasquale
-
Was ist myBesitzer für ein datentyp?
-
@Axel,
der Fehler tritt bei mir nicht mehr auf, er hatte die .nsf Datei schlichtweg nicht gefunden.
Beim Kunden ist folgende zeile die den Fehler verursacht
Call LNSession.Initialize(strPassword)
Wobei ich jetzt nur vermuten kann, dass der User sein Password korrekt eingegeben hat.
Ich habe es kontrollieren lassen, das Password ist korrekt.
Wie kann diese Zeile eine Typenunverträglichkeit verursachen ?
Ciao
Don Pasquale
-
Die Fehlermeldung ist in der Tat merkwürdig.
Vielleicht ist die id-Datei nicht in einer der Verzeichnisse, die in der OS-Umgebungsvariable Path stehen?
Gruß Axel
-
Die ID´s liegen auf gemappten Laufwerken, daran sollte es also nciht liegen.
Sollte ich LNSession vielleicht als Variant deklarieren ?
Ciao
Don Pasquale
-
nicht als Variant, aber deklariere doch mal alle Notes-Objekte als Object. Ich kann mich erinnern, das schonaml über OLE gemacht zu haben und dabei alles als Object deklariert zu haben. Vielleicht hilfts...
-
Könnte es an verschiedenen DLLs liegen ?
Falls ja welche Datei muß ich da überprüfen ?
Ciao
Don Pasquale
-
Ich bin jetzt wieder einen Schritt weiter, der Fehler mit dem das programmbeendet lautet folgendermaßen:
ID Datei konnte nicht gefunden werden Fehler - 2147217504
Das Lotus der Mitarbeiter liegt auf einem gemappten Laufwerk.
Ich habe dann mit einem ID wechseln die ID in das C:\WINNT Verzeichnis kopiert, aber auch dort bekam ich den gleichen Fehler.
Wo bekomme ich Infos zu dieser Fehlernummer ?
Ciao
Don Pasquale
-
... das sieht so aus, als würdest du die Session irgendwo verlieren...
Noch was ist mir aufgefallen: In deiner Fehlerroutine:
Set mLNsession = Nothing
... wo deklarierst du mLNsession?
ata
-
tippfehler.
hatte aber keine auswirkungen
ciao
Don Pasquale
-
... hast du es schon mal ohne dein Fehlerhandling probiert, mit dem Debugger? Die Fehlermeldung könnte eventuell auch nur einen "Type mismatch" meinen - und da gibt es zumeist viele Möglichkeiten...
ata
-
Hallo ata,
der Administrator hat meine Code auf seinem Rechner ausgeführt,
sein Lotus liegt unter C:\Lotus\Notes
Dieser Code funktioniert.
Der Fehler tritt bei einem User auf, dessen Lotus auf dem Server liegt,
bzw. in einem gemappten Verzeichnis.
Kann da jemand was mit anfangen.
ps: Ja, mein Logging hatte auch einen Type Mismatch fehler, aber der ist ausgemerzt
Ciao
Don Pasquale
-
ich weiß, dass man die COM-Objekte, die LotusNotes ab 5.irgendwas zur Verfügung stellt, nur verwenden kann, wenn man eine lokale Installation hat, bei einer Installation auf einem ApplicationServer geht das nicht, weil die entsprechende dll nicht auf dem Rechner installiert/registriert ist, auf dem der Code ausgeführt wird.
Vielleicht ist es bei dir der gleiche Grund. Bei den COM-Objekten kann man das lösen, in dem man die dll (NLSXBE.DLL) auf dem entsprechenden Rechner registriert.
-
@potsmoker ?
Bist Du sicher, dass es die NLSXBE.dll sein muß und nciht die domobj.tlb ?
Ciao
Don Pasquale
-
ziemlich. die Typelibrary brauchst du allerdings zum Entwickeln.
-
Ich habe nun versucht, diese dll zu registrieren,
aber höchstwahrscheinlich müssen noch andere Dateien registriert sein,
da er das Modul nicht finden kann.
ein einfaches kopieren der nlsxbe.dll auf den betroffenen rechner und ein regisrtieren dieser datei reicht nicht aus. Der Fehler bleibt derselbe
Ciao
Don Pasquale
-
Es sind nun alle notwendigen DLLs registriert.
Dennoch bleibt der Fehler
-2147217504
ID Datei konnte nicht geöffnet werden
Wo kann ich nachschauen was dieser Errorcode bedeutet ?
Ciao
Don Pasquale
-
Hallo Leute,
das Problem ist gelöst.
Die Notes.INI des users war auf einem gemappten laufwerk und
wurde vom VB Code nicht gefunden. Deswegen wurde die
ID Datei des users nicht gefunden.
Nun steht der erste ernste Test aus.
Ciao
Don Pasquale