# Classic ASP/VBScript Development Guide ## Overview **shopdb** is a Classic ASP application using VBScript running on IIS Express in Windows 11 VM. - **Language:** VBScript (Classic ASP) - **Server:** IIS Express (Windows 11 VM) - **Database:** MySQL 5.6 (Docker container on Linux host) - **Development:** Edit files on Linux with Claude Code, test on Windows/IIS ## Project Setup ### Location - **Linux:** `~/projects/windows/shopdb/` - **Windows:** `Z:\shopdb\` - **IIS Config:** Points to `Z:\shopdb\` ### Database Connection ```vbscript <% ' Connection string for shopdb Dim conn Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};" & _ "Server=192.168.122.1;" & _ "Port=3306;" & _ "Database=shopdb;" & _ "User=570005354;" & _ "Password=570005354;" & _ "Option=3;" conn.Open ' Use the connection ' ... your code here ... conn.Close Set conn = Nothing %> ``` ## Database Credentials **Production Database: shopdb** - **Host (from Windows):** 192.168.122.1 - **Port:** 3306 - **Database:** shopdb - **User:** 570005354 - **Password:** 570005354 ## Prerequisites in Windows VM ### Required Software 1. **MySQL ODBC 8.0 Driver** - Download: https://dev.mysql.com/downloads/connector/odbc/ - Install 64-bit version - Used by Classic ASP to connect to MySQL 2. **IIS Express** - Already installed - Location: `C:\Program Files\IIS Express\` ### Windows Configuration - **Z: Drive** mapped to `\\192.168.122.1\windows-projects` - **Firewall** allows port 8080 inbound - **URL ACL** configured: `netsh http add urlacl url=http://*:8080/ user="Everyone"` ### Auto-Start IIS Express on Windows Boot To automatically start IIS Express when Windows boots: 1. **In Windows, open Task Scheduler** (search for "Task Scheduler") 2. **Create a new task:** - Click "Create Task..." (not "Create Basic Task") - **General tab:** - Name: `Start IIS Express - shopdb` - Description: `Auto-start IIS Express for shopdb site` - Check "Run with highest privileges" - Check "Run whether user is logged on or not" - Configure for: Windows 10/11 - **Triggers tab:** - Click "New..." - Begin the task: "At startup" - Delay task for: 30 seconds (gives network time to connect) - Click OK - **Actions tab:** - Click "New..." - Action: "Start a program" - Program/script: `wscript.exe` - Add arguments: `Z:\start-iis-shopdb.vbs` - Click OK - **Conditions tab:** - Uncheck "Start the task only if the computer is on AC power" - Check "Wake the computer to run this task" (optional) - **Settings tab:** - Check "Allow task to be run on demand" - Check "Run task as soon as possible after a scheduled start is missed" - If the task is already running: "Do not start a new instance" - Click OK to save 3. **Test the task:** - Right-click the task in Task Scheduler - Click "Run" - Check http://localhost:8080 in browser - Should see shopdb running 4. **Verify on next boot:** - Restart Windows VM - Wait 30 seconds after login - Check http://192.168.122.151:8080 from Linux - IIS Express should be running automatically **Files Created:** - `Z:\start-iis-shopdb.bat` - Batch file to start IIS Express - `Z:\start-iis-shopdb.vbs` - VBScript wrapper (runs silently, no console window) **Manual Start (if needed):** ```powershell # In Windows, double-click: Z:\start-iis-shopdb.vbs # Or run from PowerShell: wscript.exe Z:\start-iis-shopdb.vbs ``` ## Development Workflow ### 1. Edit Code on Linux ```bash # Navigate to project cd ~/projects/windows/shopdb # Start Claude Code claude # Ask Claude to help with your ASP/VBScript code # Example: "Create a VBScript function to query the database and display results" ``` ### 2. Files Auto-Sync to Windows - Any changes saved on Linux automatically appear in Windows at `Z:\shopdb\` - No manual copying needed thanks to Samba share ### 3. Test on IIS Express **In Windows PowerShell (as Administrator or with URL ACL):** ```powershell cd "C:\Program Files\IIS Express" .\iisexpress.exe /site:shopdb ``` **Access from Linux:** - Browser: http://192.168.122.151:8080 **Access from Windows:** - Browser: http://localhost:8080 ### 4. Iterate - Edit on Linux with Claude - Refresh browser to see changes - Debug and repeat ## Common VBScript/ASP Patterns ### Database Query (SELECT) ```vbscript <% Dim conn, rs, sql Set conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.Recordset") conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};Server=192.168.122.1;Port=3306;Database=shopdb;User=570005354;Password=570005354;" conn.Open sql = "SELECT * FROM products WHERE category = ?" rs.Open sql, conn Do While Not rs.EOF Response.Write rs("product_name") & "
" rs.MoveNext Loop rs.Close conn.Close Set rs = Nothing Set conn = Nothing %> ``` ### Database Insert ```vbscript <% Dim conn, sql Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};Server=192.168.122.1;Port=3306;Database=shopdb;User=570005354;Password=570005354;" conn.Open sql = "INSERT INTO orders (customer_id, order_date, total) VALUES (1, NOW(), 99.99)" conn.Execute sql conn.Close Set conn = Nothing Response.Write "Order inserted successfully" %> ``` ### Database Update ```vbscript <% Dim conn, sql, orderId orderId = Request.Form("order_id") Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};Server=192.168.122.1;Port=3306;Database=shopdb;User=570005354;Password=570005354;" conn.Open sql = "UPDATE orders SET status = 'completed' WHERE order_id = " & orderId conn.Execute sql conn.Close Set conn = Nothing Response.Redirect "orders.asp" %> ``` ### Form Handling ```vbscript <% If Request.ServerVariables("REQUEST_METHOD") = "POST" Then ' Handle form submission Dim name, email name = Request.Form("name") email = Request.Form("email") ' Validate and process ' ... Response.Write "Form submitted successfully" Else ' Display form %>
<% End If %> ``` ### Include Files ```vbscript <% ' Your page content here %> ``` ### Session Management ```vbscript <% ' Set session variable Session("user_id") = 123 Session("username") = "admin" ' Get session variable If Session("user_id") <> "" Then Response.Write "Welcome, " & Session("username") Else Response.Redirect "login.asp" End If ' Clear session Session.Abandon %> ``` ## Connection File Template **Create: `~/projects/windows/shopdb/includes/db_connection.asp`** ```vbscript <% ' Database connection configuration Function GetConnection() Dim conn Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};" & _ "Server=192.168.122.1;" & _ "Port=3306;" & _ "Database=shopdb;" & _ "User=570005354;" & _ "Password=570005354;" & _ "Option=3;" On Error Resume Next conn.Open If Err.Number <> 0 Then Response.Write "Database connection failed: " & Err.Description Response.End End If Set GetConnection = conn End Function %> ``` **Usage in other files:** ```vbscript <% Dim conn Set conn = GetConnection() ' Use the connection ' ... conn.Close Set conn = Nothing %> ``` ## Testing Database Connection **Create: `~/projects/windows/shopdb/test_connection.asp`** ```vbscript <%@ Language=VBScript %> Database Connection Test

MySQL Connection Test

<% On Error Resume Next Dim conn, rs Set conn = Server.CreateObject("ADODB.Connection") Response.Write "

Attempting to connect to shopdb...

" conn.ConnectionString = "Driver={MySQL ODBC 8.0 Driver};" & _ "Server=192.168.122.1;" & _ "Port=3306;" & _ "Database=shopdb;" & _ "User=570005354;" & _ "Password=570005354;" conn.Open If Err.Number <> 0 Then Response.Write "

Connection Failed!

" Response.Write "

Error: " & Err.Description & "

" Else Response.Write "

Connection Successful!

" ' Test query Set rs = conn.Execute("SELECT VERSION() as version, DATABASE() as db") Response.Write "

MySQL Version: " & rs("version") & "

" Response.Write "

Current Database: " & rs("db") & "

" rs.Close Set rs = Nothing conn.Close End If Set conn = Nothing %> ``` ## Troubleshooting ### Can't Connect to MySQL **Check from Windows PowerShell:** ```powershell # Test network connectivity Test-NetConnection -ComputerName 192.168.122.1 -Port 3306 # Should show: TcpTestSucceeded : True ``` **Check MySQL is running on Linux:** ```bash docker ps | grep mysql docker compose logs mysql ``` ### ODBC Driver Not Found **Error:** `[Microsoft][ODBC Driver Manager] Data source name not found` **Solution:** 1. Install MySQL ODBC 8.0 Driver in Windows 2. Verify in Control Panel → Administrative Tools → ODBC Data Sources 3. Check driver name matches in connection string ### Permission Denied **Error:** Access denied for user '570005354' **Solution on Linux:** ```bash # Re-grant permissions docker exec -it dev-mysql mysql -u root -prootpassword -e " GRANT ALL PRIVILEGES ON shopdb.* TO '570005354'@'%' IDENTIFIED BY '570005354'; FLUSH PRIVILEGES; " ``` ### IIS Express Won't Start **Check:** 1. Another process using port 8080? Check Task Manager 2. URL ACL configured? Run as Admin or check: `netsh http show urlacl` 3. applicationhost.config correct? Check binding: `*:8080:*` ### Changes Not Appearing **Solutions:** 1. Hard refresh browser: `Ctrl + F5` 2. Clear browser cache 3. Check file actually saved on Linux: `ls -la ~/projects/windows/shopdb/` 4. Check Samba: `sudo systemctl status smbd` ## MySQL 5.6 Limitations Our MySQL version (5.6) doesn't support: - JSON data type (use TEXT and parse) - `CREATE USER IF NOT EXISTS` syntax - Some newer functions **User management in MySQL 5.6:** ```sql -- Create/update user GRANT ALL PRIVILEGES ON shopdb.* TO 'username'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` ## Security Notes **Development Environment Only** These credentials are for DEVELOPMENT: - User: 570005354 - Password: 570005354 **For Production:** - Use strong, unique passwords - Implement proper authentication - Use SSL/TLS connections - Restrict database access by IP - Never commit credentials to Git ## Quick Commands Reference ### Start Development ```bash # On Linux ~/start-dev-env.sh # In Windows cd "C:\Program Files\IIS Express" .\iisexpress.exe /site:shopdb # Open browser to: http://192.168.122.151:8080 ``` ### Edit Code ```bash # On Linux cd ~/projects/windows/shopdb claude ``` ### Check Database ```bash # On Linux docker exec -it dev-mysql mysql -u 570005354 -p570005354 shopdb ``` ### Backup Database ```bash # On Linux docker exec dev-mysql mysqldump -u 570005354 -p570005354 shopdb > ~/backups/shopdb-$(date +%Y%m%d).sql ``` ### Restore Database ```bash # On Linux docker exec -i dev-mysql mysql -u 570005354 -p570005354 shopdb < backup.sql ``` ## Using Claude Code for ASP/VBScript **Good Prompts:** ``` "Create a VBScript function to display all products from the database in an HTML table" "Add error handling to this database query in Classic ASP" "Create a login form in Classic ASP that checks credentials against the users table" "Write VBScript code to handle a POST form submission and insert into database" "Create a pagination system for displaying database results in Classic ASP" ``` **Be Specific:** ``` "I'm using Classic ASP with VBScript and MySQL 5.6. Create a page that..." ``` ### Starting a Claude Code Session When beginning work, tell Claude to "start up" or "let's start the dev environment". Claude will automatically: 1. Review all .md documentation files 2. Run `~/start-dev-env.sh` to start Docker containers and Windows VM 3. Check service status to ensure everything is running 4. Load the todo list to continue from where you left off ### Closing Out a Claude Code Session When you're done working, tell Claude to "close out" or "we're closing out for now". Claude will automatically: 1. Update and consolidate the todo list with completed work 2. Mark completed phases/tasks 3. Run `~/stop-dev-env.sh` to properly shutdown the environment 4. Update relevant documentation This ensures your development environment is properly shut down and all progress is tracked. ## Project Structure Example ``` shopdb/ ├── index.asp # Homepage ├── test_connection.asp # Database test page ├── includes/ │ ├── db_connection.asp # Database connection function │ ├── header.asp # Common header │ └── footer.asp # Common footer ├── admin/ │ ├── login.asp # Admin login │ └── dashboard.asp # Admin dashboard ├── css/ │ └── styles.css # Stylesheets ├── js/ │ └── scripts.js # JavaScript files └── images/ └── logo.png # Images ``` ## Additional Notes - **No PHP on Windows** - PHP development is done via Docker/Nginx on Linux (port 8080) - **ASP on Windows only** - Classic ASP runs on IIS Express in Windows VM - **Database shared** - Both PHP (Docker) and ASP (Windows) can access the same MySQL - **File editing** - Always edit on Linux with Claude Code, files sync automatically to Windows --- **Technology Stack Summary:** - Classic ASP with VBScript - IIS Express on Windows 11 - MySQL 5.6 (Docker/Linux) - Samba for file sharing - Claude Code for development assistance