** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Access+asp
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAccess+asp

 Responder Responder
Autor
Mensaje
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 545
Enlace directo a este mensaje Tema: Access+asp
    Enviado: 14/Septiembre/2012 a las 12:07
Hola a todos:
 
Primero de todo, comentar que no estamos seguros de que si el problema que tenemos tiene cabida en el foro. Si no la tiene pedimos disculpas por ello. Lo que nos lleva a exponer la situación en este foro es que manejamos un fichero MDB.
 
El problema es el siguiente:
 
Tenemos un formulario que hemos programado con HTML y mediante una programación ASP introducimos registros en un MDB.
 
Este formulario y el MDB lo tenemos en un Web Hosting.
 
La idea es de "bajar", desde el hosting, el MDB con la información que capturamos a través del formulario. 
 
Las pruebas que estamos haciendo, trabajando simultáneamente varios usuarios con el formulario, es que "a veces" el servidor del hosting nos da el siguiente mensaje: 
 
INTERNAL SERVER ERROR
 
The server encountered an internal error or misconfiguration and was unable to complete your request.
(el servidor encontró un error interno y no completo su solicitud).
 
En la mayoria de los casos, los registros se graban correctamente en el MDB y podemos "leerlos" sin problema alguno.
 
Sospechamos que el problema puede estar en el hecho de que simultáneamente se valida el formulario por varias personas y esto excede la "capacidad" del MDB, pero no estamos seguros de esto.
 
Tendría un mejor comportamiento el sistema con un fichero ACCDB?
 
Podeis darnos alguna opinión?
 
Gracias anticipadas.
 
Un saludo.
 
 
 
 
 
 
 


Editado por rocjfl-b - 14/Septiembre/2012 a las 12:43
Arriba
Luis100100 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 08/Enero/2006
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 14/Septiembre/2012 a las 14:18
yo, trabajo con formularios html y mdb y no me ha dado nunca problemas.

podrías poner el código del archivo asp que usais para conectar?
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 545
Enlace directo a este mensaje Enviado: 14/Septiembre/2012 a las 19:09

Este es el código que utilizamos:

 
<html>
<head>
<%@ language="VBScript" %>
<title>Ingreso de registros</title>
</head>

<%

Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

Dim Var_NifNie
Dim Var_NifNieLetra
Dim Var_CodigoNifNie
Dim Var_Nombre
Dim Var_Apellido1
Dim Var_Apellido2
Dim Var_FechaNto
Dim Var_Domicilio
Dim Var_NumeroDomi
Dim Var_Portal
Dim Var_Escalera
Dim Var_Piso
Dim Var_Puerta
Dim Var_Municipio
Dim Var_Postal
Dim Var_Provincia
Dim Var_Correo
Dim Var_Telefono1
Dim Var_Telefono2
Dim Var_Nacional
Dim Var_Profesion
Dim Var_EstadoCivil

Var_NifNie = Request.Form("dni")
Var_NifNieLetra = Request.Form("destino")
Var_CodigoNifNie = Request.Form("dni")+Request.Form("destino")
Var_Nombre = Request.Form("Nombre")
Var_Apellido1 = Request.Form("1Apellido")
Var_Apellido2 = Request.Form("2Apellido")
Var_FechaNto = Request.Form("FechaNto")
Var_Domicilio = Request.Form("Domicilio")
Var_NumeroDomi = Request.Form("Numero")
Var_Portal = Request.Form("Portal")
Var_Escalera = Request.Form("Escalera")
Var_Piso = Request.Form("Piso")
Var_Puerta = Request.Form("Puerta")
Var_Municipio = Request.Form("Municipio")
Var_Postal = Request.Form("CPostal")
Var_Provincia = Request.Form("provincia")
Var_Correo = Request.Form("Email")
Var_Telefono1 = Request.Form("Telef1")
Var_Telefono2 = Request.Form("Telef2")
Var_Nacional = Request.Form("nacionalidad")
Var_Profesion = Request.Form("Profesion")
Var_EstadoCivil = Request.Form("EstadoCivil")

Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open = ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("\Base.mdb"))

Set Tabla = CreateObject("ADODB.Recordset")

Tabla.CursorType = adOpenKeyset
Tabla.LockType = adLockOptimistic

Tabla.Open "Solicitantes",conexion
 Tabla.AddNew
 
 Tabla("NifNie") = Var_CodigoNifNie
 Tabla("Nombre") = Var_Nombre
 Tabla("Apellido1") = Var_Apellido1
 Tabla("Apellido2") = Var_Apellido2
 Tabla("FechaNto") = Var_FechaNto
 Tabla("Domicilio") = Var_Domicilio
 Tabla("NumeroDomi") = Var_NumeroDomi
 Tabla("Portal") = Var_Portal
 Tabla("Escalera") = Var_Escalera
 Tabla("Piso") = Var_Piso
 Tabla("Puerta") = Var_Puerta
 Tabla("Municipio") = Var_Municipio
 Tabla("Postal") = Var_Postal
 Tabla("Provincia") = Var_Provincia
 Tabla("Correo") = Var_Correo
 Tabla("Telefono1") = Var_Telefono1
 Tabla("Telefono2") = Var_Telefono2
 Tabla("Nacional") = Var_Nacional
 Tabla("Profesion") = Var_Profesion
 Tabla("EstadoCivil") = Var_EstadoCivil

 Tabla.Update
 
Tabla.Close
Conexion.Close

Set Tabla = Nothing
Set Conexion = Nothing

response.redirect "Ayuda5.html"

%>
</html>

 



Editado por rocjfl-b - 14/Septiembre/2012 a las 19:11
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2954
Enlace directo a este mensaje Enviado: 15/Septiembre/2012 a las 05:59
Ìnsertar en tabla es mas eficiente con conexion.execute "INSERT INTO tutabla(campo1,campo2,campon) SELECT '" & valor1 & "'," & valor2 & valor3,cuantos donde cuantos es una variable que indica cuantos registros son afectados y ademas de un tratamiento de error, puedes utilizarlo como:

if cuantos=1 then
'salir,enviar email, etc
else
Response.Write "No se realizó el registro. Pulse <input type=button value=AQUI onClick=""javascript: window.history.back(-1);""> para enviar nuevamente el formulario."
end if


Editado por guarracuco - 15/Septiembre/2012 a las 06:00
https://tucondominioaldia.net
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 545
Enlace directo a este mensaje Enviado: 17/Septiembre/2012 a las 14:55
quarracuco:
 
Hemos cambiado, siguiendo tu consejo, a conexion.execute.
 
Hasta el momento no hemos podido comprobar cabalmente si todo va bién, ya que tendríamos que ponernos con varios ordenadores a validar simultáneamente el formulario.
 
Con los medios de los que disponemos ahora mismo, hacemos trabajar 3 ordenadores rellenando el formulario simultáneamente, no hemos tenido ninguna incidencia.
 
Pero la pregunta que nos hacemos es si ¿se conoce el número de conexiones simultáneas que se pueden hacer al MDB? ...
 
Gracias de nuevo


Editado por rocjfl-b - 17/Septiembre/2012 a las 14:55
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2954
Enlace directo a este mensaje Enviado: 18/Septiembre/2012 a las 00:11
Microsoft Access no es una base de datos ideal para web, sin embargo la primera web y otras mas que desarrollé trabajan con mdb desde hace unos 10 años. Varios coordinadores (colegio) actualizan simultáneamente y nunca ha presentado problemas.
EL éxito se basa en que se usa la conexión y se desecha enseguida, también el uso de transacciones que bloquea por instantes las tablas afectadas por la consulta.
Cada entorno es muy particular, porque a lo mejor en vuestra aplicación se reparte el trabajo por departamentos, provincias,oo y quizás nunca se presente el caso de cargar dos veces el mismo registro...

Si la cantidad de datos y/o usuarios vá a crecer, deben ir pensando en documentarse para migrar a una base de datos de servidor.

Si lo que están haciendo es conocer el camino, mucho les vá a servir este entorno, mas aun, si abren una transacción antes de comenzar la actualización y cerrarla al final de la misma.
https://tucondominioaldia.net
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2954
Enlace directo a este mensaje Enviado: 18/Septiembre/2012 a las 01:19
He desempolvado un cd guardado y les coloco aquí una rutina para insertar en una tabla un registro. Lo busqué cuando ví la cantidad de campos que tienen, y recordé un proceso para crear la cadena tanto de los campos que vienen como de  sus valores.
....
Colección de campos:
Cuando tienen un formulario donde los cuadros de texto, listas,etc tienen el mismo nombre de los campos de la tabla, se puede recorrer la colección del formulario y crear la cadena para actualziar la base de datos. Hay ciertas cuestiones a tomar en cuenta, como lo son campos numéricos enteros y que todos los campos son de caracter obligatorio pero vamos a suponer que todos son campos alfanuméricos y vienen todos los campos con valor.

Lo primero que vamos a hacer es confirmar que hubo un envío desde un formulario (POST), para lo cual consultamos una variable del servidor.

Lo segundo es recorrer cada objeto del formulario, obtener el nombre del campo y agregarlo a la variable strcampos para crear la cadena de los campos.
hacemos lo mismo con el valor del campo y agregamos el valor a la variable strvalores.

Al terminar el recorrido tenemos lista la cadena de campos y valores que llegan.
'----------------------------------------------------------------------------
<!--#include file="conecta.asp"-->
<%
if Request.ServerVariables("REQUEST_METHOD")="POST" THEN'viene de un formulario con metodo post?
    on error resume next
    dim strcampos,strvalores,UnError
    set UnError=server.CreateObject("ADODB.Error")
    for each item in Request.form'recorre la colección de objetos del formulario
        campo=item
        valor=Request.Form(campo)
        if len(strcampos)=0 then' es la primera vuelta
            strcampos= campo
            strvalores=valor
        else
            strcampos=strcampos & "," & campo
            strvalores=strvalores & ",'" & valor & "'"
        end if
    next
'--------------------------------------------------------------------------
'mi objeto conexion se llama conn

    conn.begintrans'inicio una transaccion que bloquerá la(s) tabla(s) afectada para garantizar que la operación se realize

    conn.execute "INSERT INTO tutabla(" & campos & ")" & " SELECT " & valores,cuantos

    if conn.errors.count>0 then'si hay error
        for each UnError in conn.errors
           'tratamiento_errores UnError.nativeError
               response.write unerror.description
        next
        conn.errors.clear'limpia los errores
        conn.rollbacktrans'reversa la operación
    else
        if cuantos=1 then
            conn.committrans'cierra la transaccion
            Response.Write "Se insertó correctamente el registro."
        else
            conn.rollbacktrans
            Response.Write "No se realizó el registro. Pulse <input type=button value=AQUI onClick=""javascript: window.history.back(-1);"" para enviar nuevamente el formulario.>"  
        end if
    end if

    set unerror=nothing
else
    response.write "Este formulario se debe llamar desde un form"
end if'del if request.servervariables

conn.close
set conn=nothing
%>

Para probar esto, coloca este código en una asp nueva y le guardas. En la asp que tiene el formulario, coloca en action="" elnombre de tu nueva asp.

OJO: que le ho cortado y pegado de dos páginas asp..no es el original, yq uie no incluyo tratamiento de errores entre otras


Editado por guarracuco - 18/Septiembre/2012 a las 01:22
https://tucondominioaldia.net
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 545
Enlace directo a este mensaje Enviado: 18/Septiembre/2012 a las 20:07
Muchas gracias por tu interés quarracuco.
 
Estudiaremos detenidamente el código que nos facilitas.
 
Si conseguimos interpretarlo correctamente lo implementaremos y te comentaremos como vamos.
 
Hasta el momento, el cambio a conexion.execute está funcionando bién.
 
Un saludo.
 
El hilo se puede cerrar, al menos por nuestra parte.
 


Editado por rocjfl-b - 18/Septiembre/2012 a las 20:08
Arriba
Bacterio Ver desplegable
Moderador
Moderador
Avatar

Unido: 16/Octubre/2004
Localización: España
Estado: Sin conexión
Puntos: 2077
Enlace directo a este mensaje Enviado: 19/Septiembre/2012 a las 11:14
Por muy bueno que sea el motor jet (el que maneja los mdb's), no puede se puede comparar con sql server o MySQL en términos de rendimiento.
 
Eso no significa que que un mdb no sea opción válida. Este mismo foro estuvoi funcionando durante años tirando de mdb's
 
Si tu web tiene mucho tráfico, tu problema principal no creo que sea el rendimiento. Mas bien será el consumo de cpu. Los proveedores de hosting a menudo alojan muchas webs en la mísma máquina. Si vuestra web empieza a consumir mucha cpu, es posible que el proveedor os de un toque.
 
Ten presente, que el motor jet se implementa como dll's que se ejecutan el el proceso del servidor web. Por contra, en un sistema como sql server o MySQL el servidor de BBDD suele ser una máquina distinta. Y el proceso del servidor web no se ve sobrecargado gestionando el acceso a datos además de su función normal.
 
Otra ventaja de sistemas como sql server y MySQL es que a menudo vuestro proveedor os da acceso directo al servidor de BBDD. Eso os permitiría tener aplicaciones de escritorio que se conectan directamente a la base de datos. No sería necesario descargar el mdb entero para disponer de la base de datos actualizada.
 
La mayoría de proveedores de hosting ofrecen la MySQl sin costes adicionales
 
Por resumir. Aunque la opción de los mdb's sea perfectamente válida, si puedes elegir es preferible usar Sql server o MySQL.
 


Editado por Bacterio - 19/Septiembre/2012 a las 11:18
Arriba
rocjfl-b Ver desplegable
Colaborador
Colaborador


Unido: 19/Abril/2006
Localización: España
Estado: Sin conexión
Puntos: 545
Enlace directo a este mensaje Enviado: 19/Septiembre/2012 a las 14:16
Solo reiterar nuestro agradecimiento a todos.
 
Hemos tomado la decisión de, dado el estado de desarrollo que tenemos, continuar con la estrategia de los MDB's.
 
Según lo comentado anteriormente, tampoco parece mala idea de momento.
 
Un saludo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable