problemas para insertar datos

pumaz10
26 de Junio del 2004
Ojala me puedas ayudar con un problema que tengo con algo que parece ser muy sencillo,
es el hecho de insertar un nuevo registro en mi base de datos.

Antes que nada como lo vers en mi codigo , trabajo con OLE DB y no con OBCD asi que especifo
el provedor en la cadena de conexion. Ahora bien el hecho es que cuando intento insertar mi registro
me marca el siguiente error.


Informacin tcnica (para personal de soporte tcnico)

Tipo de error:
Microsoft JET Database Engine (0x80004005)
La operacin debe usar una consulta actualizable.
/save_libro.asp, lnea 58


Tipo de explorador:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Pgina:
POST 80 bytes to /save_libro.asp

Datos de POST:
titulo=salamandra&autor=morrist&editorial=INBA&editorial1=&precio=500&B1=Guardar

mi codigo es el siguiente (no hagas mucho caso de lo que tiene que ver con los datos que recojo
de un formulario), te debo mencionar que uso el objeto recordset primero para recuperar
un numero ("id_articulo") que es mi llave primaria y que identifica a cada articulo de mi
tabla articulos, esto es para cuando inserto mi nuevo articulo no necesite saber en que numero
voy de articulo y sea un proceso totalmente transparente para el que este insertando un nuevo
articulo.



<%
'primeramente tenemos que recuperar los datos del formulario (me aseguro que sean cadenas de texto y numeros segun correponda)

Dim titulo,autor,editorial,precio

titulo = CStr(request.form("titulo"))
autor = CStr(request.form("autor"))
precio = CSng(request.form("precio"))

'en caso de que asignemos una nueva editorial tomaremos en cuenta ese dato (si esta vacio no)
if request.form("editorial1") = "" then

editorial = CStr(request.form("editorial"))

elseif request.form("editorial1") <> "" then

editorial = CStr(request.form("editorial1"))

end if


'lo despliego en pantalla para ir viendo el proceso
response.write ("variables "& titulo & autor & editorial & precio)

'variables para la conexion y el recordset y la cadena de insercion SQL
Dim cobjeto, robjeto, isql

'posteriormente asigno la instancia de el objeto conexion a "cobjeto"
set cobjeto = Server.CreateObject("ADODB.Connection")

'luego abrimos la conexion a la base de datos "bookstore"
cobjeto.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:bookstore.mdb"


'asignamos una instancia del objeto recordset a la variable "robjeto"
set robjeto = Server.CreateObject("ADODB.Recordset")

'posteriormente hacemos una consulta que no devuelva el ultimo "id_articulo" de la tabla articulos

robjeto.open "select id_articulo from articulos order by id_articulo desc", cobjeto

'lo guardo en la siguiente variable y lo aumento en una unidad
id_articulo = CSng( robjeto("id_articulo") + 1 )

'la despliego para ver el proceso
response.write ("<br>"& id_articulo)

'ahora formamos la instruccion que insertara los nuevos datos del libro en la base de datos
'sentencia isql (insertar sql)

isql = "insert into articulos (id_articulo,titulo,autor,editorial,precio) values ("&id_articulo&",'"&titulo&"','"&autor&"','"&editorial&"',"&precio&")"

'la despleigo para ver si se formo como esperaba
response.write ("<br>"&isql)

'ahora ejecutamos dicha sentencia (todo funciona bien hasta aqui, en el momento en que quiero ejecutar el insert )
cobjeto.Execute isql 'si comentas esto correr pero sin insertar el registro

'luego cerramos la conexion y el recordset
'primero el recordset
robjeto.close
'liberamos espacio de memoria
set robjeto = Nothing

cobjeto.close

'liberamos espacio de memoria
set cobjeto = Nothing

%>

en si este codigo es lo que trata de hacer el anterior , claro ya sabes con el hecho de recoger datos de un formulario se incrementa el codigo

<%
set cobjeto = Server.CreateObject("ADODB.Connection")

cobjeto.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:bookstore.mdb"

cobjeto.Execute "insert into articulos (id_articulo,titulo,autor,editorial,precio) values (118,'La salamndra','Morrist West','Planeta',350.23)",,adCmdText + adExecuteNoRecords

' en la ayuda del IIS del XP profesional me dice que ponga los dos parametros en el Execute pero son opcionales

%>

pero me sigue generando el mismo error