Problema con ASP



  • Hace un par de semanas hice una web en ASP con acceso a una base de datos sencilla. Todo iva muy bien. En la web habían formularios de inserción de registros y de consulta de registros. Pero luego decidí(erroneamente) instalar el Windows NET y ay no funcionaba nada. Volví a instalar el Win2k con el que me habia ido todo tan bien pero sigue sin funcionar. Pensando que podría ser la web, hice una sóla página nueva de inserción de registro y no funciona, no se inserta nada, da este error en el explorer:

    Tipo de error:
    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [Microsoft][Controlador ODBC Microsoft Access] No se pudo usar '(desconocido)'; el archivo ya está en uso.
    /TMPr1fzrbhs5n.asp, line 76

    No entiendo porque sale el dichoso error diciendo que la base de datos está en uso. Utilizo IIS, Access, Win2K y Dreamweaver MX.

    Os incluyo el vínculo a la página de inserción de registro: link

    Salu2



  • Seguramente no tenga nada que ver pero, ¿has instalado el ultimo framework?.



  • Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [Microsoft][Controlador ODBC Microsoft Access] La operación debe usar una consulta actualizable.

    Y eso no es que la BD esté en uso… revisa ese SQL.

    Salu2...





  • El error de "necesita una consulta actualizable" tb me lo daba con la otra web, al intentar insertar un registro nuevo en la base de datos. Las páginas las hago en modo visual, no edito el código directamente, puesto que no tengo ni idea de programación.

    No es el framework, ya que nunca lo he instalado. Hay algo que hago mal y no tengo ni idea de que es. La conexión a la base de datos la hago desde el Dreamweaver, creando una DSN del sistema y nada más. Es algo muy sencillo que no me funciona, 😕 .



  • si pones el código que hace la inserción desde asp, podría mirarlo pero así sin verlo…

    salu2...



  • He aqui el codigo dela página que vinculé antes. Ahi viene la conexión a la base de datos. Lo he sacado del dreamweaver.

    <%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%>

    <%
    // *** Edit Operations: declare variables

    // set the form action variable
    var MM_editAction = Request.ServerVariables("SCRIPT_NAME");
    if (Request.QueryString) {
    MM_editAction += "?" + Request.QueryString;
    }

    // boolean to abort record edit
    var MM_abortEdit = false;

    // query string to execute
    var MM_editQuery = "";
    %>
    <%
    // *** Insert Record: set variables

    if (String(Request("MM_insert")) == "form1") {

    var MM_editConnection = MM_baseDSN_STRING;
    var MM_editTable = "Miembros";
    var MM_editRedirectUrl = "";
    var MM_fieldsStr = "namenew|value|hotmailnew|value";
    var MM_columnsStr = "Nombre|',none,''|Hotmail|',none,''";

    // create the MM_fields and MM_columns arrays
    var MM_fields = MM_fieldsStr.split("|");
    var MM_columns = MM_columnsStr.split("|");

    // set the form values
    for (var i=0; i+1 < MM_fields.length; i+=2) {
    MM_fields[i+1] = String(Request.Form(MM_fields_));
    }

    // append the query string to the redirect URL
    if (MM_editRedirectUrl && Request.QueryString && Request.QueryString.Count > 0) {
    MM_editRedirectUrl += ((MM_editRedirectUrl.indexOf('?') == -1)?"?":"&") + Request.QueryString;
    }
    }
    %>
    <%
    // *** Insert Record: construct a sql insert statement and execute it

    if (String(Request("MM_insert")) != "undefined") {

    // create the sql insert statement
    var MM_tableValues = "", MM_dbValues = "";
    for (var i=0; i+1 < MM_fields.length; i+=2) {
    var formVal = MM_fields[i+1];
    var MM_typesArray = MM_columns[i+1].split(",");
    var delim = (MM_typesArray[0] != "none") ? MM_typesArray[0] : "";
    var altVal = (MM_typesArray[1] != "none") ? MM_typesArray[1] : "";
    var emptyVal = (MM_typesArray[2] != "none") ? MM_typesArray[2] : "";
    if (formVal == "" || formVal == "undefined") {
    formVal = emptyVal;
    } else {
    if (altVal != "") {
    formVal = altVal;
    } else if (delim == "'") { // escape quotes
    formVal = "'" + formVal.replace(/'/g,"''") + "'";
    } else {
    formVal = delim + formVal + delim;
    }
    }
    MM_tableValues += ((i != 0) ? "," : "") + MM_columns_;
    MM_dbValues += ((i != 0) ? "," : "") + formVal;
    }
    MM_editQuery = "insert into " + MM_editTable + " (" + MM_tableValues + ") values (" + MM_dbValues + ")";

    if (!MM_abortEdit) {
    // execute the insert
    var MM_editCmd = Server.CreateObject('ADODB.Command');
    MM_editCmd.ActiveConnection = MM_editConnection;
    MM_editCmd.CommandText = MM_editQuery;
    MM_editCmd.Execute();
    MM_editCmd.ActiveConnection.Close();

    if (MM_editRedirectUrl) {
    Response.Redirect(MM_editRedirectUrl);
    }
    }

    }
    %>

    <title>Documento sin título</title>

    __



  • Lo del framework te lo decia porque aunque no lo tengas instalado si tienes el .Net ya te lo instala y podrias necesitar actualizarlo, pero creo que no eso.

    Comentas que lo haces con el dreamwaver e imagino que funcionara en tu equipo. A mi me ocurria algo parecido y el problema estaba precisamente en la conexion con la base de datos, me funcionaba en local pero no en la web y era porque tenia conectado especificamente a base de datos con mi equipo y debia hacerlo de forma mas general.

    Ya se que no me he explicado bien, lo busco y ya te lo cuento mejor.



  • odio ese código generado así por las bunas… donde esté editar "a pelo"... que se quite todo eso... hmm... en principio parece que todo está correcto... sería interesante ver el baseDSN.asp (creo que es a lo que tu te refieres pako)... puedes tener el DSN mal, y que desde fuera no se vea... tienes un fichero llamado global.asa en el root del tu web ? Todo el tema de conexiones a la BD, etc suele meterse ahí.

    Salu2...



  • Ya he vuelto. Siento no haber contestado antes pero tuve una fuga con la RL… :nono: . Gracias a dios, dejando secar la placa base ya funciona 😮 . Si hay un archivo global.asa. He conseguido reducir el problema a un único mensaje de error:

    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [Microsoft][Controlador ODBC Microsoft Access] La operación debe usar una consulta actualizable.

    Geezup, es el error que has puesto varios post más arriba. ¿Cómo se solucina?. Estoy tirandome de los pelos porque no se cómo conseguí hacerlo funcionar en su día y ahora no hay manera, 😕 .

    Gracias por todas las respuestas.



  • hasta este fin de semana no voy a estar disponible, lo siento, tengo que prepararme un examen…. a ver si puedes postear el contenido del baseDSN.asp y del global.asa... también mira a ver si buscando el error "La operación debe usar una consulta actualizable" en el google encuentras algo... que seguro que sí... pero yo al código que has posteado, no le veo nada "raro" aparte de que lo genere el DW y no me mole, pero por lo demás creo que está correcto...

    ánimo tío... este finde volveré a hechar un vistazo al post, y si no lo tienes solucionado me pongo con ello un poco más seriamente.

    Salu2...



  • yo lo primero que haria seria hacer un response.write (MM_editQuery) para ver que es lo que esta intentando hacer. Porque con ese codigo del DW no hay manera…

    Haz el response.write y comenta la linea MM_editCmd.Execute();

    Coje lo que te de el response y pegalo en una consulta del access. Asi veras si funciona la SQL.



  • Lo conseguí!!!!! Aleluya!!!! Dios existe!!!!. La solución la tenía justo delante. Pa que –--- imprimo el manual de DW si luego no lo miro!!!:muerto: . En una página de este manual viene como título : "Solución de problemas de conexiones de bases de datos".

    Hay especifica los dos famosos problemas:

    • La base de datos está ya en uso...
    • Debe usar una consulta actualizable.

    ¿Solución?

    Dar permisos de lectura y escritura al usuario "IUSR_nombre_del_equipo" a la carpeta que contenga la base de datos. Tan sencillo. Yo no tenía a ese usuario en los permisos, por eso no funcionaba!!!.

    Para agregar a este ---- de usuario hay que dar en la pestaña "seguridad" dentro de las propiedades de la carpeta que contenga la base de datos.

    Esto sólo ocurre en particiones NTFS, no en FAT.

    Gracias a todos por vuestras respuestas!!!


Accede para responder