Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    CLASSE: creare tabelle su MDB e MYSQL

    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
    san imente saluta

    * http://simonecingano.it *

  2. #2
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    Ho provato la classe su un DB ACCESS (MDB), ma restituisce quest'errore:
    Microsoft VBScript runtime error '800a01fa'
    Class not defined: 'wbforum_createtable'
    su questa rga del file test.asp:
    codice:
    set obj = new wbforum_createtable
    :master:
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  3. #3
    si ho corretto... (se vedi sopra)

    set obj = new class_createtable

    la classe fa parte di un progetto più grande che si chiama WBFORUM
    ora però la rilasciavo come componente a se stante, quindi ho cambiato il nome :P
    san imente saluta

    * http://simonecingano.it *

  4. #4
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    Si grazie... scusa l'ignoranza... adesso restituisce:
    codice:
    CREATE TABLE tba_test (test_id COUNTER UNIQUE NOT NULL PRIMARY KEY, test_title TEXT(25), test_order BYTE);
    Non dovrebbe creare una nuova tabella nel DB Access?

    perchè sino ad ora non crea nulla...
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  5. #5
    no...

    come ho scritto sopra

    la funzione CREATETABLE restituisce la stringa SQL da far poi eseguire tramite il solito
    CONN.EXECUTE
    per creare la tabella ti devi fare un oggetto CONNECTION e poi eseguire quella query

    la classe genera solo la stringa SQL.
    san imente saluta

    * http://simonecingano.it *

  6. #6
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    Se intendi questo (non ne sono certo):
    codice:
    <%
      dim strconn
      strconn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& server.mappath("testDB.mdb")
      set objconn = server.createobject("ADODB.connection")
      objconn.open strconn
    
    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") & "
    "
    
    strconn.execute(SQL)
     
    objconn.close
    set objconn = Nothing
    
    set obj = nothing
    %>
    Restitusce:
    CREATE TABLE tba_test (test_id COUNTER UNIQUE NOT NULL PRIMARY KEY, test_title TEXT(25), test_order BYTE);

    Microsoft VBScript runtime error '800a01a8'

    Object required: 'Driver={Microsoft Ac'
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  7. #7
    c'eri quasi :P

    codice:
    <%
    dim strconn
    strconn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& server.mappath("testDB.mdb")
    set objconn = server.createobject("ADODB.connection")
    objconn.open strconn
    
    dim obj, SQL
    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","")
    SQL = obj.createtable("tba_test")
    
    strconn.execute SQL
     
    objconn.close
    set objconn = Nothing
    
    set obj = nothing
    %>
    la SQL che hai messo tu era ""...
    invece ci devi mettere quello che restituisce la classe
    san imente saluta

    * http://simonecingano.it *

  8. #8
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    codice:
    <%
    dim strconn
    strconn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& server.mappath("testDB.mdb")
    set objconn = server.createobject("ADODB.connection")
    objconn.open strconn
    
    dim obj, SQL
    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","")
    SQL = obj.createtable("tba_test")
    
    strconn.execute SQL
     
    objconn.close
    set objconn = Nothing
    
    set obj = nothing
    %>
    Microsoft VBScript runtime error '800a01a8'

    Object required: 'Driver={Microsoft Ac'
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  9. #9
    scusa ma chi è che ti ha imparato l'asp?
    topolino???

    le stringhe fino a prova contraria non hanno (almeno non in VBscript) metodi...

    semmai dovresti applicarlo a objconn

    objconn.execute SQL
    san imente saluta

    * http://simonecingano.it *

  10. #10
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    Santo imente.
    Ha fatto una classe che è una manna e voi me lo fate indiavolare.
    Bah

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.