Ejemplos para crear un archivo .mbd (base de datos Access) desde un script ASP.
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.
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
%>
<html>
<head>
<title>Crear *.mdb</title>
<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif; font-size: x-small
}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
if Generar <> "" then
if Err then
Response.Write "Hubo un error.<br><br>"
Response.Write "<u>Error:</u> " & Err.Description & "<br>"
Response.Write "<u>Error N°:</u> " & Err.Number &"."
else
Response.Write "Base de datos <u>"& NomBD &"</u> fué creada exitosamente!!<br>"
Response.Write "Formato: "&FormatoN & "<br>"
Response.Write "Metodo usado: "&Metodo
end if
else
%>
<!-- Formulario de creacion //-->
<form name="creador" action="crear_db.asp" method="POST">
Nombre de la BD:
<input type="text" name="nomBD"><br>
Formato:
<select name="formato">
<option value="1" selected>Access 2000</option>
<option value="2">Access 97</option>
<option value="3">Access 95</option>
</select><br>
Método:<br>
<input type="radio" name="metodo" value="ADO" checked><small>ADO (requiere MDAC 2.0)</small><br>
<input type="radio" name="metodo" value="DAO"><small>DAO (requiere DAO 3.6)</small><br><br>
<input type="submit" value="Crear">
<input type="hidden" name="action" value="si">
</form>
<!-- Fin formulario //-->
<%
end if
%>
</body>
</html>
El código de este ejemplo se puede descargar en un archivo comprimido.
Una referencia útil que se consultó para documentar este artículo es Crear una base de datos MDB con Visual Basic (En inglés).
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ás información en la FAQ Qué es el motor de base de datos Microsoft Jet. |
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
%>
<html>
<head>
<title>Crear *.mdb</title>
<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif; font-size: x-small
}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
if Generar <> "" then
if Err then
Response.Write "Hubo un error.<br><br>"
Response.Write "<u>Error:</u> " & Err.Description & "<br>"
Response.Write "<u>Error N°:</u> " & Err.Number &"."
else
Response.Write "Base de datos <u>"& NomBD &"</u> fué creada exitosamente!!<br>"
Response.Write "Formato: "&FormatoN & "<br>"
Response.Write "Metodo usado: "&Metodo
end if
else
%>
<!-- Formulario de creacion //-->
<form name="creador" action="crear_db.asp" method="POST">
Nombre de la BD:
<input type="text" name="nomBD"><br>
Formato:
<select name="formato">
<option value="1" selected>Access 2000</option>
<option value="2">Access 97</option>
<option value="3">Access 95</option>
</select><br>
Método:<br>
<input type="radio" name="metodo" value="ADO" checked><small>ADO (requiere MDAC 2.0)</small><br>
<input type="radio" name="metodo" value="DAO"><small>DAO (requiere DAO 3.6)</small><br><br>
<input type="submit" value="Crear">
<input type="hidden" name="action" value="si">
</form>
<!-- Fin formulario //-->
<%
end if
%>
</body>
</html>
El código de este ejemplo se puede descargar en un archivo comprimido.
Una referencia útil que se consultó para documentar este artículo es Crear una base de datos MDB con Visual Basic (En inglés).
Luis Marcelo Sosa