codice:
<%
const nonIndicizzato = 0
const duplicatiAmmessi = 1
const duplicatiNonAmmessi = 2
const adRICascade = 1
const adKeyForeign = 2
Dim db' As DAO.DBEngine
Dim adodbConn' As ADODB.Connection
Dim adoxConn' As ADOX.Catalog
Sub Entrata()
response.write("<center>CREA</center>")
End Sub
Sub CreateNewMDB(FileName)
Set db = CreateObject("DAO.DBEngine.36")
db.CreateDatabase FileName, ";LANGID=0x0409;CP=1252;COUNTRY=0", 64
Set adodbConn = CreateObject("ADODB.Connection")
adodbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & FileName
Set adoxConn = CreateObject("ADOX.Catalog")
adoxConn.ActiveConnection = adodbConn
'campiTabella1(0) = Array(NomeCampo, TipoCampo, SizeCampo, Chiave, Contatore, Indicizzato)
Dim campitabella1(2)
campitabella1(0) = Array("ID_GIRONI", adInteger, 3, False, True, duplicatiNonAmmessi)
campitabella1(1) = Array("D_GIRONI", adVarWChar, 50, True, False, duplicatiNonAmmessi)
campitabella1(2) = Array("PROSSIMO", adBoolean, 11, False, False, nonIndicizzato)
Call CreaTabella("GIRONI", campitabella1)
'campiTabella1(0) = Array(NomeCampo, TipoCampo, SizeCampo, Chiave, Contatore, Indicizzato)
Dim campitabella2(3)
campitabella2(0) = Array("ID_GIORNATE", adInteger, 3, False, True, duplicatiNonAmmessi)
campitabella2(1) = Array("ID_GIRONI", adInteger, 3, True, False, duplicatiAmmessi)
campitabella2(2) = Array("D_GIORNATE", adVarWChar, 50, True, False, duplicatiAmmessi)
campitabella2(3) = Array("PROSSIMA", adBoolean, 11, False, False, nonIndicizzato)
Call CreaTabella("GIORNATE", campitabella2)
CreaRelazione "GIRONI", "ID_GIRONI", "GIORNATE", "ID_GIRONI"
Set adoxConn = Nothing
adodbConn.Close
Set adodbConn = Nothing
Set db = Nothing
End Sub
Sub CreaTabella(nomeTabella, campiTabella)
Set objAdoxTable = CreateObject("ADOX.Table") 'Server.CreateObject("ADOX.Table")
' il nome della tabella...
objAdoxTable.Name = nomeTabella
For Each campo In campiTabella
If campo(4) Then
' inseriamo il campo Contatore...
Set objAdoxColumn = CreateObject("ADOX.Column") 'Server.CreateObject("ADOX.Column")
Set objAdoxColumn.ParentCatalog = adoxConn
With objAdoxColumn
.Type = adInteger
.Name = campo(0)
.Properties("Autoincrement") = True
End With
' eseguiamo la creazione del campo Contatore...
objAdoxTable.Columns.Append objAdoxColumn
Set objAdoxColumn = Nothing
Else
objAdoxTable.Columns.Append campo(0), campo(1), campo(2)
End If
Next
chiavi = False
For Each campo In campiTabella
If campo(3) Then
chiavi = True
Exit For
End If
Next
If chiavi Then
' aggiungo i campi in chiave primaria
Set idxNew = CreateObject("ADOX.Index") 'Server.CreateObject("ADOX.Index")
With idxNew
.Name = "Chiavi"
For Each campo In campiTabella
If campo(3) Then
.Columns.Append campo(0)
End If
Next
.PrimaryKey = True
End With
objAdoxTable.Indexes.Append idxNew
End If
For Each campo In campiTabella
If (campo(5) > 0) Then
Set indice = CreateObject("ADOX.Index")
With indice
.Name = "indice" & nomeTabella & campo(0)
If (campo(5) = 2) Then
.Unique = True
End If
.IndexNulls = adIndexNullsDisallow
.Columns.Append campo(0)
End With
objAdoxTable.Indexes.Append indice
Set indice = Nothing
End If
Next
adoxConn.Tables.Append objAdoxTable
Set objAdoxTable = Nothing
End Sub
Sub CreaRelazione(tabellaPrimaria, campoPrimario, tabellaSecondaria, campoSecondario)
Set chiavi = CreateObject("ADOX.Key")
With chiavi
.Name = "Relazione_" & tabellaPrimaria & "_" & campoPrimario & "_" & tabellaSecondaria & "_" & campoSecondario
.Type = adKeyForeign
.RelatedTable = tabellaPrimaria
.UpdateRule = adRICascade
.DeleteRule = adRICascade
.Columns.Append campoSecondario
.Columns(campoSecondario).RelatedColumn = adoxConn.Tables(tabellaPrimaria).Columns(campoPrimario)
End With
adoxConn.Tables(tabellaSecondaria).Keys.Append chiavi
Set chiavi = Nothing
End Sub
Select Case request.querystring("azione")
Case "CREA" : call CreateNewMDB(Server.MapPath("/mdb-database/databasediprova.mdb"))
Case Else : call Entrata
End Select
%>
Chiunque avesse in mente eventuali implementazioni sono disponibile!!!