Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: tabama am 20.08.13 - 13:17:26

Titel: Database xy has not been opend yet
Beitrag von: tabama am 20.08.13 - 13:17:26
Ich will aus einer DB eine Volltextsuche in einer anderen DB ausführen.

Im Debuger sehe ich, dass Zugriff auf die andere DB habe. Allerdings bekomme ich beim "search" den o.g. Fehler.
Führe ich das Script in der Original-DB aus (natürlich angepasst), funktioniert es.

Woran liegt das?
Titel: Re: Database xy has not been opend yet
Beitrag von: cebolina am 20.08.13 - 13:22:12
Auf Anhieb würde ich sagen, es fehlt sowas:

Code
If dbXY.IsOpen then
   ...
End if

Stefan
Titel: Re: Database xy has not been opend yet
Beitrag von: koehlerbv am 20.08.13 - 13:22:54
Oder ein
Dim dbOther As New NotesDatabase ("", "")
Titel: Re: Database xy has not been opend yet
Beitrag von: Keydins am 20.08.13 - 13:31:22
ggf. fehlt auch ein
Call db.Open( "", "" )

Gruß
Dirk
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 20.08.13 - 14:02:20
Danke für die Antworten. Aber das mit dem "New" und dem "Call" hatte ich auch schon in anderen Beiträgen gefunden. Das bringt das selbe Ergebnis.

Das Problem ist ja auch nicht, dass die DB nicht da ist, wenn ich sie wie gewohnt mit "Set db = session.GetDatabase("", "xy")" hole.
Erst wenn ich den search ausführe, kommt der Fehler.
Titel: Re: Database xy has not been opend yet
Beitrag von: koehlerbv am 20.08.13 - 14:04:23
Code?
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 20.08.13 - 14:29:26


Option Public
Option explicit

Dim db As NotesDatabase
Dim dbVA As NotesDatabase
Dim dc As NotesDocumentCollection
Dim dcVA As NotesDocumentCollection
Dim doc As NotesDocument
Dim docVA As NotesDocument
Dim query As String
Dim pn As String   
Dim ts As String
Dim te As String

Sub Initialize
   Dim session As New NotesSession
   Set db = session.CurrentDatabase
   Set dbVA = session.GetDatabase("", "Vertragsabrechnung")
   Set dc = db.UnprocessedDocuments   
   Set doc = dc.GetFirstDocument
   Call haupt   
End Sub

Sub haupt
   pn = CStr(doc.pn(0))
   ts = Left(CStr(doc.TxTSLEinzelauftrag(0)),2)
   te = Right(CStr(doc.TxTSLEinzelauftrag(0)),2)
   query = |form = 'HUM' & HU_PN_v <= | + pn + | & HU_PN_b >= | + pn + | & HU_TS_v <= | + ts + | & HU_TS_b >= | + ts + | & HU_TE_v <= | + te + | & HU_TE_b >= | + te
   Set dcVA = dbVA.Search(query, Nothing, 0)
      If dcVA.count = 0 Then
         doc.UmsatzGrp = "15 = Sonstige"
      ElseIf dcVA.count > 1 Then
'         MessageBox "F E H L E R, bitte Admin verständigen", MB_OK, "Umsatzgruppe"
      Else
         Set docVA = dcVA.GetFirstDocument
         doc.UmsatzGrp = docVA.HU_UgpNa(0)
      End If
End Sub

Titel: Re: Database xy has not been opend yet
Beitrag von: dnotes am 20.08.13 - 14:43:54
Hast Du Dir den querystring mal anzeigen lassen? Vielleicht stimmt damit ja etws nicht.
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 20.08.13 - 14:56:13
Hallo,

das query stimmt, da ich es 1:1 aus eine script heraus kopiert habe, wo es funktioniert. Ich habe das Ganze nämlich erst in der Original-DB getestet.
Titel: Re: Database xy has not been opend yet
Beitrag von: koehlerbv am 20.08.13 - 15:02:13
Eine falsche Query gibt entweder Formula-Gemecker oder eben keine Resultate.
Ausreichenden Zugriff auf die DB hast Du bzw. die ausführende ID?

By the way: Du führst mit NotesDatabase.Search keine Volltextsuche aus, Martin.

Bernhard
Titel: Re: Database xy has not been opend yet
Beitrag von: Driri am 20.08.13 - 15:08:53
Sicher, daß die Zuweisung von dbVA korrekt ist ?

Sieht für mich ein wenig merkwürdig aus, daß da eine lokale Datenbank mit Dateinamen "Vertragsabrechnung.nsf" geöffnet werden soll. Könnte aber auch an meiner persönlichen Vorliebe für 8.3-Dateinamen liegen  ;D
Titel: Re: Database xy has not been opend yet
Beitrag von: dnotes am 20.08.13 - 15:21:25
Und die Variablen ts, te und pn haben auch einen Wert?
Titel: Re: Database xy has not been opend yet
Beitrag von: Keydins am 20.08.13 - 15:29:41
Wenn das Script auf dem Server läuft ist der Serverparameter bei der Zuweisung von dbVA korrekt.


Aber wie Stefan schon schrieb, ein dbVA.IsOpen in den Code einbauen, um zu prüfen, ob die entfernte DB tatsächlich offen ist, wäre sinnvoll.

In dem Zusammenhang ggf. noch den 3. Parameter von ses.GetDatabase auf False setzen, um zu verhindern, dass ein Datenbankobjekt erzeugt wird, obwohl es die Datenabnk gar nicht gibt bzw. kein Zugriff darauf besteht. Per Default ist er True, wenn man ihn weglässt.
Titel: Re: Database xy has not been opend yet
Beitrag von: dnotes am 20.08.13 - 15:35:26
Wenn Du schreibst Du siehst im Debugger dass Du Zugriff auf die andere DB hast - was immer das auch heissen mag - siehst Du im Debugger denn auch unter den DB-Eigenschaften einen DB-Titel??
Wenn nicht hast Du höchstwahrscheinlich auf eine nicht existierende Db referenziert. ( Dateiname falsch geschrieben, Pfad nicht korrekt oder keine Zugriff)
Titel: Re: Database xy has not been opend yet
Beitrag von: Driri am 20.08.13 - 15:38:20
Zitat
Wenn das Script auf dem Server läuft ist der Serverparameter bei der Zuweisung von dbVA korrekt.

Schon klar. Aber da im Script Messageboxes verwendet werden, gehe ich mal von einem Aufruf im Client aus. Und dann wäre das eine lokale DB, daher die Fragen.
Titel: Re: Database xy has not been opend yet
Beitrag von: Axel am 20.08.13 - 15:43:49
Du solltest auf jeden Fall prüfen, ob die Datenbank vorhanden und sich öffnen lässt.

So kann eine einfache Art der Fehlerbehandlung aussehen.

Sub Initialize
   Dim session As New NotesSession
   Set db = session.CurrentDatabase
   Set dbVA = session.GetDatabase("", "Vertragsabrechnung")

   If Not dbVA.IsOpen Then
       Messagebox "Datenbank kann nicht gefunden bzw. geöffnet werden"
       Exit Sub
  End If

   Set dc = db.UnprocessedDocuments  
   Set doc = dc.GetFirstDocument
   Call haupt  
End Sub

Du solltest einen Code nie ohne die entsprechende Fehlerbehandlung erstellen.

Axel
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 20.08.13 - 16:16:58
Danke für die vielen Antworten, bin aber jetzt erst dazu gekommen sie zu lesen.

Verständnisfrage:
Wenn ich die DB im Debuger sehe (also auch mit Werten), dann ist sie doch richtig zugewiesen und ich habe auch Zugriff. Oder muss ich mir da noch um andere Dinge Gedanken machen (sprich Prüfungen einbauen)?

@Bernhard:
Was meinst du mit "keine Volltextsuche"? Ich gehe doch nicht auf einen Index, sonder würfele mir die Dokumente doch aus mehreren Bedingungen zusammen.

Infos:
Ausgeführt wird der Agent über den Clienten (ausgewähle Dokumente).

Titel: Re: Database xy has not been opend yet
Beitrag von: umi am 20.08.13 - 16:35:06
Hallo

Müsste es nicht
Code
set dbVA = session.getDatabase("","Vertragsabrechnung.nsf") 
sein ?

Auf jedenfall mit IsOpen prüfen ob Notes die DB geöffnet hat oder nicht.
Titel: Re: Database xy has not been opend yet
Beitrag von: Ralf_M_Petter am 20.08.13 - 17:15:17
Auf welche Platform läuft das Script?
Titel: Re: Database xy has not been opend yet
Beitrag von: koehlerbv am 20.08.13 - 17:25:58
Hallo

Müsste es nicht
Code
set dbVA = session.getDatabase("","Vertragsabrechnung.nsf") 
sein ?

Auf jedenfall mit IsOpen prüfen ob Notes die DB geöffnet hat oder nicht.

Yipp.
Titel: Re: Database xy has not been opend yet
Beitrag von: cebolina am 20.08.13 - 17:39:26
Müsste es nicht
Code
set dbVA = session.getDatabase("","Vertragsabrechnung.nsf") 
sein ?

Im Beispiel aus der Hilfe zu GetDatabase steht das auch ohne ".nsf":
Zitat
Set db = s.GetDatabase("snapper", "names2")
So gesehen sollte das schon stimmen ;-)
(Ich würde allerdings auch immer filename.nsf angeben.)

Stefan
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 21.08.13 - 10:24:36
Hallo,

konnte nun weitermachen, bin aber nicht weiter gekommen.

Das ".nsf" hat nicht weitergeholfen.

Die Prüfung mit isopen ist negativ. Das ist zwar nun der Grund warum das search nicht funktioniert, hilft mir aber nicht weiter. Was ich nicht verstehe ist, dass ich im Debugger die DB habe, sie aber doch nicht geöffnet ist.

Das Script läuft auf Notes 8.53 und Win 7 Enterprise SP1 32 BIT.
Titel: Re: Database xy has not been opend yet
Beitrag von: Driri am 21.08.13 - 10:32:06
Ähm, wenn IsOpen False zurück liefert, dann wurde Dir die Lösung hier doch schon genannt.

Einfach so ein Konstrukt vor dem Search einbauen :

Code
If Not db.IsOpen Then
   Call db.Open("","")
End If

Das kam schon in den ersten Antworten.
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 21.08.13 - 10:56:29
Hallo Driri,

brachte aber bei der ersten Antwort schon nichts ;)

Ich habe diesen Code nun aber nochmal eingebaut, funktioniert aber dennoch nicht
Code
If Not dbVA.IsOpen Then
   Call dbVA.Open("","Vertragsabrechnung.nsf")
End If

Und nochmal meine Frage bzw. mein Hinweis: Im Debugger ist die DB da !!
Titel: Re: Database xy has not been opend yet
Beitrag von: umi am 21.08.13 - 10:59:52
Hi
Die DB ist komplett bei Dir lokal vorhanden? nicht nur der replika Stub?
Du hast genügend Rechte die zu öffnen?
Die DB ist nicht verschlüsselt?
Titel: Re: Database xy has not been opend yet
Beitrag von: koehlerbv am 21.08.13 - 11:00:34
Das heisst aber noch lange nicht, dass man Zugriff auf die DB hat. In dem Zustand, den Du hast, kannst Du Title und FilePath auslesen und das war es auch schon.
Die Anzeige im Debugger ist auch richtig, bei IsOpen wird Dir auch False angezeigt.

Bernhard
Titel: Re: Database xy has not been opend yet
Beitrag von: tabama am 21.08.13 - 11:51:03
Es ist vollbracht :)

Mein Problem war, dass ich mich vom Debugger habe täuschen lassen.

Was mir da im Debugger angezeigt wurde ist mir zwar immer noch nicht klar, aber als ich beim "set db..." mal den Server und den kompletten Pfad angegeben habe, habe ich nun auch mehr Infos zur DB im Debugger (wie von Bernhard beschrieben).

Das db.Open ist nun auch nicht notwendig.


Dank an Alle die mir geantwortet haben.
Titel: Re: Database xy has not been opend yet
Beitrag von: Axel am 21.08.13 - 12:59:17

Das db.Open ist nun auch nicht notwendig.


Das würde ich so nicht unbedingt unterschreiben.

Sicherlich, für die reine Funktionalität (Search) ist db.Open nicht erforderlich. Aber für eine Fehlerabfrage ist es durch aus sinnvoll und eine Fehlerbehandlung würde ich dir wärmstens ans Herz legen wollen.

Axel
Titel: Re: Database xy has not been opend yet
Beitrag von: cebolina am 21.08.13 - 14:04:16
Fazit:

Immer sowas in der Art
Code
If db.IsOpen then
   'tu was
Else
   Messagebox "DB konnte nicht geöffnet werden! , , "Fehler"
   Exit Sub
End If
einbauen!

Stefan