** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Como Actualizar un recorset
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoComo Actualizar un recorset

 Responder Responder
Autor
Mensaje
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Tema: Como Actualizar un recorset
    Enviado: 24/Septiembre/2008 a las 13:56
Hola tengo una duda sobre Recordsets
 
Me he creado un recordset y he pasado los valores de cada campo a cajas de texto.
 
    Dim RS As New ADODB.Recordset
    Dim CN As New ADODB.Connection
    Dim ComandoSQL As String
    Set CN = CurrentProject.Connection
   
   
    Dim RS2 As New ADODB.Recordset
    Dim CN2 As New ADODB.Connection
    Dim ComandoSQL2 As String
    Set CN2 = CurrentProject.Connection
   
     
 '   ComandoSQL = "Select PE_id_perfil, In_Id_Instancia from (SELECT T_Instancias.IN_PrimerApellido, T_Instancias.IN_SegundoApellido..........."
     
     txt_id_perfil = RS.Fields(0)
 
 
Pero ahora quiero que se puedan actualizar esos campos y creía que se haría de la manera inversa
 
 
     RS.Fields(0)   =  txt_id_perfil
 pero me da un error que me dice que el recordset está en un estado que no admite actualizaciones.
 
 
y he encontrado esto pero nose como funciona...
 
     RS.Update([Fields(0)], IP_id_perfil) = txt_perfil
 
¿Alguien sabe como puedo guardar los campos en el recordset??
 
También he intentado con la funcion de access de
 
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
 
pero tampoco funciona....
 para guardar, pero tb me da error
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3046
Enlace directo a este mensaje Enviado: 24/Septiembre/2008 a las 15:01

abres el recordset
recorres los registros encontrados
asignas valor para cada campo/columna
antes de pasar al siguiente registro coloca RS.update

Atte




https://tucondominioaldia.net
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 09:37
y si he creado un recorset en el evento List_click y quiero referirme a ese mismo recordset desde el evento bt_guardar puedo hacerlo de alguna manera?? o tengo que crearme otro recordset igual?
 
He intentado recorrer el recordset pero en cuanto entra a asignar el valor al campo me vuelve a saltar el error de que el recordset no admite actualizaciones.
 
Nose si estoy recorriendolo bien:
 
    For i = RS.BOF To RS.EOF
     RS.Fields(0) = Me.IP_id_perfil
     RS.Fields(3) = Me.txt_causa
     RS.Fields(5) = Me.txt_Expediente_Numerico
     RS.Fields(6) = Me.txt_Experiencia
     RS.Fields(7) = Me.txt_OtrosEstudios
     RS.Fields(8) = Me.txt_Idiomas
     RS.Fields(9) = Me.txt_Publicaciones
     RS.Fields(10) = Me.txt_Informatica
     RS.Fields(11) = Me.txt_Otros
     RS.Fields(13) = Me.chk_Baremado
     RS.Fields(15) = Me.txt_Entrevista
     RS.Fields(16) = Me.txt_Prueba
     RS.Fields(21) = Me.txt_Observaciones
     RS.Fields(22) = Me.txt_Entrevista_Dia
     RS.Fields(23) = Me.txt_Entrevista_Hora
     RS.Fields(25) = Me.chk_baremado2
     RS.Update
    Next
 
Si me pudieran decir alguna manera mejor y que me pueda funcionar, lo agradecería.
 
 
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 10:16
o sería
 
rs.update
     RS.Fields(0) = Me.IP_id_perfil
     RS.Fields(3) = Me.txt_causa
     RS.Fields(5) = Me.txt_Expediente_Numerico
     RS.Fields(6) = Me.txt_Experiencia
     RS.Fields(7) = Me.txt_OtrosEstudios
     RS.Fields(8) = Me.txt_Idiomas
 
pero me sigue diciendo que no se puede actualizar el recordset
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 11:32
no necesito recorrer todos los registros solo actualizar el recordset en el que me encuentro en el momento que quiero guardar.
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 12:23
Como se abre el recordset para que tenga permiso de actualización??
 
RS.open .................????
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3046
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 12:39
RS.open tucadenasql,CN2,1,2'(cursor y bloqueo de registros. Creo que aqui tienes el problema)
Cuando haces click en la lista tomas el id del registro. Ese id lo incluyes en la cadena de manera de cargar solo el registro deseado, algo similar a:
idSel=valor de la lista(utiliza una funcion de conversión si es numérico: Cin,Cdbl); si es de texto, debe ir encerrado entre comillas simples o tipográficas.

cadenaSQL="select cmpo1, campo2 FROM tutabla WHERE id="&
idSel
o
cadenaSQL="select cmpo1, campo2 FROM tutabla WHERE id='" & idSel & "'"
comprueba que hay registros:
If not RS.EOF then
    rs("uncampo")=un valor
    ...
else
    msgbox("no se encuentra...")
end if
rs.update
rs.close
set rs=nothing
https://tucondominioaldia.net
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 13:09

Muchas Gracias

He conseguido hacerlo pero nose por qué me dice que la operación no es permitida si el objeto está abierto, asíque lo que he hecho ha sido cerrarlo antes, pero es muy chapuza. No se donde hay q abrirlo te dejo todo el código del recorset a ver si me puedes decir que es lo que hago mal...
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 25/Septiembre/2008 a las 13:11
    'Declaro el recorset y la conexion
    Dim RS As New ADODB.Recordset
    Dim CN As New ADODB.Connection
    Dim ComandoSQL As String
    Set CN = CurrentProject.Connection
 
    ComandoSQL = "Select * from T_Inst_Per Where ((T_Inst_per.IP_Id_Instancias = " & Me.IN_Id_Instancia.Value & ") and (IP_id_Perfil = " & Me.lst_perfil.Column(0) & "))"
       
 Set CN = CurrentProject.Connection
 
    'esta es la chapuza pero que funciona....
    Rs.close
 
    RS.Open ComandoSQL, CN, adOpenDynamic, adLockOptimistic
     
     RS.Fields(0) = Me.txt_id_perfil
     RS.Fields(3) = Me.txt_causa
     RS.Fields(5) = Me.txt_Expediente_Numerico
      rs.update 
 
 
nose por que tengo q cerrar antes de actualizar...
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3046
Enlace directo a este mensaje Enviado: 26/Septiembre/2008 a las 02:26
No veo por qué sucede...pero cambia la linea rs.close por set rs= new adodb.recordset.
Es recomendable que verifiques si existe registro;antes de asignar valor a los campos...
if NOT rs.eof then...
      ...
     rs.update
else
    ...mensaje para el usuario
end if
atte carlos
https://tucondominioaldia.net
Arriba
informaticacide Ver desplegable
Nuevo
Nuevo


Unido: 15/Septiembre/2008
Localización: España
Estado: Sin conexión
Puntos: 0
Enlace directo a este mensaje Enviado: 26/Septiembre/2008 a las 11:31
Muchas Gracias funciona perfectamente
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable