Option Compare Database
Option Explicit
Const tbl As String = "TOA_Report_History"
Const newT As String = tbl & "_copy"
Private Sub Command0_Click()
Transpose True
End Sub
Private Sub Transpose(mknewtable As Boolean)
If Not DeleteTable Then Exit Sub
'If mknewtable Then
GenTbl
'Else
' CurrentDb.Execute "delete * from [" & newT & "]"
'End If
AddfieldnamesAsValues
AddRecs
AddVals
RenameFields
End Sub
Private Function DeleteTable() As Boolean
On Error Resume Next
DoCmd.DeleteObject acTable, newT
Select Case Err.Number
Case 0, 7874: DeleteTable = True
Case 2008: MsgBox "Close table '" & newT & "' and try again."
Case Else: MsgBox Err.Number & vbNewLine & Err.Description
End Select
End Function
Private Sub AddfieldnamesAsValues()
Dim f As DAO.Field
With CurrentDb.OpenRecordset(newT)
.addnew
For Each f In .Fields
f.Value = f.Name
Next
.Update
End With
End Sub
Private Sub RenameFields()
Dim db As DAO.Database, td As DAO.TableDef, f As DAO.Field, i
Set db = CurrentDb
Set td = db.TableDefs(newT)
With td
.Fields(0).Name = "Info"
For i = 1 To .Fields.Count - 1
.Fields(i).Name = "Record" & i
Next
End With
End Sub
Private Sub AddVals()
Dim i As Integer, sql As String
With CurrentDb.OpenRecordset(tbl)
Do Until .EOF
For i = 1 To .Fields.Count - 1
sql = "update " & newT & " set [" & .Fields(0).Value & "]='" & .Fields(i).Value & "' where [" & .Fields(0).Name & "]='" & .Fields(i).Name & "'"
CurrentDb.Execute sql
Next
.MoveNext
Loop
.Close
End With
End Sub
Private Sub AddRecs()
Dim i As Integer, sql As String, s As String
With CurrentDb.OpenRecordset(tbl)
s = Replace(String(CurrentDb.OpenRecordset(newT).Fields.Count - 1, ","), ",", ",null")
For i = 1 To .Fields.Count - 1
sql = "insert into " & newT & " values ('" & .Fields(i).Name & "'" & s & ")"
CurrentDb.Execute sql
Next
.Close
End With
End Sub
Private Function GenTbl() As Integer
On Error GoTo errGenTbl
Dim hdr As String
RefreshDatabaseWindow
' If Not DeleteTable Then Exit Function
With CurrentDb.OpenRecordset(tbl)
hdr = .Fields(0).Name
End With
With CurrentDb
.Execute "create table " & newT & " ([" & hdr & "] text(50))"
With .OpenRecordset(tbl)
Do Until .EOF
CurrentDb.Execute "alter table " & newT & " add [" & .Fields(0).Value & "] text 50"
.MoveNext
Loop
GenTbl = .RecordCount
.Close
End With
End With
RefreshDatabaseWindow
errGenTbl:
End Function