Conexion BBDD ADO

Iniciado por W0lFy, 9 Abril 2010, 14:48 PM

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

W0lFy

Gente tengo una duda, porque no se porque este codigo me salta un error... alguien podría ayudarme? es que llevo toda la vida realizando consultas y modificando sobre ellas y ahora  no puedo hacerlo porque me dice lo siguiente:

-2147467259(80004005)
Error en la actualizacion basada en consultas: no se encontro la fila para actualizar.

codigo:
Código (vb) [Seleccionar]

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset

Private Sub Command1_Click()
   
    rs.Open "SELECT * from usuarios where USR_Tipo like 'v'", con, adOpenDynamic, adLockPessimistic
    rs.MoveFirst
    rs.Update
    If Not rs.EOF Then
    While Not rs.EOF
         rs("USR_password").Value = "uiid2daa"
         rs.Update
         rs.MoveNext
    Wend
    End If
   
    rs.Close
    con.Close
End Sub

Private Sub Form_Load()
connstr = "Driver={MySQL ODBC 3.51 Driver};" & _
          "Server=192.168.1.1;" & _
          "Port=3306;" & _
          "Database=test;" & _
          "User=root;" & _
          "Password=pass;"
          With con
            .ConnectionString = connstr
            .Open
          End With
End Sub


Me estoy volviendo loco, alguien podría ayudarme? lo unico que quiero es modificar el campo USR_Password y no lo consigo. Un saludo!
K@NuT0

ssccaann43 ©

Código (vb) [Seleccionar]

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset

Private Sub Command1_Click()
   
    rs.Open "UPDATE usuarios set USR_password='uiid2daa' where USR_Tipo = 'v'", con, adOpenDynamic, adLockPessimistic
'Alli actualizaras el campo password, donde el USR_Tipo sea igual a 'v'
    rs.Close
    con.Close
End Sub

Private Sub Form_Load()
connstr = "Driver={MySQL ODBC 3.51 Driver};" & _
          "Server=192.168.1.1;" & _
          "Port=3306;" & _
          "Database=test;" & _
          "User=root;" & _
          "Password=pass;"
          With con
            .ConnectionString = connstr
            .Open
          End With
End Sub
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

BlackZeroX


Te recomiendo realises la conexion ado y crees tus funciones aparte dejando el form limpio de este tipo de cosas... asi lo hago yo en .NET ADO.NET aun que este ado la funcion deberia seria devolverte el RecordSet, despues trabajas sobre este con la conexion cerrada y en otra funcion guardas el RecordSet pasandolo en dicha funcion!¡.

Dulces Lunas!¡.
The Dark Shadow is my passion.

seba123neo

aparte el codigo le faltan chequeos y esta mal planteado...y por un tema que no voy a explicar aca te recomiendo que no uses As New...
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Shell Root

#4
Yá me entro la curiosidad, porque no se debe usar As New?. Lo uso mucho en VB.Net.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

seba123neo

es que en .NET es otra cosa, si se puede usar de esa forma...pero en VB 6 no esta recomendado hacerlo, por un tema de performance, claro que uno ni se da cuenta...pero bueno si en todos lados dicen que no debe hacerse esto, algo de razon tendran ¿no?, por mas que uno no se de cuenta.aca una cita de una web:

CitarDon't Dim .. As New

Dim obj As MyClass
Set obj = New MyClass

Why write 2 lines when you can just say Dim obj As New MyClass?

Never Dim anything As New if you're concerned about speed. VB6 will treat such a variable as an auto-instantiated variable. Every time you use it, VB will check if it should be instantiated. This will cost you some extra CPU cycles.

cita de el guille:

CitarBuenas normas de conducta con los objetos

La forma que acabamos de ver de crear un objeto es la más recomendable. El porqué es que así sólo reservamos espacio real cuando vamos a usar el objeto. Me explico: Veamos otras formas de declarar/asignar variables de objetos:



Dim miNombre As Object
Set miNombre = New cNombre



Esta sería la forma de crear un objeto del que no sabemos que clase será. En nuestro caso, es un desperdicio de código (interno del VB) y recursos (no demasiados) que no es necesario. Cuando se usa una variable declarada As Object, el Visual Basic no sabe, hasta que se está ejecutando, de que clase será y reserva unas líneas (ocultas) de código para poder hacer su trabajo cuando esté ejecutándose el programa.



Dim miNombre As New cNombre



De esta forma, al mismo tiempo que declaramos la clase, le indicamos al VB que en cuanto ejecute el módulo en el que se encuentra la declaración, cree el objeto. Aunque ese objeto nunca se use, se creará en memoria y ahí estará hasta que se destruya... ¿Desperdicio de recursos? Más bien sí.

Pero tanto esta última forma como la primera, es la más rápida y menos consumidora de código interno y recursos o tiempo que el Visual necesita para crear objetos.

Esto es por la sencilla razón que ya le estamos indicando cómo va a ser ese objeto y por tanto él sabe cómo es y cuanto necesitará para albergarlo... por supuesto, esto sólo se puede hacer con objetos que actualmente hay en las referencias o en nuestro proyecto.



¿Qué método usar para declarar variables de objetos?

Si sabemos el tipo de antemano, usaremos el primer método:



Dim miNombre As cNombre



Cuando queramos usarlo, sólo debemos asignarlo mediante SET y ya estará disponible.

Habrá ocasiones, la mayoría, en que se necesite usar el NEW junto con la declaración, un caso es para usar colecciones, ya que no se comporta de igual forma. La razón de este "extraño" comportamiento, al menos en forma práctica, la teórica te la dejo a ti, para que profundices con los manuales del Visual Basic, es que al usarlo sin NEW sólo tenemos una copia "fija" de esa variable. Por otro lado, con NEW obtendremos una nueva copia después de destruir la copia anterior. Esto lo verás prácticamente en el código de ejemplo para probar todo esto.

creo que queda claro...

PD: Alex@ShellRoot te edite el post sin querer, no modifique nada.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

BlackZeroX

La cosa por lo que entiendo es que el .NET el FrameWork que ejecuta el Script... bueno el "Programa" tiene un modulo que administra la memoria, por decirlo en Español y en VB6 no esta esto pero bueno!¡.

Dulces Lunas!¡.
The Dark Shadow is my passion.

W0lFy

#7
Cita de: BlackZeroX▓▓▒▒░░ en 10 Abril 2010, 08:32 AM

Te recomiendo realises la conexion ado y crees tus funciones aparte dejando el form limpio de este tipo de cosas... asi lo hago yo en .NET ADO.NET aun que este ado la funcion deberia seria devolverte el RecordSet, despues trabajas sobre este con la conexion cerrada y en otra funcion guardas el RecordSet pasandolo en dicha funcion!¡.


Buenas, a que te refieres con esto? yo me puedo crear una funcion que realice todo esto, pero aque te refieres con la conexion ADO?
Citar
rs.Open "UPDATE usuarios set USR_password='uiid2daa' where USR_Tipo = 'v'", con, adOpenDynamic, adLockPessimistic

Gracias ssccaann43 no sabia que se podia utilizar SQL para actualizar los campos!
K@NuT0