Sistema para crear un archivo .mbd (base de datos Access) desde un script ASP, con ejemplos prácticos.

Estas son unas pautas de trabajo y unas referencias que he encontrado útiles a la hora de solucionar un problema en ASP, consistente en crear una base de datos en Access (fichero .mdb) desde cero, es decir, crear el archivo .mdb vacío para, una vez creadas también las tablas, trabajar con la base de datos como si hubiese sido creada con Access.

Lógicamente, con Access es mucho más sencillo crear las bases de datos, pero este mecanismo tiene dos ventajas. Una simple: que no necesitas tener Access para crear las bases de datos, y otra más interesante: que puedes crear bases de datos en línea y dinámicamente, de modo que queden guardadas en tu servidor para realizar los trabajos que estimes oportuno.

Nota: Se puede crear una base de datos de Access a través de Visual Basic, ASP, u otros medios porque en realidad lo que se está utilizando es el motor Jet, que son unas DLL que tienen todos los sistemas Windows para manejar los archivos .mdb.

Métodos para crear una BD Access 2000

Existen dos métodos para crear una base de datos Access: ADO y DAO. Vamos a ver un pequeño ejemplo de cada uno.

Atención: Para los dos casos, los directorios tienen que tener permisos de escritura para que funcione correctamente.

Ejemplo en ADO, Requiere MDAC 2.0

Para el ejemplo se necesita tener instalado el Microsoft Data Access Component (MDAC 2.0), que se incluye con la instalación de Microsoft Access 2k, o, sino, bajar la ultima versión del (MDAC) desde http://www.microsoft.com/data (donde también se encuentra el Component Checker para saber que versión tienes instalada).

Según información de Microsoft la versión 1.5 del MDAC contiene algunos bugs, por lo que recomiendan actualizarse.

Dim basedatos
Set basedatos = CreateObject(«ADOX.Catalog»)
basedatos.Create «Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=» & Server.MapPath(«prueba.mdb»)
Set basedatos = Nothing

En la cadena utilizada para crear la base de datos, el valor Engine Type indicado (5) sirve para que la base de datos tenga formato Access 2000. Podíamos haber puesto otros valores para otras versiones del motor, por ejemplo 3 para Access 95, o el valor 4 para Access 97.

Ejemplo en DAO, requiere DAO

Se necesita DAO 3.6 ó DAO 3.5. En caso de utilizar DAO 3.5, se ha de modificar «DAO.DBEngine.36» por «DAO.DBEngine.35»

Dim motor
Set motor = CreateObject(«DAO.DBEngine.36»)
motor.CreateDatabase Server.MapPath(NomBD&».mdb»), «;LANGID=0x0409;CP=1252;COUNTRY=0», 64
Set motor = Nothing

El tercer parámetro del método para crear la base de datos (64) es para indicar la versión de la base de datos, en este caso Access 2000. En el caso de desear otro formato se puede modificar por ejemplo a 32 en caso de Access 97 ó 16 para Access 95.

Conclusión

Las pruebas las hice en 2 PCs con Windows Professional 2000 (SP3) y Office 2000 (SP3) instalado y funcionaron perfectamente, lo mismo que en mi servidor (hosting contratado) y en el de Brinkster (cuenta gratuita) sin ningun drama. También se han probado con éxito, en la redacción de DesarrolloWeb.com, utilizando el sistema Windows 98 y el servidor Personal Web Server.

Por último, aquí se puede ver un ejemplo que hice para generar las db desde ADO ó DAO (3.6). El código esta bastante comentado con respecto al funcionamiento y los requerimientos del servidor.

<%@LANGUAGE="VBSCRIPT"%>
<%
Generar = Request.Form(«action»)
if Generar <> «» then

On Error Resume Next

Metodo = Request.Form(«metodo»)
Formato = Request.Form («formato»)
NomBD = Request.Form («nomBD»)

‘ ************* Comprobamos segun que método ************

if Metodo = «ADO» then

    if Formato = «1» then
       FormatoBD = 5
       FormatoN = «Ms Access 2000»
    elseif Formato = «2» then
       FormatoBD = 4
       FormatoN = «Ms Access 97»
    elseif Formato = «3» then
       FormatoBD = 3
       FormatoN = «Ms Access 95»
    end if
‘ **********************
‘    Para los dos casos los directorios tienen que
‘    tener permisos de escritura para que funcione
‘    correctamente.
‘ **********************
‘    Ejemplo en ADO, requiere MDAC 2.0

‘    para saber que version esta instalada en el sistema
‘    se puede usar el Component Checker Tool de
‘    Microsoft
‘    http://www.microsoft.com/data/download.htm#CCinfo
‘    ó bajar la ultima version en
‘     http://www.microsoft.com/data/download.htm

‘    Jet10 = 1
‘    Jet11 = 2
‘    Jet20 = 3 <----------- para Access 95
‘    Jet3x = 4 <------------ para Access 97
‘    Jet4x = 5 <------------ para Access 2000
‘ **********************
‘ ***** Comienzo ADO ************
Dim Catalog
Set Catalog = CreateObject(«ADOX.Catalog»)
Catalog.Create «Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=»&FormatoBD&»;Data Source=»&Server.MapPath(NomBD&».mdb»)
Set Catalog = Nothing
‘ ************ Fin ADO *****************

else
    if Formato = «1» then
       FormatoBD = 64
       FormatoN = «Ms Access 2000»
    elseif Formato = «2» then
       FormatoBD = 32
       Formato = «Ms Access 97»
    elseif Formato = «3» then
       FormatoBD = 16
       FormatoN = «Ms Access 95»
    end if

****************
‘    Ejemplo en DAO, requiere DAO 3.6 ó DAO 3.5 para
‘    DAO 3.5 modificar «DAO.DBEngine.36» por
‘    «DAO.DBEngine.35»

‘    dbVersion10 = 1
‘    dbVersion11 = 8
‘    dbVersion20 = 16 <------------ para Access 95
‘    dbVersion30 = 32 <------------ para Access 97
‘    dbVersion40 = 64 <------------ para Access 2000
****************
‘ ********** Comienzo DAO **********
Dim Engine
Set Engine = CreateObject(«DAO.DBEngine.36»)
Engine.CreateDatabase Server.MapPath(NomBD&».mdb»), «;LANGID=0x0409;CP=1252;COUNTRY=0», FormatoBD
Set Engine = Nothing
‘ ********** Fin DAO ***********
end if
end if
%>



Crear *.mdb


<%
if Generar <> «» then
    if Err then
    Response.Write «Hubo un error.

»
    Response.Write «Error: » & Err.Description & «
»
    Response.Write «Error N°: » & Err.Number &».»
    else
    Response.Write «Base de datos «& NomBD &» fué creada exitosamente!!
»
    Response.Write «Formato: «&FormatoN & «
»
    Response.Write «Metodo usado: «&Metodo
    end if
else
%>

Nombre de la BD:

Formato:

Método:

ADO (requiere MDAC 2.0)

DAO (requiere DAO 3.6)



<%
end if
%>