Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

refresh a una base de datos

Estas en el tema de refresh a una base de datos en el foro de Visual Basic clásico en Foros del Web. Hola a todos. Tengo 2 programas abiertos, cada uno se conecta a una base de datos diferente. en el primer programa se realizan altas, bajas ...
  #1 (permalink)  
Antiguo 30/05/2011, 13:46
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
refresh a una base de datos

Hola a todos.

Tengo 2 programas abiertos, cada uno se conecta a una base de datos diferente.

en el primer programa se realizan altas, bajas y cambios, ya que se realizaron todas las modificaciones que se quieren, estos se pasan a la base de datos del programa 2.

el programa 2 es de consulta y se verifica que se hayan echo los cambios realizados, pero si esta abierto no se ven los cambios, hay que cerrar la conexion y volver a ejecutar el programa 2.

como puedo hacerle para que se actualiza la base de datos del programa 2 sin tener que cerrar la conexión.

Estoy programando en visual basic 5 con bases de datos sql server.

Espero me puedan ayudar, gracias
  #2 (permalink)  
Antiguo 30/05/2011, 15:05
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: refresh a una base de datos

Hola!!
Las consultas de tu programa 2 no es con un query a la BD? (un select * from tabla where campo1=algun_valor), como es que haces las consultas?
  #3 (permalink)  
Antiguo 30/05/2011, 15:09
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

hola, gracias por responder.

asi como las pones son las consultas.
Lo que pasa es que al hacer las consultas no se ven los cambios, los datos no han cambiado.
  #4 (permalink)  
Antiguo 31/05/2011, 06:36
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: refresh a una base de datos

Esta es una consulta sencilla:

Código vb:
Ver original
  1. Private Sub cmdConsulta_Click()
  2.     Dim CONEX As ADODB.Connection
  3.     Dim REC As ADODB.Recordset
  4.  
  5.     Set CONEX = New ADODB.Connection
  6.     Set REC = New ADODB.Recordset
  7.  
  8.     CONEX.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
  9.         & "Data Source=C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Neptuno.mdb;" _
  10.         & "Persist Security Info=False"
  11.     CONEX.Open
  12.  
  13.     REC.Source = "SELECT * FROM CLIENTES WHERE CIUDAD='Londres'"
  14.     REC.Open , CONEX, adOpenDynamic, adLockReadOnly
  15.  
  16.     If REC.EOF = False Then
  17.         txtCiudad.Text = REC!CIUDAD
  18.     Else
  19.         MsgBox "NO HAY DATOS!!", vbYesNo
  20.     End If
  21.    
  22.     If CONEX.State = 1 Then CONEX.Close
  23.     If REC.State = 1 Then REC.Close
  24.    
  25.     Set CONEX = Nothing
  26.     Set REC = Nothing
  27. End Sub

Compara con la tuya, especialmente en la linea:

Código vb:
Ver original
  1. REC.Open , CONEX, adOpenDynamic, adLockReadOnly

Esta informacion te puede ayudar:


La navegacion del cursor en el recordset:

• adOpenForwardOnly - el cursor se mueve hacia delante solamente en el recordset

• adOpenKeyset - el cursor se mueve hacia delante y atras en el recordset. permite actualizar el recordset y los cambios se reflejan en los recordset de todos los usuarios

• adOpenDynamic - el cursor se mueve hacia delante y atras en el recordset. permite actualizar el recordset y los cambios se reflejan en los recordset de todos los usuarios inmediatamente sin necesidad de hacer una sincronizacion

• adOpenStatic - se muestra una copia estatica de la BD y los cambios no se ven. el cursor se mueve hacia delante y atras en el recordset.

El bloqueo del registro:

• adLockReadOnly - default, de solo lectura
• adLockPessimistic - forza a la BD a bloquear el registro completo antes de editar
• adLockOptimistic - bloquea los registros despues de llamar la instruccion UPDATE
• adLockBatchOptimistic - permite actualizacion por lotes, en vez de actualizar un registro a la vez

Fuente:
http://www.dotnetspider.com/forum/Vi...?ForumId=16958

Última edición por lokoman; 31/05/2011 a las 06:47
  #5 (permalink)  
Antiguo 31/05/2011, 08:11
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

Hola, perdón ya no pude contestarte ayer.

Asi tengo la línea que me dijiste le pusiera especial atención:
rsd.Open sSql, base, adOpenKeyset
  #6 (permalink)  
Antiguo 31/05/2011, 09:14
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: refresh a una base de datos

Prueba con "adOpenDynamic"... una pregunta: lo que quieres es que se refleje en el programa 2 los cambios que haces desde el programa 1 SIN TENER QUE DARLE CLIC AL BOTON DE CONSULTA?, para eso debes tener un TIMER que ejecute cada "X" segundos la rutina de consulta, seria algo asi:

Código vb:
Ver original
  1. Private Sub Timer_Timer()
  2.     cmdConsulta_Click
  3. End Sub

El timer con un interval=3000 (cada 3 segundos), ejecuta la consulta. El CODE que te mostré abre un nuevo recordset cada vez que se da clic y cierra el mismo al final de la rutina. Si vas a necesitar los datos del recordset fuera de la rutina, debes declarar el recordset como publico
  #7 (permalink)  
Antiguo 31/05/2011, 10:17
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

asi es, quiero que se reflejen los cambios del programa 1 en el programa 2, pero al volver ejecutar la consulta.

cuando ya estan los cambios echos en el programa 1 los paso a la base de datos del programa 2 para revisión y al momento de ejecutar las consultas no se ven los cambios se quedan los datos anteriores.
Reviso la base de datos del programa 2 y si estan los cambios, pero desde el programa no se ven. Hasta que cierro y abro otra vez el programa 2 se ven los cambios

Estaba viendo algo sobre un bloqueo pesimista y optimista, crees que sea algo de eso?
  #8 (permalink)  
Antiguo 31/05/2011, 11:10
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: refresh a una base de datos

El bloqueo (como te describí mas arriba) sirve para la edición de los registros... como es para consulta, read only estaria bien.

Postea tu CODE de consulta del programa 2, para revisarlo
  #9 (permalink)  
Antiguo 31/05/2011, 11:28
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

sSql = "Select * from temas where temclave = 1"
rs.Open sSql, BD, adOpenKeyset
  #10 (permalink)  
Antiguo 31/05/2011, 12:59
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

Hasta ahorita me fije que en tu ejemplo: 1.Private Sub cmdConsulta_Click()
abres y cierras la base de datos.

En mi caso entro al sistema y abro la base de datos y se cierra hasta que se le da clic en el botón salir.
Se tiene que abrir y cerrar la base en cada procedimiento?
  #11 (permalink)  
Antiguo 31/05/2011, 14:45
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: refresh a una base de datos

Lo que si debes cerrar es el recordset, ya que cada vez que das clic al boton, se crea una nueva instancia (segun mi CODE, solo pusiste la instruccion del recordset) y la cierra al final, liberando recursos.

Todo depende de lo que desees hacer, las conexiones/recordset globales los uso si los necesito en varios FORMs, en cambio, si solo tengo un FORM en donde solo desplegaré unos datos de una consulta "x", pues de nada me sirve tener una conexion/recordset activo si no estaré usando nada después de consultar.

Tambien puedes tener una conexion global, y un recordset local o viceversa...

Haz hecho las modificaciones que te mencioné? No te funciona?
  #12 (permalink)  
Antiguo 31/05/2011, 15:04
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

ya hice lo de cambiar a adOpenDynamic, pero sigue igual, no se ven los cambios hasta que cierro conexión y vuelvo abrir.

mencionan en una página esto BD.Properties.Refresh, que es para actualizar los datos de la base, no lo he probado, estaba cambiando adOpenKeyset por adOpenDynamic, crees que sirva?
  #13 (permalink)  
Antiguo 31/05/2011, 15:04
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

ya hice lo de cambiar a adOpenDynamic, pero sigue igual, no se ven los cambios hasta que cierro conexión y vuelvo abrir.

mencionan en una página esto BD.Properties.Refresh, que es para actualizar los datos de la base, no lo he probado, estaba cambiando adOpenKeyset por adOpenDynamic, crees que sirva?
  #14 (permalink)  
Antiguo 01/06/2011, 14:46
 
Fecha de Ingreso: enero-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: refresh a una base de datos

Tal parece que ya funcionó.

cambie todos los adOpenKeyset por adOpenDynamic y puse en cada update, delete e insert un BeginTrans antes de ejecutar el sql y después de ejecutarlo puse CommitTrans

Agradezco mucho la ayuda.
  #15 (permalink)  
Antiguo 02/06/2011, 07:09
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: refresh a una base de datos

Que bien!

Etiquetas: refresh
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:52.