Crear un registro nuevo en una base de datos

Iniciado por icisneros, 19 Diciembre 2006, 19:06 PM

0 Miembros y 1 Visitante están viendo este tema.

icisneros


AdoMensajes.Recordset.AddNew                 

AdoMensajes.Recordset.Fields("origen").Value = Usuario


En esta parte de código me da un error en la segunda linea, ¿porqué? no puedo meter los datos así en la base de datos, me deja leer pero no escribir.

Como puedo crear una nueva fila en la base de datos y guardar ciertas variables en sus campos?

Un saludo!


CeLaYa

checa como la estas abriendo, si puedes leer entonces la estas abriendo como solo lectura
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

Hans el Topo

#2
de primeras...¿k error te da?

Viendo que utilizas un controlcito y dando por correcto el nombre del campo nose que puede fallar.


los campos se pueden meter asi

adomensajes.recordset!nombrecampoapelo=valor
adomensajes.recordset![nombrecampoapelo]=valor


una vez que metas te mueves a un registro para que refresque


adomensajes.recordset.update
'o
adomensajes.recordset.movefirst


muchas veces va más rapido visual que la base de datos y suele dar problemas de refrescos xD

en el caso que tengas el recourdsource en diseño agregalo también en tiempo de ejecución (a veces da fallos)

como comento celaya comprueba los permisos de la base de datos y los de conexión






 

icisneros

#3
El error que me da lo adjunto como imagen al mensaje y al pulsar en depurar me lleva a esa línea de código.

¿Cómo puedo revisar los permisos de la base de datos?

Permisos de escritura tiene porque yo puedo conectarme a ella a mano y escribir datos. Supongo que el control Ado tendra algun filtro de permisos tambien, como puedo darle permisos de escritura para ver si es eso?

EDITADO

He comprobado los permisos del objeto ADO y tenia mode unknow y lo he puesto en readwrite y me sigue dando el mismo error.

Tambien he probado a escribir con ado.recordset!campo y da exactamente el mismo error.

Tambien he probado a intentar ejecutar la sentencia SQL "a pelo" pero no me deja, he leido por internet que se hacia:

Adodc.recordset.execute("SQL")

Pero a mi no me reconoce la opcion execute en el recordset, en los ejemplos que he leido en internet creaban el recordset desde codigo y yo he añadido el objeto en el formulario, supongo que no habra problema.

Espero que podais ayudarme, gracias por leer.

¿Alguna otra sugerencia?

Un saludo!

CeLaYa

pues según lo que pones en las imagenes el error se provoca porque no encuentra el campo "origen" en la tabla, checa si lo tienes bien escrito, o si usas una consulta SQL que hayas seleccionado el campo:


Adodc.recordset.execute("SELECT campo1,campo2, Origen FROM...")
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

Hans el Topo

Este post se lo recomiendo a todos los que utilizan bases de datos xD a mi me vino muy bien
intenta hacerlo en tiempo de ejecución enviando la sentencia directamente sobre la conexión (cn.execute sql)

Cita de: soplo en 22 Junio 2006, 20:40 PM
No has leído mucho la verdad

Declarar variables
Dim Cn as adodb.connection, Cmd as adodb.Command, Rec as adodb.Recordset
Dim Sql as string


Iniciar la conexión
set Cn=new adodb.connection
Cn.open la_string_de_conexión


Ejecutar un comando
sql="delete tabla where dato='" & valor & "'"
Cn.execute sql


Abrir un recordset
set rec=new adodb.recordset
rec.open string_de_recordsource,Cn,,adcmdtext


Acceder a un campo
p$=rec!dirección

Acceder a las propiedades de un campo
p$=rec.fields("nombre_campo").propiedad
donde propiedad puede ser 'name', 'type','value', ..., etc

Utilizar un objeto command
set Cmd=new adodb.command
cmd.commandtype=adcmdtext
cmd.activeconnection=cn
cmd.commandtext=sql
cmd.execute

El tipo puede ser desde una tabla a una sentencia sql pasando por un procedimiento almacenado.

Ejemplo de un comand que genera un recordset
dim Cn as adodb.connection, Cmd as adodb.command, Rec as adodb.Recordset

Set Cn=new adodb.connection
cn.open connectionstring, usuario, clave

set Cmd=new adodb.command
set Cmd=new adodb.command
cmd.commandtype=adcmdtext
cmd.activeconnection=cn
cmd.commandtext="select * from tabla order by nombre"
Rec=cmd.execute


Y esto en el modelo de datos ADO. El DAO es mas rápido y para cosas pequeñas mejor (especialmente con access). ADO es mas completo y para bases de datos sql.

RTFM