non so voi, ma io ultimamente sto lavorando sia su MDB che MYSQL (sullo stesso progetto)...
di base non costruisco mai le tabelle manualmente, ma mi faccio degli script che le creano per i fatti loro...
data la differenza sostanziale della costruzione di una tabella fra MYSQL e MDB (il CREATE TABLE cambia soprattutto nelle tipologie di dati) ho fatto una piccola classe
questa piccola classe non è propriamente generale, ma è specifica per il mio lavoro...
non considera alcuni tipi di dati, e probabilmente ignora esigenze specifiche di altri...
però comunque può venirvi utile come base
io la metto qui...
[se avete appunti o modifiche fate pure che schifo non mi fanno]
class.createtable.asp
codice:
<%
Class class_createtable
Public database 'accept "mdb" or "mysql"
Private dbaField()
Private Sub Class_Initialize()
call clearFields()
end sub
''/**
' * Clear the field array for a new table
' *
' * @name addfield
' * @vers 1.0
' * @since 2.0b
' */
public sub clearFields()
redim dbaField(2,0)
dbaField(2,0) = ""
dbaField(1,0) = ""
dbaField(0,0) = ""
end sub
''/**
' * Add a field to the array
' *
' * @name addfield
' * @vers 1.0
' * @since 2.0b
' *
' * @param (string) fieldName - name of the field
' * @param (string) fieldType - type of the field
' * @param (string) fieldParam - parameter of the field (for VARCHAR and others)
' */
public sub addField(fieldName, fieldType, fieldParam)
redim preserve dbaField(2,ubound(dbaField,2)+1)
dbaField(0,ubound(dbaField,2)) = fieldName
dbaField(1,ubound(dbaField,2)) = fieldType
dbaField(2,ubound(dbaField,2)) = fieldParam
end sub
''/**
' * Create the table using the array dbaField
' *
' * @name createTable
' * @vers 1.0
' * @since 2.0b
' *
' * @param (string) tableName - name of the table
' * @return (string) - the SQL string to create a table
' */
public function createTable(tableName)
dim SQL,ii
SQL = "CREATE TABLE " & tableName & " ("
for ii = 1 to ubound(dbaField,2)
SQL = SQL & dbaField(0,ii) & " "
SQL = SQL & convertType(dbaField(1,ii))
if dbaField(2,ii) <> "" then SQL = SQL & "(" & dbaField(2,ii) & ")"
SQL = SQL & ", "
next
SQL = left(SQL,len(SQL)-2)
SQL = SQL & ");"
createTable = SQL
end function
''/**
' * Convert dbaField type to real
' *
' * @name convertType
' * @vers 1.0
' * @since 2.0b
' *
' * @param (string) fieldType - type of field
' * @return (string) - string type of field
' */
private function convertType(fieldType)
select case database
case "mdb"
select case fieldType
case "counter"
convertType = "COUNTER UNIQUE NOT NULL PRIMARY KEY"
case "byte"
convertType = "BYTE"
case "date"
convertType = "DATETIME"
case "short"
convertType = "SHORT"
case "long"
convertType = "LONG"
case "currency"
convertType = "CURRENCY"
case "char"
convertType = "TEXT"
case "varchar"
convertType = "TEXT"
case "memo"
convertType = "LONGTEXT"
end select
case "mysql"
select case fieldType
case "counter"
convertType = "INT(10) AUTO_INCREMENT UNIQUE NOT NULL PRIMARY KEY"
case "byte"
convertType = "TINYINT (3) UNSIGNED"
case "date"
convertType = "DATETIME"
case "short"
convertType = "SMALLINT UNSIGNED"
case "long"
convertType = "INT UNSIGNED"
case "currency"
convertType = "BIGINT UNSIGNED"
case "char"
convertType = "CHAR"
case "varchar"
convertType = "VARCHAR"
case "memo"
convertType = "LONGTEXT"
end select
end select
end function
end class
%>
file esemplificativo
test.asp
codice:
<%
dim obj
set obj = new class_createtable
obj.database = "mdb" ' or "mysql"
call obj.clearFields()
call obj.addField("test_id","counter","")
call obj.addField("test_title","varchar","25")
call obj.addField("test_order","byte","")
response.write obj.createtable("tba_test") & "
"
set obj = nothing
%>
la funzione CREATETABLE restituisce la stringa SQL da far poi eseguire tramite il solito
CONN.EXECUTE
se si fanno più tabelle è necessario usare il CLEARFIELDS e poi ricominciare ad aggiungere ADDFIELD
tramite OBJ.DATABASE si imposta il tipo di database che si sta usando (che determina l'ouput)...
"mysql" oppure "mdb"...
ci vuole poco (come si intuisce) ad ampliarla anche per altri database
le tipologie di dati le trovate nel SELECT CASE della classe
cmq fondamentalmente ho messo i principali...
(ho evitato i BLOB che non uso mai...)
saluti