Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: sBio79 en Marzo 29, 2016, 04:35:22 am
-
Hola a todos tengo un aplicativo en vb6 el cual venia ocupando access como bd pero decidi migrar a mysql
el tema de mi consulta es la siguiente:
tengo una tabla llamada Folios y tengo 2 registros para controlar la numeracion
ID FOLIOS
1 234
2 345
estos se actualizan desde dos formularios diferentes
el problema que tengo es que aveces al modificar el reg con ID= 1 el campo FOLIOS 234 a 400 cuando lo consulto desde el otro formulario me sigue arrojando el recordeset el valor anterior 234 siendo que ya fue actualizado a 400, ahora bien he hecho una consulta desde otro form y me arroja el valor anterior de 234 porque? no lo se, he consultado directamente mi tabla de mi base desde myphpadmin y la modificacion esta hecha valor 400 y desde otro form de un proyecto aparte hago la consulta y la modificacion me parece correcta igual 400 alguna idea amigos foristas
esta es mi conexion
On Error GoTo ErrorHandler
Set Bd_Mysql = New ADODB.Connection
Bd_Mysql.ConnectionString = "driver={MySQL ODBC 3.51 Driver};" & _
"Server=" & ip_strServidor & ";" & _
"Port=3306;" & _
"Database=SOFT;" & _
"User=root;" & _
"Password=;" & _
"Option=3;"
Bd_Mysql.Open
Exit Sub
ErrorHandler:
como dije soy nuevo en mysql no se sime falta alguna configuracion ya que tambien batalle por que no usaba yo
rs.CursorLocation = adUseClient
y siempre me arrojaba rs.recorcount -1
mi consulta
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM folios WHERE id=" & val(1), Bd_Mysql, adOpenStatic, adLockOptimistic, adCmdText
MsgBox rs.Fields("FOLIO")
alguna idea que me puedan tirar gracias
-
No creo que el problema sea de MySQL sino de tu recordset. Recuerda que el recordset esta en memoria, si declaraste la variable a nivel global seguirás viendo 234 en todos los formularios hasta que actualices ese recordset, o sea, vuelvas a tirar la consulta, si tiras la consulta de nuevo con el rs declarado de forma global te arrojara error, para ello antes del rs.Open deberás poner:
If rs.state Then rs.close
Si el rs lo declaraste en el procedimiento (como se ve en tu código) entonces quizá se trata de que la modificación que hiciste a 400 aun no la terminaste, o sea, no hiciste un Commit.
s.e. u o.
Saludos
-
Es un proyecto que hice hace como 3 años fuel el primero y utilizaba yo rs.AddNew, rs.Update y abri la conexion y la cerraba en cada consulta, funciona bien, ahora he decidido cambiar utilizar SQL puro abrir una sola conexion ya lo he hecho en otros proyectos con access pero ahora que estoy iniciando en mysql me he esta costando un poco, rs lo tengo declarado en el procedimiento, si utilizo transacciones de hecho si despues de la modificacion consulto directamente en mi tabla con myphpadmin veo reflejado la actualizacion, si lo hago desde otro proyecto tambien el rs. me refleja la actualizacion, pero si lo hago desde el proyecto en el cual estoy trabajando no sigoviendo el mismo
-
Yacosta he revisado, no lo tengo declarado a nivel global, aplique lo que me sugeriste
If rs.state Then rs.close
mi error persiste alguna otra sugerencia que me pudieran dar
-
Colocar comando
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM folios WHERE id=" & val(1), Bd_Mysql, adOpenStatic, adLockOptimistic, adCmdText
rs.Requery
MsgBox rs.Fields("FOLIO")
-
Compañeros foristas, lo he solucionado no me daba cuenta que cerraba la conexion antes de realizar la consulta