Problema con insert y bd access

Saludos averias33, tengo una página asp que inserta y también elimina un determinado correo de mi base de datos.
El mensaje de error es el siguiente :
--------------------
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Expected query name after EXECUTE.
/email.asp, line 64
-------------------------
la pagina web es la sgte : www.buyfromperu.com , la opcion es "dejanos tu email".
El código asp toma el email y verifica di esta ya ingresado mediante un select y luego hace el insert o el delete, y es el siguiente :
----------------------
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/conbuy.asp" -->
<%
session("numeroc")=0
Dim mmeditq
Dim mmeditcmd
Dim mmeditc
dim mmeditr
dim mensage
dim valor1, valor2, valor3, valor4
valor1 = request.form("emailing")
valor2 = request.form("emailbor")
valor3 = request.Form("emailfec")
valor4 = request.Form("emailpais")
mmeditc = MM_conbuy_STRING
mmeditq=""
mensage=""
if valor1<>"" OR valor2<>"" then
Dim rs
if valor1<>"" then
mmeditq = "select email from emails where email = '" & CStr(valor1) & "'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection = MM_conbuy_STRING
rs.Source = mmeditq
rs.CursorType = 3
rs.CursorLocation = 2
rs.LockType = 1
rs.Open()
if rs.recordCount=0 then
mmeditr = "emailresultado.asp"
mmeditq = "insert into emails(email,fecha,pais) values('" & CStr(valor1) & "','" & CStr(valor3) & "','" & CStr(valor4) & "')"
else
mensage="No se encontro el email especificado"
mmeditq=""
end if
rs.Close()
Set rs = Nothing
end if
if valor2<>"" then
mmeditr = "emailborrado.asp"
mmeditq = "select email from emails where email = '" & CStr(valor2) & "'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection = MM_conbuy_STRING
rs.Source = mmeditq
rs.CursorType = 3
rs.CursorLocation = 2
rs.LockType = 1
rs.Open()
if rs.recordCount=0 then
mensage="No se encontro el email especificado"
mmeditq=""
rs.Close()
Set rs = Nothing
else
mmeditq = "delete from emails where email = '" & CStr(valor2) & "'"
end if
end if
if mmeditq<>"" then
Set mmeditcmd = Server.CreateObject("ADODB.Command")
mmeditcmd.ActiveConnection = mmeditc
mmeditcmd.CommandText = mmeditq
mmeditcmd.Execute
mmeditcmd.ActiveConnection.Close
response.redirect(mmeditr)
end if
end if
%>
--------------------
Espero tu colaboración, gracias

1 respuesta

Respuesta
1
No te entiendo bien, me quieres decir que el programador dice que tu solo tienes permisos a la base de datso en modo de lectura pero que el site e Usa te da permisos de escritura. Acláreme esto mejor.
Gracias por la respuesta estimado Averias33, sabes, cambie el código y lo probé con mi IIS de mi pc personal y es este :
--------------------------------
<%
session("numeroc")=0
Dim mmeditq
Dim mmeditcmd
Dim mmeditc
dim mmeditr
dim mensage
dim valor1, valor2, valor3, valor4
valor1 = request.form("emailing")
valor2 = request.form("emailbor")
valor3 = request.Form("emailfec")
valor4 = request.Form("emailpais")
mmeditc = MM_conbuy_STRING
mmeditq=""
mensage=""
if valor1<>"" OR valor2<>"" then
Dim rs
if valor1<>"" then
mmeditq = "select * from emails where email = '" & CStr(valor1) & "'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open mmeditq, MM_conbuy_STRING, 2, 3
if rs.EOF then
mmeditr = "emailresultado.asp"
rs.AddNew
rs.Fields("email")=valor1
rs.Fields("fecha")=Date()
rs.Fields("pais")=valor4
rs.Update
else
mensage="Was not the specified email"
mmeditq=""
end if
end if
if valor2<>"" then
mmeditr = "emailborrado.asp"
mmeditq = "select * from emails where email = '" & CStr(valor2) & "'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open mmeditq, MM_conbuy_STRING, 1, 2
if rs.EOF then
mensage="No se encontro el email especificado"
mmeditq=""
else
rs.Delete
rs.Update
end if
end if
rs.Close()
Set rs = Nothing
if mmeditq<>"" then
response.redirect(mmeditr)
end if
end if
%>
----------------------
Cabe a clarar que tuve que cambiar los permisos de acceso de la base de datos muy a parte de los permisos del site que si estaba para escritura, tengo otra pregunta, si no es mucha molestia, publique mi página y me sale un error que dice que el objeto es de solo lectura, le consulte al programador de Miami-USA que tiene acceso al servidor y dice que es culpa mía que mi conexión es de solo lectura y que el site de USA tiene permisos de escritura, pero no me entiende que yo en mi IIS tuve que cambiar los permisos directamente a la BD.
Quisiera que me dijeras quien tiene la razón, gracias !
Bueno no lo he probando pero leyendo tu código encuentro que utilizas rs. RecordCount con esta configuración:
rs.CursorType = 3
rs.CursorLocation = 2
rs.LockType = 1
y creo que siempre te va a dar cero, encuentre o no emails. Prueba esta:
rs.CursorType = 0
rs.CursorLocation = 3
rs.LockType = 3
Que si mal recuerdo si te devuelve el recuentro de los registros, con la anterior siempre te dará cero.
De todas formas, para saber si en un recordset has encontrado algún registro o no, yo utilizaría mejor esto
If rs.EOF AND rs.BOF Then
Que esto que tu utlizas
if rs.recordCount=0 then
Ya que mira si la primeras vez que abres el recordset (rs) resulta que ya apunta a nulo (EOF) o (BOF) es que el recordset no contiene ningún registro, porque ningún registro cumple la condición
Aunque el fallo te de en
mmeditcmd.CommandText = mmeditq
Es debido a que intenta ejecutar un query que da error ya que intentaras borras algo que no existe.
Prueba y cuéntame.
Disculpame, no me explique bien, ok, yo instale IIS en mi pc aquí en perú donde lo estoy trabajando, así que probé el ultimo código que te mande en mi pc con el IIS y para que resultara tuve que darle permisos de escritura a la base de datos muy a parte de los permisos de escritura que ya tenia el site.
Luego lo publique vía FTP y me sale error que dice objeto de solo lectura, le pregunto al programador de miami que tiene acceso al servidor web y dice que el "site" tiene permisos de escritura, así que el error es mio por no especificar en el código de mi conexión o en el Recordset algo que me permita insertar un registro.
Por favor quisiera que me dijeras si es error mio o de falta de permisos allá en miami.
Gracias por el tiempo prestado...!
Habría que ver la cadena de conexión que tienes en el fichero conbuy.asp. Si estableces la conexión mediante DSN, tendrás que especificar unas contraseñas de acceso que te habrán facilitado o si lo haces por cadena de conexión.
Más bien creo que sera el Administrador de Miami el que a raíz de tus contraseñas te dará unos permisos u otros.
Mira, mediante ASP tu estableces una conexión y se efectúa o no. Si tu no tienes acceso al administradoor de base de datos que utilices, el administrador de Miami es que te tiene que dar esos permisos.
Así que podríamos decir que lo más probable es que sea el Administrador de Miami el que te tiene que revisar el tipo de permisos que tienes con esa contraseña de acceso.
Tu con:
rs.CursorType = 0
rs.CursorLocation = 3
rs.LockType = 3
Tienes permisos de inserción y actualización. También dependerá de el mensaje de error que te tire la página.
De todas formas pregunta a ese administrador cual es la manera que ellos estipulan para hacer la conexión. Algunos servidores lo hacn con DSN otros con cadena de conexión.
Gracias por la paciencia, si quieres ver el error en vivo esta es la dirección : http://www.buyfromperu.com/email.asp ; y trata de ingresar un email válido y click en "enviar" ; de cualquier forma este es el error :
--------------------------------
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only.
/email.asp, line 31
---------------------------------
Por si las dudas si puedo hacer consultas de cualquier tipo, pero insertar o borrar no me deja.
La conexión que uso es la siguiente :
----------------------------
Dim MM_conbuy_STRING
MM_conbuy_STRING = "DRIVER=Microsoft Access Driver (*.mdb); DBQ=d:/Inetpub/buyfromperu.com/wwwroot/dbbuyfromperu.mdb"
----------------------------
Otra cosita según esta página web :
http://www.asptutor.com/asp/vart.asp?id=5 ;
el : rs.CursorType=0 -- "no permite modificaciones en los registros" particularmente le pondria un 2,3 respectivamente.
Perdón por tanta insistencia pero quisiera saber claramente si esta mal mi código o es cosa del servidor, gracias, espero tus comentarios
Muchísimas gracias por toda la explicación, realmente se nota que eres todo un profesional.
Puede ocurrir que quizás al subir tu base de datos, se grabe con permisos de solo lectura, con lo cual o debes disponer de alguna herramienta que te permita consultar los permisos del archivos, si utilizas un cliente de FTP desde allí mismo podrás comprobarlo.
Por lo demás tu conexión es valida, ademas si utilizas la misma para todo, si te deja consultar t debe dejar insertar, borrar. Si fallara la conexión no podrías ni consultar. Si utilizas diferentes conexiones según consultas o insertas, comprueba el parámetros DBQ de la conexión que coincida realmente con la ubicación de la base de datos, con la ruta que el administrador te proporcione.
Y bueno te diré que la propiedad CursorType de un recordset tan solo establece como podemos movernos por un recorset (adelante o hacia atra o ambas) y como podemos ver las actualizaciones que se realicen por otros usuarios que estén conectados (si inmediatamente o hasta que volvamos a extraer otro recordset de esa tabla). Aun así, no intento desmentir lo que diga una página que ha sido tan útil para todos en el aprendizaje de ASP. Solo te puedo decir que yo con una base de datos SQL Server y
rs.CursorType = 0
rs.CursorLocation = 3
rs.LockType = 3
Inserto, borro y consulto.
Y respecto a la porfía con tu administrador y para salir de dudas, buscate un rpoveedro de hosting gratuito y haz la pruebas. Si no te falla en el proveedor de hosting gratuito tendrías una buena prueba para hacer que el administrador compruebe más a fondo lo que falla.
Un proveedor de hosting gratuito que de acceso a base de datos Access puede ser BRINKSTER. En este enlace tienes más detalles:
http://www.brinkster.com/Hosting/Educational.aspx

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas