'-----------------
' Initialize
'-----------------
mb_TableExists = False
mb_ExistsStoredProcLastName = False
mb_ExistsStoredProcHireDate = False
mb_ExistsStoredProcSalary = False
mb_ExitSub = False
'-----------------
' Connection Properties
' http://www.connectionstrings.com/access-2007
' http://www.connectionstrings.com/access
'-----------------
If CDbl(Application.Version) >= 12 Then
ms_ProviderProperty = "Microsoft.ACE.OLEDB.12.0"
ms_Provider = "Provider=Microsoft.ACE.OLEDB.12.0;" ' Not Used
ms_AccessFileName = "MyDB.accdb" '<------- Change
Else
ms_ProviderProperty = "Microsoft.Jet.OLEDB.4.0"
ms_Provider = "Provider=Microsoft.Jet.OLEDB.4.0;" ' Not Used
ms_AccessFileName = "MyDB.mdb" '<------- Change
End If
'-----------------
' Connection Properties
'-----------------
ms_DataSource = ThisWorkbook.Path & "\" & ms_AccessFileName
ms_ConnString = ms_Provider & ms_DataSource 'Not Used
'-----------------
' File Check
'-----------------
ms_Tmp = Dir(ms_DataSource, vbDirectory)
If Len(ms_Tmp) < 1 Then
MsgBox "Can't find file ... terminating.", vbCritical, "Public Sub Main()"
Exit Sub
End If
'-----------------
' Create Table
'-----------------
' http://allenbrowne.com/func-DDL.html
'-----------------
ms_ct = "Create Table " & CON_TARGET_TABLE
ms_ct = ms_ct & "("
ms_ct = ms_ct & "[LastName] Text(50),"
ms_ct = ms_ct & "[FirstName] Text(50),"
ms_ct = ms_ct & "[HireDate] Date,"
ms_ct = ms_ct & "[Salary] Decimal(6), "
ms_ct = ms_ct & "[Bonus] Currency, "
ms_ct = ms_ct & "[TravelMiles] Double, "
ms_ct = ms_ct & "[ActiveEmp] YesNo "
ms_ct = ms_ct & ")"
'-----------------
' Drop Table SQL
'-----------------
ms_SQLDropTable = "Drop table " & CON_TARGET_TABLE
'-----------------
' Make Connection
'-----------------
Set mo_cn = Nothing
Set mo_cn = New ADODB.Connection
With mo_cn
.Provider = ms_ProviderProperty
.ConnectionString = ms_DataSource
.Open
If 1 = 2 Then
.Close
End If
End With
'-----------------
' Get List of Tables
' http://support.microsoft.com/kb/186246
'-----------------
Set mo_rs = Nothing
Set mo_rs = New ADODB.Recordset
Set mo_rs = mo_cn.OpenSchema(adSchemaTables)
While Not mo_rs.EOF
'Debug.Print mo_rs!TABLE_NAME
If UCase(mo_rs!TABLE_NAME) = UCase(CON_TARGET_TABLE) Then
'-----------------
' Sets up Kill Table and Exit Sub w/o completing Sub Main
'-----------------
mb_TableExists = True
mb_ExitSub = True
End If
mo_rs.MoveNext
Wend
'-----------------
' Get List of Views (Stored Procedures)
' http://support.microsoft.com/kb/186246
'-----------------
Set mo_rs = Nothing
Set mo_rs = New ADODB.Recordset
Set mo_rs = mo_cn.OpenSchema(adSchemaProcedures)
While Not mo_rs.EOF
'Debug.Print mo_rs!PROCEDURE_NAME
If UCase(mo_rs!PROCEDURE_NAME) = UCase(CON_STORED_PROC_LASTNAME) Then
'Stored Proc created when this var is TRUE
mb_ExistsStoredProcLastName = True
End If
If UCase(mo_rs!PROCEDURE_NAME) = UCase(CON_STORED_PROC_HIREDATE) Then
'Stored Proc created when this var is TRUE
mb_ExistsStoredProcHireDate = True
End If
If UCase(mo_rs!PROCEDURE_NAME) = UCase(CON_STORED_PROC_SALARY) Then
'Stored Proc created when this var is TRUE
mb_ExistsStoredProcSalary = True
End If
mo_rs.MoveNext
Wend
'-----------------
' Decision
' Drop Table and Exit -or- Continue
'-----------------
Select Case mb_TableExists
Case True:
ms_ActiveCommand = ms_SQLDropTable ' Kill Table and EXIT
mb_InsertRecords = False
Case False:
ms_ActiveCommand = ms_ct 'Create Testtable and continue
mb_InsertRecords = True
End Select
'-----------------
' Command Object
' ms_ActiveCommand (See above)
'-----------------
Set mo_cmd = Nothing
Set mo_cmd = New ADODB.Command
With mo_cmd
.ActiveConnection = mo_cn
.CommandText = ms_ActiveCommand
.Execute
End With
'-----------------
' Bad way to Exit nevertheless ....
'-----------------
If mb_ExitSub Then
Set mo_rs = Nothing
Set mo_cn = Nothing
Set mo_cmd = Nothing
Exit Sub
End If
'-----------------
' Values for 10 Records
'-----------------
mlng_RecCNT = 10
If mb_InsertRecords Then
mv_LastName = Array("Brown", "Brown", "Brown", "Smith", "Manning", "Manning", "Geithner", "Thomas", "Edwards", "Benton")
mv_FirstName = Array("Fred", "John", "Alice", "Alice", "Eli", "Peyton", "Tim", "Frank", "Tom", "Susan")
mv_HireDate = Array("1/1/2001", "2/1/2002", "3/1/2003", "4/1/2004", "5/1/2005", "6/1/2006", "7/1/2007", "8/1/2008", "9/1/2009", "10/1/2010")
mv_Salary = Array(15000, 25000, 35000, 45000, 55000, 65000, 75000, 85000, 95000, 100000)
mv_Bonus = Array(150.1, 250.2, 350.3, 450.4, 550.5, 650.6, 750.7, 850.8, 950.9, 1000.25)
mv_Miles = Array(1500, 2500, 3500, 4500, 5500, 6500, 7500, 8500, 9500, 10000)
mv_Active = Array(True, True, True, True, False, True, True, False, True, True)
End If
'-----------------
' Insert Records
'-----------------
' Part 1 - Field Names
'-----------------
ms_fld = vbNullString
If mb_InsertRecords Then
ms_fld = "INSERT INTO [TestTable] "
ms_fld = ms_fld & "("
ms_fld = ms_fld & " [LastName],"
ms_fld = ms_fld & " [FirstName],"
ms_fld = ms_fld & " [HireDate],"
ms_fld = ms_fld & " [Salary],"
ms_fld = ms_fld & " [Bonus],"
ms_fld = ms_fld & " [TravelMiles],"
ms_fld = ms_fld & " [ActiveEmp] "
ms_fld = ms_fld & ")"
ms_fld = ms_fld & " VALUES "
End If
'-----------------
' Insert Records
'-----------------
' Part 2 - Field Values
'-----------------
For lng = 0 To mlng_RecCNT - 1
ms_v = vbNullString
ms_v = ms_v & "( "
ms_v = ms_v & "'" & mv_LastName(lng) & "'" & ", "
ms_v = ms_v & "'" & mv_FirstName(lng) & "'" & ", "
ms_v = ms_v & "#" & mv_HireDate(lng) & "#" & ", "
ms_v = ms_v & mv_Salary(lng) & ", "
ms_v = ms_v & mv_Bonus(lng) & ", "
ms_v = ms_v & mv_Miles(lng) & ", "
ms_v = ms_v & mv_Active(lng)
ms_v = ms_v & " );"
'-----------------
' Insert String
'-----------------
ms_ActiveCommand = vbNullString
ms_ActiveCommand = ms_fld & ms_v
'-----------------
' Command Insert
'-----------------
With mo_cmd
.ActiveConnection = mo_cn
.CommandText = ms_ActiveCommand
.Execute
End With
Next
Bookmarks