Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sky-diver am 05.05.05 - 12:40:22

Titel: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 12:40:22
ist es möglich per button eine notes db zu suchen und diese zu löschen und danach eine neue repliak einer db anzulegen ?

für das anlegen ha ich es mal so veruscht ...leider ohne erfolg

Dim session As New NotesSession
Dim db As NotesDatabase
Set db = datenbankname
Call db.Replicate( "local" )

wäre toll wenn ich aber vorgängig noch per kill eine db löschen könnte ..
Titel: Re: wieder mal eine script frage
Beitrag von: TMC am 05.05.05 - 13:31:46
per kill eine db löschen könnte ..

Siehe Remove Methode der NotesDatabase - Klasse


Um eine Replik neu zu erstellen: siehe NotesDatabase.CreateReplica


Steht übrigens alles in der Designerhilfe, unter NotesDatabase.
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 13:51:19
danke für den tipp ..nun habe ich alle einzelen teile des codes ...

nun muss ich bastel ich poste einfach mal meinen code hier rein hoffe er passt ...
Zoel ist es eine db zu löschen auf dem lokalen notes books eine neue replik anzulegen und das ini anzupassen ...beim remove will ich auf die replik id zugreiffen ...klappt das so ?




Dim session As New NotesSession
Set notesDatabaseReplica = notesDatabase.CreateReplica( "", DC.nsf )
Call session.SetEnvironmentVar( "Names", "names.nsf, DC.nsf", True )
Dim db As New NotesDatabase( "", "repliID" )
Call db.Remove
Titel: Re: wieder mal eine script frage
Beitrag von: TMC am 05.05.05 - 14:21:46
Auch das steht in der Designer-Help (F1 im Designer !) unter NotesDatabase class .
Bitte dort mal *alles* lesen.

Zitat
To access an existing database when you know its server and replica ID, use the OpenByReplicaID method.
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 14:25:49
okee ich melde mich ...in 2 jahren wieder...ich werde *alles* lesen.
Titel: Re: wieder mal eine script frage
Beitrag von: TMC am 05.05.05 - 14:32:28
Du brauchst 2 Jahre um den Teil "NotesDatabase class" komplett zu lesen?
Sind ca. 2 Seiten Text.
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 14:39:09
nei das nicht habe gesagt ich lese *alles*

Spass bei seite, ich bin ja nicht zu faul aber hiert ist en vertändigungs problem.

Ich will die DC datenbank vom server runterrepliziern, und die eine per replik id löschen ..muss ich für das löschen die db zuerst öffnen ? Und sucht er nicht automatisch nach der DC.nsf auf dem server muss ich beide db zuerst öffnen ?
Habe den befehl gefunden aber wie kriege ich den dann rein gedückt ..bin mir ja nicht mal sicher ob dieser code richtig zusammengestellt ist..

Dim session As New NotesSession
Set notesDatabaseReplica = notesDatabase.CreateReplica( "", DC.nsf )
Call session.SetEnvironmentVar( "Names", "names.nsf, DC.nsf", True )
Dim db As New NotesDatabase( "", "repliID" )
Call db.Remove
Titel: Re: wieder mal eine script frage
Beitrag von: Semeaphoros am 05.05.05 - 15:07:48
ohnedasöffnenvondatenbankenkannmaninnotesfastnixmachendasgehtdassagenaber
auchdieentsprechendenfehlermeldungenundmansiehtesauchindenbeispieleninderhilfe
Titel: Re: wieder mal eine script frage
Beitrag von: TMC am 05.05.05 - 15:16:44
Bitte gib uns mehr Großbuchstaben in Deinen Postings, sonst fällt das Lesen sehr schwer.

Wie mehrfach erwähnt: steht eigentlich alles in der Designerhilfe inklusive Beispiele.

Code
	Const DB_REMOVE_SERVER$ = ""
	Const DB_REMOVE_REPID$ = "0123456789012345"	
	
	On Error Goto ErrorHandler
	
	Dim session As New NotesSession
	Dim dbToRemove As NotesDatabase
	Dim dbNewReplica As NotesDatabase
	Dim strTitleDbToRemove As String
	
	'Open Database by Replica ID
	Set dbToRemove = New NotesDatabase("", "")
	If Not dbToRemove.OpenByReplicaID(DB_REMOVE_SERVER, DB_REMOVE_REPID) Then 
		Error 1001, "Die zu löschende Datenbank kann nicht gefunden/geöffnet werden"
	End If
	strTitleDbToRemove = dbToRemove.Title
	
	'Ask
	If Not Msgbox ("Gewählte Datenbank: " & strTitleDbToRemove & Chr(10) _
	& "Diese Datenbank wirklich dauerhaft löschen?",1 + 32, "Sicher?") = 1 Then Exit Sub
	
	'Remove Database
	Call dbToRemove.Remove
	
	'Final msg
	Msgbox "Datenbank <" & strTitleDbToRemove & "> wurde gelöscht !", 64, ""
	
GoOut:
	Exit Sub
ErrorHandler:
	Select Case Err
	Case 4042:	'Database could not be deleted
		Msgbox "Datenbank konnte nicht gelöscht werden, ein möglicher Grund: Ist gerade von einem anderen User geöffnet",48
		Resume goOut		
	Case Else:
		Msgbox "Fehler " & Err & " - " & Error$ & Chr(10) _
		& "Fehler aufgetreten in Code-Zeile " & Erl, 48, "Laufzeitfehler"
		Resume GoOut	
	End Select

Den Code stelle ich Dir zur Verfügung, damit Du mal den grundsätzlichen Aufbau von so etwas siehst.
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 16:16:25
Danke, ja es staht alles in der Noteshilfe. Nur das Problem ist das zusammenhängen der einzelenen Scripts. Das steh ja nicht in der Hilfe. Ich versuche mal Dein Script zu Verstehen. Nun ist es für mich einfacher den Aufbau zu verstehen. Liege ich richtig, dass Du nur die Db gelöscht wird. Das Erstellen und den Eintrag in die Notes.ini werden noch nicht gemacht richtig?

Könnte ich nun weiterfahren mit meinen Script nach Deiner letzten Zeile.
Dim dbNewReplica hast du ja schon deklariert.

hoffeessindgnuggrossebuchstabenvorhanden

Titel: Re: wieder mal eine script frage
Beitrag von: Semeaphoros am 05.05.05 - 17:18:10
Richtig, die DB wird nur gelöscht. Weiterfahren musst Du nicht nach dem Script, sondern vor der Zeile

GoOut:

- DB auf dem Server öffnen
- neue Replik local anlegen lassen
- notes.ini anpassen, falls nötig (sehe nicht, warum Du das willst??)
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 18:41:38
Also ich hab mal etwas versucht ..kann das Funktionieren? Wie schon erwähnt ich bin da ein totaler Newbie.

Const DB_REMOVE_SERVER$ = ""
Const DB_DATABASE_SERVER$= "Mein Server"
Const DB_REMOVE_REPID$ = "0123456789012345"
Const DB_REPLICATE_REPID$ = "987654321"

On Error Goto ErrorHandler

Dim session As New NotesSession
Dim dbToRemove As NotesDatabase
Dim dbNewReplica As NotesDatabase
Dim strTitleDbToRemove As String

'Open Database by Replica ID
Set dbToRemove = New NotesDatabase("", "")
If Not dbToRemove.OpenByReplicaID(DB_REMOVE_SERVER, DB_REMOVE_REPID) Then
Error 1001, "Die zu löschende Datenbank kann nicht gefunden/geöffnet werden"
End If
strTitleDbToRemove = dbToRemove.Title

'Ask
If Not Msgbox ("Gewählte Datenbank: " & strTitleDbToRemove & Chr(10) _
& "Diese Datenbank wirklich dauerhaft löschen?",1 + 32, "Sicher?") = 1 Then Exit Sub

'Remove Database
Call dbToRemove.Remove

'Final msg
Msgbox "Datenbank <" & strTitleDbToRemove & "> wurde gelöscht !", 64, ""

'Open Db to replicate

Dim dbNewReplica As NotesDatabase
Set dbNewReplica = New NotesDatabase("DB_DATABASE_SERVER", "DB_REPLICATE_REPID")
dbNewReplica(DB_DATABASE_SERVER, DB_REPLICATE_REPID)
Set db = session.CurrentDatabase
Set replica = db.CreateReplica( DB_DATABASE_SERVER,DB_REPLICATE_REPID)

' Set new parameters in Notes.ini

Call session.SetEnvironmentVar( "Names", "names.nsf, DC.nsf", True )

GoOut:
Exit Sub
ErrorHandler:
Select Case Err
Case 4042: 'Database could not be deleted
Msgbox "Datenbank konnte nicht gelöscht werden, ein möglicher Grund: Ist gerade von einem anderen User geöffnet",48
Resume goOut
Case Else:
Msgbox "Fehler " & Err & " - " & Error$ & Chr(10) _
& "Fehler aufgetreten in Code-Zeile " & Erl, 48, "Laufzeitfehler"
Resume GoOut
End Selec
Titel: Re: wieder mal eine script frage
Beitrag von: TMC am 05.05.05 - 18:46:45
..kann das Funktionieren?

Warum testest Du das nicht selbst ???

Es gibt da "Tools":
 - Debugger
 - Option Declare
 - Compiler, der schwerwiegende Fehler erst gar nicht zulässt (und somit nicht kompiliert)

Erster Blick:
 - dbNewReplica ist doppelt gedimmt
 - Konstenten wie DB_DATABASE_SERVER stehen in Anführungszeichen


So, nun teste mal das Script. Benutze die Tools. Und poste genau, wo Du dann ggf. nicht mehr weiterkommst.
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 20:07:00
Danke für den Tipp, ich habe den code nochmals ein wenig angepasst.

Nur ist es so beim testen Springt er mir immer in den error handler.
Db nicht gefunden, kann ich auch einfach weitermachen wenn die Db nicht lokal vorhanden ist.
 Also ohne IF was kann ich Alternativ für ein Flag setzen Set  oder Call  geht nicht da Kompeliert er nicht. Hoffe ich krige das noch hin..

Sub Click(Source As Button)
   Const DB_REMOVE_SERVER$ = ""
   Const DB_DATABASE_SERVER$= "Mein Server"
   Const DB_REMOVE_REPID$ = "0123456789012345"
   Const DB_REPLICATE_REPID$ = "987654321"
   
   On Error Goto ErrorHandler
   
   Dim session As New NotesSession
   Dim dbToRemove As NotesDatabase
   Dim dbNewReplica As NotesDatabase
   Dim strTitleDbToRemove As String
   
'Open Database by Replica ID
   Set dbToRemove = New NotesDatabase("", "")
   If Not dbToRemove.OpenByReplicaID(DB_REMOVE_SERVER, DB_REMOVE_REPID) Then
   Error 1001, "Die zu löschende Datenbank kann nicht gefunden/geöffnet werden"
End If
strTitleDbToRemove = dbToRemove.Title

'Ask
If Not Msgbox ("Gewählte Datenbank: " & strTitleDbToRemove & Chr(10) _
& "Diese Datenbank wirklich dauerhaft löschen?",1 + 32, "Sicher?") = 1 Then Exit Sub

'Remove Database
Call dbToRemove.Remove

'Final msg
Msgbox "Datenbank <" & strTitleDbToRemove & "> wurde gelöscht !", 64, ""

'Open Db to replicate
Dim db As New NotesDatabase( "", "" )
If db.OpenByReplicaID( "MeinServer", "85255FA900747B84" ) Then
   Print( db.Title & " was successfully opened" )
Else
   Print( "Unable to open database" )
End If

Set db = session.CurrentDatabase
Set replica = db.CreateReplica( "", "" )


' Set new parameters in Notes.ini

Call session.SetEnvironmentVar( "Names", "names.nsf, DC.nsf", True )

GoOut:
Exit Sub
ErrorHandler:
Select Case Err
Case 4042: 'Database could not be deleted
   Msgbox "Datenbank konnte nicht gelöscht werden, ein möglicher Grund: Ist gerade von einem anderen User geöffnet",48
   Resume goOut
Case Else:
   Msgbox "Fehler " & Err & " - " & Error$ & Chr(10) _
   & "Fehler aufgetreten in Code-Zeile " & Erl, 48, "Laufzeitfehler"
   Resume GoOut
End Select
End Sub
Titel: Re: wieder mal eine script frage
Beitrag von: Semeaphoros am 05.05.05 - 21:22:09
Aehm, was für eine Meldung gibt der Error-Handler denn aus, wenn Du ihn durchläufst?
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 05.05.05 - 22:11:22
Hi, also keine er macht genau das was er machen muss. Das Popup " Error 1001, "Die zu löschende Datenbank kann nicht gefunden/geöffnet werde"
Das ist ja richtig so. Aber eben besser wäre es ohne die IF Abfrage da ich nicht sicher bin wer die Db lokal hat oder nicht. Wenn die Db nicht vorhanden wäre müsste der Agent einfach weiterlaufen.
Titel: Re: wieder mal eine script frage
Beitrag von: Semeaphoros am 05.05.05 - 22:30:47
Versuchs mal damit:



Sub Click(Source As Button)
   Const DB_REMOVE_SERVER$ = ""
   Const DB_DATABASE_SERVER$= "Mein Server"
   Const DB_REMOVE_REPID$ = "0123456789012345"
   Const DB_REPLICATE_REPID$ = "987654321"
   
   On Error Goto ErrorHandler
   
   Dim session As New NotesSession
   Dim dbToRemove As NotesDatabase
   Dim dbNewReplica As NotesDatabase
   Dim strTitleDbToRemove As String
   
'Open Database by Replica ID
   Set dbToRemove = New NotesDatabase("", "")
   If dbToRemove.OpenByReplicaID(DB_REMOVE_SERVER, DB_REMOVE_REPID) Then
   
strTitleDbToRemove = dbToRemove.Title

'Ask
If Not Msgbox ("Gewählte Datenbank: " & strTitleDbToRemove & Chr(10) _
& "Diese Datenbank wirklich dauerhaft löschen?",1 + 32, "Sicher?") = 1 Then Exit Sub

'Remove Database
Call dbToRemove.Remove

'Final msg
Msgbox "Datenbank <" & strTitleDbToRemove & "> wurde gelöscht !", 64, ""

End If

'Open Db to replicate
Dim db As New NotesDatabase( "", "" )
If db.OpenByReplicaID( "MeinServer", "85255FA900747B84" ) Then
   Print( db.Title & " was successfully opened" )
Else
   Print( "Unable to open database" )
End If

Set db = session.CurrentDatabase
Set replica = db.CreateReplica( "", "" )


' Set new parameters in Notes.ini

Call session.SetEnvironmentVar( "Names", "names.nsf, DC.nsf", True )

GoOut:
Exit Sub
ErrorHandler:
Select Case Err
Case 4042: 'Database could not be deleted
   Msgbox "Datenbank konnte nicht gelöscht werden, ein möglicher Grund: Ist gerade von einem anderen User geöffnet",48
   Resume goOut
Case Else:
   Msgbox "Fehler " & Err & " - " & Error$ & Chr(10) _
   & "Fehler aufgetreten in Code-Zeile " & Erl, 48, "Laufzeitfehler"
   Resume GoOut
End Select
End Sub
Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 06.05.05 - 08:40:14
Soweit so gut ich habe nur noch ein kleines Problem,
beim Anlegen einer Replik ich habe mal versucht den script ein wenig anzupassen- leider ohne Erfolg. In der Hilfe werde ich auch nicht Fündig:

Original

''Open Db to replicate
Dim db As New NotesDatabase( "", "" )
If db.OpenByReplicaID( "MeinServer", "85255FA900747B84" ) Then
   Print( db.Title & " was successfully opened" )
Else
   Print( "Unable to open database" )
End If

Set db = session.CurrentDatabase
Set replica = db.CreateReplica( "", "" )

Die Db wird Sauber geöffnet, aber er Legt mir eine Replik meiner MailDb, da er diese als Current db erkennt.
Wie kann ich Notes nun beibringen das er die geöffnete Db (statuszeile) glich lokal anlegen soll?


Mein anpassung die Leider nicht Funktioniert

'Open Db to replicate
   Dim db As New NotesDatabase( "", "" )
   If db.OpenByReplicaID( "MeinServer", "C1256A3B002417C5" ) Then
      Print( db.Title & " was successfully opened" )   
      Set db = session.CurrentDatabase
      Set replica = db.CreateReplica( "", "C1256A3B002417C5" )
   Else
      Print( "Unable to open database" )
   End If
Titel: Re: wieder mal eine script frage
Beitrag von: Glombi am 06.05.05 - 08:44:41
Sieh Dir mal die Hilfe an:

Set notesDatabaseReplica = notesDatabase.CreateReplica( newServer$, newDbFile$ )

Parameters
newServer$
String. The name of the server where the replica will reside. Use an empty string ("") to create a replica on the current computer.
newDbFile$
String. The file name of the replica.

also musst Du den Pfad und nicht die Replik-ID angeben.

Andreas
Titel: Re: wieder mal eine script frage
Beitrag von: Semeaphoros am 06.05.05 - 09:05:16
Da ist aber vor allem was anderes falsch.

Die Zeile

set db=session.currentdatabase


muss weg, da passiert der Fehler.

Das andere ist richtig, beim CreateReplica muss ein Filename angegeben werden, also zum Bleistift

Set replica = db.CreateReplica( "", db.filepath )

Titel: Re: wieder mal eine script frage
Beitrag von: sky-diver am 06.05.05 - 11:19:29
Wow danke, alles Funzt nun so wie ich es will ...fast alles ..
Nur noch eine klitze kleine Frage.

Wenn die DB schon vorhanden ist, kommt eine Fehlermeludung.

Fehler 4005 Db (Datenbankname) Existiert schon.

Woher kommt diese Zeile ist das Automatisch von Notes Generiert ? Denn im Erro handler kann ich sie nicht finden.

Aber nochmals 1000 mal Dank für Eure Geduld.

Titel: Re: wieder mal eine script frage
Beitrag von: Semeaphoros am 06.05.05 - 12:21:18
Aendere mal den Errorhändler wie folgt:


ErrorHandler:
Select Case Err
Case 4042: 'Database could not be deleted
Msgbox "Datenbank konnte nicht gelöscht werden, ein möglicher Grund: Ist gerade von einem anderen User geöffnet",48
Resume goOut
Case 4005:
  Msbbox "Datenbank wurde bereits angelegt",48
  Resume GoOut
Case Else:
Msgbox "Fehler " & Err & " - " & Error$ & Chr(10) _
& "Fehler aufgetreten in Code-Zeile " & Erl, 48, "Laufzeitfehler"
Resume GoOut
End Select



.... und wenn Du die Meldung unterdrücken willst, dann nimmst Du die Zeile

  Msbbox "Datenbank wurde bereits angelegt",48


einfach raus.
Titel: Re: wieder mal eine script frage
Beitrag von: koehlerbv am 09.05.05 - 22:31:20
Abgesehen davon kommt die von sky-dingens zuletzt genannte Fehlermeldung doch aus dem ErrorHandler:
Code
Msgbox "Fehler " & Err & " - " & Error$

Jeder nicht vorher explizit abgefangener Fehler landet in eben dieser o.g. Code-Zeile mit zu beobachtender Wirkung.

Bernhard