What do you do when you want to rename a notes database filename or move it to a different folder?
No doubt that you create a new replica then delete the old database, or access the server and then rename or move the database to the new location.
Well, here is an undocumented API function that is available in R4 & R5, that will rename or move a notes database, either locally or on a server.
Function Name: NSFDbRename Library: nnotes.dll Parameters: 1. Current database filename 2. New database filename
If you are renaming a database on the local machine, only specify the database folder and filename for both parameters, relative to the Notes data folder.
If you are renaming a database on a server, for both parameters, specify the abbreviated or canonical server name, followed by the string "!!", followed by the database filename as above.
The example below in the script code will rename a database filename from "mailoldmailfile.nsf" to "mailnewmailfile.nsf" on the server "My Server/My Org".
The OSLoadString API function, uses the string resource compiled in Lotus Notes to convert an error number into a text string, so if an error occurs you can see the text string with the error number.
#### DECLARATIONS #### Declare Function W32_NSFDbRename Lib "nnotes.dll" Alias "NSFDbRename" (Byval OldDatabase As String, Byval NewDatabase As String) As Integer Declare Function W32_OSLoadString Lib "nnotes.dll" Alias "OSLoadString" (Byval hModule As Long, Byval StringCode As Integer, Byval retBuffer As String, Byval BufferLength As Integer) As Integer #### SCRIPT CODE #### Sub Initialize Dim iret As Integer Dim szError As String * 256 Dim ErrorString As String Dim StrLen As Integer Dim nnServer As NotesName Dim oldDatabase As String Dim newDatabase As String Set nnServer = New NotesName("My Server/My Org") oldDatabase = "mailoldmailfile.nsf" newDatabase = "mailnewmailfile.nsf" 'if a server is not specified, then only parse the database information to the API function, not the server 'if a server is specified, then parse both the server and database to the API function If nnServer.Canonical = "" Then iret = W32_NSFDbRename(oldDatabase, newDatabase) Else iret = W32_NSFDbRename(nnServer.Canonical & "!!" & oldDatabase, nnServer.Canonical & "!!" & newDatabase) End If 'If an error occurs, then convert and display the error number and error message If iret <> 0 Then ErrorString = "" szError = String$(256, 0) StrLen = W32_OSLoadString(0, iret, szError, 255) If Strlen <> 0 Then ErrorString = Left$(szError, StrLen) Msgbox "Error " & iret & " (" & ErrorString & ")",,"Lotus Notes Error" End If End Sub