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

Coneccion ADODB por favor ayuda

Estas en el tema de Coneccion ADODB por favor ayuda en el foro de Visual Basic clásico en Foros del Web. Hola, bueno mi problema es algo muy basico, pero que no he podido solucionar buscando en google, y leyendo muchas cosas debido a que recien ...
  #1 (permalink)  
Antiguo 09/05/2008, 23:44
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
De acuerdo Coneccion ADODB por favor ayuda

Hola, bueno mi problema es algo muy basico, pero que no he podido solucionar buscando en google, y leyendo muchas cosas debido a que recien hace poco que comence con visual basic

Yo soy programador de PHP, y otros lenguajes, pero es la primera vez que agarro visual y me encuentro con cosas nuevas, principalmente uqe es un lenguaje unicamente para aplicaciones de escritorio. y su forma de programar y hacer cosas es distinta

lo que necesitaria es que alguien me dijera de que forma tengo que armar una coneccion a una base de datos MDB, de access,
de que manera realizar Consultas SQL
INSERT, SELECT
y como recorrer los resultados!

desde ya muchas gracias, se los agradezco, no encontre nada consiso en las faq, por eso pregunto...
porque no entiendo como recorrer los resultados! y no entiendo muy bien que es lo que se va haciendo paso a paso cuando se crea la coneccion y se realizan las consultas

un saludo
  #2 (permalink)  
Antiguo 10/05/2008, 01:14
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Coneccion ADODB

Hola, hay varias formas de conectar a una BD Access dependiendo del Provider la mas usual es mediante JET.OLEDB

Declarar la conexión (tiene que estar marcada la referencia a ADO)
Dim cn As New ADODB.Connection

Abrir la conexión (en este caso la BD está en el mismo directorio de la aplicación)
cn.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & App.Path & "\NombreBD.mdb"

Declarar una variable de tipo String que contendrá la consulta SQL
Dim Sql As String

Agregar datos a una tabla
Sql = "INSERT INTO LaTabla (campo1, campo2, campo3...) VALUES (variable1, variable2, variable3...)"

Modificar datos de una tabla
Sql = "UPDATE LaTabla SET campo1 = variable1, campo2 = variable2, campo3 = variable3... WHERE criterio =..."

Eliminar datos de una tabla
Sql = "DELETE * FROM LaTabla WHERE criterio = ..."

Para ejecutar la consulta
cn.Execute(Sql)

Para recorrer los resultados, tienes que abrir un recordset y mostrar el mismo en un control Grid
Dim rs As New ADODB.Recordset

Abrir el recordset
rs.Open "Select * from LaTabla", cn, adOpenDynamic, adLockOptimistic


Notas:
"criterio" será algo como 'campox = variablex'
Debes tener en cuenta que las variables si son de tipo String deben ir entre comillas simples (') y si son fecha, entre almohadillas (#).

A grosso modo, eso es todo.

Un saludo.
  #3 (permalink)  
Antiguo 10/05/2008, 01:46
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Re: Coneccion ADODB

realmente no te das una idea lo que me ayudaste con eso, entendi todo gracias a los conocimientos de otros lenguajes que tengo, era el puntapie para poder iniciarme en visual basic y bases de datos! muchas gracias! te lo agradecere siempre!
  #4 (permalink)  
Antiguo 10/05/2008, 02:02
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Coneccion ADODB

No se merecen, intentamos ayudarnos unos a otros, dentro de nuestros conocimientos.

Quizá en algún momento tenga que pedirte yo ayuda sobre PHP.

Un saludo.
  #5 (permalink)  
Antiguo 10/05/2008, 15:09
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
De acuerdo Re: Coneccion ADODB

bueno, parece ser que la alegria nos duro poco jaja

tengo 2 problemas

hago lo siguiente
Código:
    Rs.Open SQL, Con, adOpenDynamic, adLockOptimistic
    
    Do Until Rs.EOF = True
        tipo_anticipo.AddItem Rs("tipo")
        Rs.MoveNext
    Loop
y luego hago esto
Código:
    SQL = "SELECT nombre FROM legajos WHERE legajo = '" + num_legajo.Text + "';" 'busco el numero de legajo
    Rs.Open SQL, Con, adOpenDynamic, adLockOptimistic
pero me tira un erro diciendo que el objecto ya esta abierto

y la segunda duda es que
como hago para saber cuantas filas resultado me devolvio la consulta SELECT porque el RecordCount me dice siempre -1, y en el primer caso de select que puse arriba los resultados son 3 y los imprime, pero recordcount sigue valiento -1 en lugar de 3

muchas gracias
  #6 (permalink)  
Antiguo 10/05/2008, 22:34
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Re: Coneccion ADODB por favor ayuda

Hola,te tira error porque la abris 2 veces a la base de datos...y ¿como usas el recordcount? te tieen qeu funcionar,mira un ejemplo:

Código:
rst.Open "SELECT Count(Nombre) as NRegistros FROM Clientes WHERE Nombre = 'seba'"

MsgBox rst.Fields("NRegistros")
te cuenta los clientes con el nombre "seba" de la tabla clientes....lo podes acher con la funcion GetRows() de ADO tambien ,pero no va bien para muchos registros...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #7 (permalink)  
Antiguo 10/05/2008, 23:54
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Coneccion ADODB

Cita:
Iniciado por korg1988 Ver Mensaje
bueno, parece ser que la alegria nos duro poco jaja


pero me tira un erro diciendo que el objecto ya esta abierto

y la segunda duda es que
como hago para saber cuantas filas resultado me devolvio la consulta SELECT porque el RecordCount me dice siempre -1, y en el primer caso de select que puse arriba los resultados son 3 y los imprime, pero recordcount sigue valiento -1 en lugar de 3

muchas gracias
Bueno, eso nos ha ocurrido a todos en algún momento.

Primero, antes de abrir el recordset es conveniente cercionarse de que esté cerrado. Lo puedes hacer de dos formas:

If Rs.State = 1 Then Rs.Close ' la propiedad State indica si está abierto (1) o cerrado (0)

o asignando un nuevo recordset:

Set Rs = New ADODB.Recordset ' aquí automáticamente cerrará el anterior

2º Para que la propiedad RecordCount dé el número de registros del recordset, le tienes que asignar (antes de abrirlo) la propiedad CursorLocation del lado cliente.

El orden debería ser así


Código:
If Rs.State = 1 Then Rs.Close
Rs.CursorLocation = adUseClient
Rs.Open sql, con, adOpenDynamic, adLockOptimistic

Por otra parte, en la consulta si el campo "legajo" es numérico, le tienes que quitar las comillas simples sino, te va a dar error de tipos. Y es conveniente utilizar como carácter de concatenación el ampersand (&) y no el signo mas (+) que podría dar valores erróneos. El punto y coma (;) al final de la sentencia no es necesario.
Si el campo es numérico, la consulta debería quedar así:

SQL = "SELECT nombre FROM legajos WHERE legajo = " & num_legajo.Text


Un saludo.
  #8 (permalink)  
Antiguo 11/05/2008, 14:27
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
De acuerdo Re: Coneccion ADODB por favor ayuda

Cita:
El punto y coma (;) al final de la sentencia no es necesario.
si, tampoco lo es en php jaja, pero lo pongo porque no molesta y bueno es como para hacerlo completo!.... es una costumbre

bueno muchisimas gracias por todo! ....

en realidad lo de hacer un rs.close antes de volverlo a abrir ya se me habia ocurrido pero postie mi problema para que me dijeran una forma correcta de hacerlo porque tenia miedo de uqe eso fuera INCORRECTO aunque funcional pero consumiera muchos recursos en una aplicacion grande, o cosas asi!....

y lo del recordCount me quedo claro

aunque ¿Para que sirve ?
Código:
Rs.CursorLocation = adUseClient
o sea que es lo que hace en readliad, porque no creo que sea algo que solo este aplicado al recordcount y nada mas!

muchisimas gracias ! sos un master explicando!

cuando necesites ayuda en php no dudes de consultarme por privados! en eso la tengo bien clara jaja pero aca :P soy un queso
  #9 (permalink)  
Antiguo 12/05/2008, 02:31
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Coneccion ADODB por favor ayuda

Cita:
Iniciado por korg1988 Ver Mensaje
y lo del recordCount me quedo claro

aunque ¿Para que sirve ?
Código:
Rs.CursorLocation = adUseClient
o sea que es lo que hace en readliad, porque no creo que sea algo que solo este aplicado al recordcount y nada mas!
Hola, la biblioteca de cursores ADO del lado cliente tiene algunas propiedades que devuelven un valor que no lo devuelve (o no lo admite) el cursor del lado servidor, algunas de las mas importantes:

RecordCount = Devuelve el número de registros (filas) del recordset.

AbsolutePosition = número de fila actual.

Bookmark = marcador fijo de la fila actual.

PageCount = número de páginas del recordset (un entero que es el valor de RecordCount dividido entre el valor de PageSize). El valor de la propiedad PageSize por defecto es 10.

AbsolutePage = página actual.

No sé si quedó claro (no soy docente), bueno recibe un saludo.
  #10 (permalink)  
Antiguo 12/05/2008, 05:57
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Re: Coneccion ADODB por favor ayuda

creo que entendi... muchas gracias, voy a probar todo
eso de page creo que me servicira para paginar resultados! si no estoy loco no ?! jajaj
bueno voy a intentar hacer unas pruebas


no sos docente pero lo haces muy bien lo de explciar! gracias
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:06.