problemas para insertar datos
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 verás 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.
Información técnica (para personal de soporte técnico)
Tipo de error:
Microsoft JET Database Engine (0x80004005)
La operación debe usar una consulta actualizable.
/save_libro.asp, línea 58
Tipo de explorador:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Página:
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
es el hecho de insertar un nuevo registro en mi base de datos.
Antes que nada como lo verás 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.
Información técnica (para personal de soporte técnico)
Tipo de error:
Microsoft JET Database Engine (0x80004005)
La operación debe usar una consulta actualizable.
/save_libro.asp, línea 58
Tipo de explorador:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Página:
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
