'======================================================================================================================= ' CREATE DATABASE (Standalone VBScript, ADOX) '======================================================================================================================= ' Creates a new, empty Access (.accdb) database using ADOX. ' ' Usage: ' cscript //nologo scripts\createDatabase.vbs [path] [/force] ' ' Defaults to db\webdata.accdb under the project root. Refuses to overwrite an existing file unless /force is given. ' Requires the Microsoft Access Database Engine (ACE OLEDB 12.0 or 16.0) matching the bitness of cscript.exe. ' Option Explicit Dim fso, scriptDir, projectRoot, dbPath, force, i, arg Dim providers, p, cat, created, lastErr Set fso = CreateObject("Scripting.FileSystemObject") scriptDir = fso.GetParentFolderName(WScript.ScriptFullName) projectRoot = fso.GetAbsolutePathName(scriptDir & "\..") dbPath = projectRoot & "\db\webdata.accdb" force = False For i = 0 To WScript.Arguments.Count - 1 arg = WScript.Arguments(i) If LCase(arg) = "/force" Then force = True Else dbPath = fso.GetAbsolutePathName(arg) End If Next If fso.FileExists(dbPath) Then If Not force Then WScript.Echo "Error: " & dbPath & " already exists. Use /force to overwrite." WScript.Quit 1 End If fso.DeleteFile dbPath, True End If If Not fso.FolderExists(fso.GetParentFolderName(dbPath)) Then fso.CreateFolder fso.GetParentFolderName(dbPath) End If providers = Array("Microsoft.ACE.OLEDB.16.0", "Microsoft.ACE.OLEDB.12.0") created = False lastErr = "" For Each p In providers On Error Resume Next Set cat = CreateObject("ADOX.Catalog") cat.Create "Provider=" & p & ";Data Source=" & dbPath & ";" If Err.Number = 0 Then created = True Else lastErr = p & ": " & Err.Description End If Err.Clear On Error GoTo 0 Set cat = Nothing If created Then WScript.Echo "Created " & dbPath & " using " & p Exit For End If Next If Not created Then WScript.Echo "Error: could not create database. " & lastErr WScript.Quit 1 End If