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
file esemplificativocodice:<% 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 %>
test.asp
la funzione CREATETABLE restituisce la stringa SQL da far poi eseguire tramite il solitocodice:<% 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 %>
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


Rispondi quotando
