Thanks for the complete and extensive reply.
I have tried to run the sql statements however it keeps failing on the
contstraints.
The parts ON DELETE CASCADE and ON UPDATE CASCADE will not be accepted.
(I do know the functions as within a Oracle DB) however Access2003 is not
accepting it.
As I mentioned, the syntax is for ANSI-92 Query Mode; I would guess
your mdb is in ANSI-89 Query ('Traditional') Mode. For details, see
the Help e.g.
http://office.microsoft.com/en-gb/access/HP030704831033.aspx
(I recommend you click the 'Show All' link).
Perhaps the easiest way of using ANSI-92 Query Mode is to use an ADO
connection. Here's some VBA which creates a new mdb in your Temp
folder:
Sub Diskus()
Kill Environ$("temp") & "\DropMe.mdb"
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & _
Environ$("temp") & "\DropMe.mdb"
With .ActiveConnection
Dim sql As String
sql = _
"Create TABLE Storage" & vbCr & "(" & vbCr & " StorageDesc" & _
" VARCHAR(15) NOT NULL UNIQUE" & vbCr & ")" & vbCr & ";"
..Execute sql
sql = _
"Create TABLE Disc" & vbCr & "(" & vbCr & " DiscName" & _
" VARCHAR(15) NOT NULL UNIQUE" & vbCr & ")" & vbCr & ";"
..Execute sql
sql = _
"Create TABLE DiskStore" & vbCr & "(" & vbCr & " DiscName" & _
" VARCHAR(15) NOT NULL UNIQUE" & vbCr & "" & _
" REFERENCES Disc (DiscName)" & vbCr & "" & _
" ON DELETE CASCADE" & vbCr & " " & _
" ON UPDATE CASCADE," & vbCr & " StorageDesc" & _
" VARCHAR(15) NOT NULL" & vbCr & " REFERENCES" & _
" Storage (StorageDesc)" & vbCr & " ON" & _
" DELETE CASCADE" & vbCr & " ON UPDATE" & _
" CASCADE" & vbCr & ")" & vbCr & ";"
..Execute sql
sql = _
"CREATE TABLE ProgramTypes" & vbCr & "(" & vbCr & " " & _
" Programtype VARCHAR(20) NOT" & _
" NULL UNIQUE" & vbCr & ")" & vbCr & ";"
..Execute sql
sql = _
"CREATE TABLE Programs" & vbCr & "(" & vbCr & " Programname" & _
" VARCHAR(35) NOT NULL UNIQUE," & vbCr & "" & _
" Programtype VARCHAR(15) NOT" & _
" NULL" & vbCr & " REFERENCES ProgramTypes" & _
" (Programtype)" & vbCr & " ON DELETE" & _
" NO ACTION" & vbCr & " ON UPDATE CASCADE" & vbCr & ")" & vbCr &
";"
..Execute sql
sql = _
"CREATE TABLE ProgramDisks" & vbCr & "(" & vbCr & " " & _
" Programname VARCHAR(35) NOT" & _
" NULL UNIQUE," & vbCr & " DiscName VARCHAR(15)" & _
" NOT NULL" & vbCr & " REFERENCES Disc" & _
" (DiscName)" & vbCr & " ON DELETE CASCADE" & vbCr & "" & _
" ON UPDATE CASCADE" & vbCr & ")" & vbCr & ";"
..Execute sql
sql = _
"CREATE VIEW Overview (" & vbCr & " Programname," & _
" Programtype, DiscName," & vbCr & " StorageDesc)" & vbCr & "AS" &
vbCr & "SELECT" & _
" P1.Programname, P1.Programtype," & _
" PD1.DiscName, DS1.StorageDesc" & vbCr & "FROM" & vbCr & "(" & vbCr &
"" & _
" Programs AS P1" & vbCr & " INNER JOIN" & _
" ProgramDisks AS PD1" & vbCr & " ON P1.Programname" & _
" = PD1.Programname" & vbCr & ")" & vbCr & "INNER JOIN" & _
" DiskStore AS DS1" & vbCr & "ON PD1.DiscName" & _
" = DS1.DiscName" & vbCr & ";"
..Execute sql
sql = _
"INSERT INTO Disc (DiscName) VALUES" & _
" ('CD1');"
..Execute sql
sql = _
"INSERT INTO Disc (DiscName) VALUES" & _
" ('CD2');"
..Execute sql
sql = _
"INSERT INTO Storage (StorageDesc)" & _
" VALUES ('Box1');"
..Execute sql
sql = _
"INSERT INTO Storage (StorageDesc)" & _
" VALUES ('Box2');"
..Execute sql
sql = _
"INSERT INTO DiskStore (DiscName," & _
" StorageDesc)" & vbCr & " VALUES ('CD1'," & _
" 'Box1');"
..Execute sql
sql = _
"INSERT INTO DiskStore (DiscName," & _
" StorageDesc)" & vbCr & " VALUES ('CD2'," & _
" 'Box1');"
..Execute sql
sql = _
"INSERT INTO ProgramTypes (Programtype)" & vbCr & "" & _
" VALUES ('Musicprogram');"
..Execute sql
sql = _
"INSERT INTO Programs (Programname," & _
" Programtype)" & vbCr & " VALUES ('Audiograbber'," & _
" 'Musicprogram');"
..Execute sql
sql = _
"INSERT INTO Programs (Programname," & _
" Programtype)" & vbCr & " VALUES ('Winamp'," & _
" 'Musicprogram');"
..Execute sql
sql = _
"INSERT INTO ProgramDisks (Programname," & _
" DiscName)" & vbCr & " VALUES ('Winamp'," & _
" 'CD2');"
..Execute sql
sql = _
"INSERT INTO ProgramDisks (Programname," & _
" DiscName)" & vbCr & " VALUES ('Audiograbber'," & _
" 'CD2');"
..Execute sql
sql = _
"SELECT Programname, Programtype," & _
" DiscName, StorageDesc" & vbCr & "FROM Overview;"
Dim rs
Set rs = .Execute(sql)
MsgBox rs.GetString
End With
Set .ActiveConnection = Nothing
End With
End Sub