|
- ' migrate_isbusiness_to_households.vbs
- ' Moves IsBusiness from HouseholderNames to Households.
- '
- ' Usage:
- ' cscript //nologo scripts\migrate_isbusiness_to_households.vbs "C:\path\to\myAccessFile.accdb"
- '
- ' What it does:
- ' 1) Adds Households.IsBusiness (SMALLINT) if missing
- ' 2) Copies data: sets Households.IsBusiness=1 if any related HouseholderNames.IsBusiness<>0
- ' 3) Sets NULLs to 0
- ' 4) Drops HouseholderNames.IsBusiness if present
- '
- Option Explicit
-
- Dim dbPath
- If WScript.Arguments.Count < 1 Then
- WScript.Echo "ERROR: missing db path."
- WScript.Echo "Usage: cscript //nologo scripts\migrate_isbusiness_to_households.vbs ""C:\path\to\db.accdb"""
- WScript.Quit 1
- End If
-
- dbPath = WScript.Arguments(0)
-
- Dim conn
- Set conn = CreateObject("ADODB.Connection")
- conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Persist Security Info=False;"
-
- On Error Resume Next
-
- If Not ColumnExists(conn, "Households", "IsBusiness") Then
- Exec conn, "ALTER TABLE [Households] ADD COLUMN [IsBusiness] SMALLINT"
- If Err.Number <> 0 Then
- WScript.Echo "ERROR adding Households.IsBusiness: " & Err.Description
- WScript.Quit 1
- End If
- WScript.Echo "Added Households.IsBusiness"
- Else
- WScript.Echo "Households.IsBusiness already exists"
- End If
-
- ' Copy data (only if the old column exists)
- If ColumnExists(conn, "HouseholderNames", "IsBusiness") Then
- ' Normalize all existing households first so the column is never left NULL.
- Exec conn, "UPDATE [Households] SET [IsBusiness]=0"
- If Err.Number <> 0 Then
- WScript.Echo "ERROR initializing Households.IsBusiness: " & Err.Description
- WScript.Quit 1
- End If
-
- ' Promote households to business when any related name was previously marked as a business.
- Exec conn, "UPDATE [Households] SET [IsBusiness]=1 WHERE [Id] IN (SELECT [HouseholdId] FROM [HouseholderNames] WHERE [IsBusiness]<>0)"
- If Err.Number <> 0 Then
- WScript.Echo "ERROR copying IsBusiness to Households: " & Err.Description
- WScript.Quit 1
- End If
- WScript.Echo "Copied IsBusiness values to Households"
-
- Exec conn, "ALTER TABLE [HouseholderNames] DROP COLUMN [IsBusiness]"
- If Err.Number <> 0 Then
- WScript.Echo "ERROR dropping HouseholderNames.IsBusiness: " & Err.Description
- WScript.Quit 1
- End If
- WScript.Echo "Dropped HouseholderNames.IsBusiness"
- Else
- WScript.Echo "HouseholderNames.IsBusiness does not exist; nothing to drop"
- End If
-
- conn.Close
- Set conn = Nothing
- WScript.Echo "Done."
-
- ' --- helpers ---
- Sub Exec(c, sql)
- Err.Clear
- c.Execute sql
- End Sub
-
- Function ColumnExists(c, tableName, colName)
- Dim rs
- ColumnExists = False
- Err.Clear
- Set rs = c.OpenSchema(4, Array(Empty, Empty, tableName, colName)) ' adSchemaColumns=4
- If Err.Number <> 0 Then
- Err.Clear
- Exit Function
- End If
- If Not rs.EOF Then ColumnExists = True
- rs.Close
- Set rs = Nothing
- End Function
|