SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: patitofeo en Viernes 13 de Enero de 2006, 18:01

Título: Acceso A Db Desde Vb
Publicado por: patitofeo en Viernes 13 de Enero de 2006, 18:01
No tengo mucha esperiencia en esto:

      Para las Bases de Datos,
                            ¿Data environment, ADO o DAO?

Gracias         :angry::kicking::angry:
Título: Re: Acceso A Db Desde Vb
Publicado por: hdr en Viernes 13 de Enero de 2006, 18:52
hola
el dataenvironment utiliza ado para la conexion a la base de datos.
con ado te puede conectar a cualquier base de datos desde que tengas instalado un provedor oledeb.
con dao solo puedes conectarte a bases de datos jet (access).
Título: Re: Acceso A Db Desde Vb
Publicado por: patitofeo en Viernes 13 de Enero de 2006, 19:24
Gracias

Esa información ya la tenia mas o menos. He estado leyendo algun manual por ahi. Este post era algo más a nivel personal. Buscaba alguna recomendación.

Para el proyecto que pretendo me vale cualquiera de ellos pero ninguno me convence. era a ver con cual estabais vosotros mas comodos.

Yo personalmente siempre he preferido aquello que me de la posibilidad de trabajar más libremente. Que puedas tu hacer siempre lo que tienes en cabeza aunque cueste un poco mas de trabajo. Ya se q alguno dira que entonces me equivoque de lenguaje pero ...

Hasta ahora (y ya digo que no domino ninguno de ellos) yo prefiero moverme con ADO o simplemente Data Control.

¿Ustedes?

Saludos :hola:
Título: Re: Acceso A Db Desde Vb
Publicado por: Widark en Viernes 13 de Enero de 2006, 23:52
Que tal patitofeo!!!

Personalmente trabajo con ADO (pero en codigo, no con el control), para el manejo de las Db's, y ADOX para saber cuantas tablas hay en la base de datos y esas vainas. Yo te recomendaria ADO, por cantidad de ventajas frente a DAO.

Si tienes mas dudas, ya sabes que estamos presto para ayudarte.

Saludos
Título: Re: Acceso A Db Desde Vb
Publicado por: jc_moty en Sábado 14 de Enero de 2006, 02:55
Bueno, segun he leido por ahi DAO ya esta super defasado (y fue lo que me enseñearon en la Universidad hace 3 años ;) )
Personalmente uso ADO pero a nivel de Codigo (Sin el Datacontrol), se me hace mas practico que estar pegando un ADODC en cada form, simplemente uso una conexion global (se que esta mal crear objetos o variable de tipo Global :D) a la que accederan todos los Recordsets de la aplicacion.

Saludos :suerte:
Título: Re: Acceso A Db Desde Vb
Publicado por: patitofeo en Lunes 16 de Enero de 2006, 11:10
Vale.

 :comp: Entonces al lio. Como ya dije yo también veia más claro lo de usar ADO.

Solo una pequeñita cosa más:

¿No sabreis de algún manual o algo un poco más completo y claro sobre ADO que no sea lo que aparece en el MSDN del visual 6.0 o los tipicos tutoriales que aparecen rastreando Google?

bueno. Yo voy poco a poco con ello. pero hay cosas que aun me cuestan bastante trabajo y no encuentro ninguna ayuda clara donde apoyarme. En el MSDN, el tema de ADO es muy descriptivo. Hay un tema desarrollado sobre DAO, pero sobre ADO...

y en google, encuentro muchos tutoriales pero para hacer conexiones basicas y trabajando con el horribe control visual. ejemplos demasiado obvios.

Me costo muchisimo poder cambiar el contenido de un data report para que se llenara con otra tabla de al base de datos.

Bueno, no me enrollo más. Era solo eso ¿sabeis de alguna cosilla por ahi?

Muchas gracias

 :alien:    (Seguir opinando sobre cual metodo de acceso usais. me gustaría que alguien se pusiera a favor de DAO o que algun otro diese una alternativa. Ojala yo pudiese aportar mas  :blink: )
Título: Re: Acceso A Db Desde Vb
Publicado por: cpmario en Lunes 16 de Enero de 2006, 23:05
Aún uso el DAO y me sirve bien. Se puede usar con Control Data o con código para manipular los datos, o una combinación de ambos.

 :comp:
Título: Re: Acceso A Db Desde Vb
Publicado por: hdr en Martes 17 de Enero de 2006, 03:19
dao asi este desfasado me parece buenisimo para manejar bases de datos access, pero si es para otro motor de bd no es lo mejor, dao tiene la ventaja de que con la jerarquia de objetos dao estan reprecentadas la tablas, las consultas, etc. asi te ahorras algo de trabajo, dao tiene la desbentaja de que si cambias de dbms tendrias que reescribir bastante codigo, mientras que con ado solo seria la connectionstring
Título: Re: Acceso A Db Desde Vb
Publicado por: jc_moty en Martes 17 de Enero de 2006, 04:07
Cita de: "patitofeo"
¿No sabreis de algún manual o algo un poco más completo y claro sobre ADO que no sea lo que aparece en el MSDN del visual 6.0 o los tipicos tutoriales que aparecen rastreando Google?
Ya viste estos?:
Acceder a bases de datos con ADO datacontrol (http://www.elguille.info/vb/cursos_vb/basico/basico36.htm)
Acceder a bases de datos con ADO sin el data control (http://www.elguille.info/vb/cursos_vb/basico/basico41.htm)
Personalmente, estos manuales me ayudaron muchisimo con ADO...

Saludos :hola:
Título: Re: Acceso A Db Desde Vb
Publicado por: Angel38 en Martes 17 de Enero de 2006, 18:15
Hola patito feo.

Pues he escuchado que Microsoft desea erradicar por completo a DAO, pues les parece que ya es una herrmanienta obsoleta, no se que tan bien este enterado de esto, a mi parecer ADO no te restringe tanto y minimiza la codificacion.

Estoy terminando de desarrollar una aplicacion que dejo un programador que la estaba trabajando en DAO y me he visto con dificultades ya que si quieres trabajar con ACCESS 2000 no te lo permite el DAO y tienes que convertirlo a access 97.
Título: Re: Acceso A Db Desde Vb
Publicado por: cpmario en Martes 17 de Enero de 2006, 19:20
Las últimas actualizaciones de VB6 te permiten trabajar DAO con Acesss 2000 sin problema, excepto por el campo de contador automático. Personalmente manejo DAO Access 97 y 2000, los cambios de código entre una y otra versión son mínimos.

 :comp:
Título: Re: Acceso A Db Desde Vb
Publicado por: Angel38 en Miércoles 18 de Enero de 2006, 18:33
:smartass:
Ok. siempre se aprende algo nuevo.
Gracias

Pero me quedo con ADO
Título: Re: Acceso A Db Desde Vb
Publicado por: UserCode en Miércoles 18 de Enero de 2006, 18:59
hola

Si es verdad, DAO ya es algo del pasado, aunque cuando se ve que al parecer la BD seria una de Access, no esta nada mal usar DAO ya que es más amigable para Access como dijeron por ahi, es para motor jet.  Si tu BD sera de Access puedes usar DAO porque es más rapido, ya que ADO utiliza un intermediario como ODBC u OLE BD para llegar al motor jet de Access lo cual lo hace lago tardio para conectarse, en lo que se refiere a operaciones de registros, pero esto se nota mas cuando la BD es muy grande, pero DAO accede directamente al motor jet y ADO por intermediarios al menos esto con Access, pero claro esta que por ejemplo el control Data de DAO solo entiende hasta el motor jet 3.5 o 3.6 ya para Access 2000 en adelante es jet 4.0 y el control no entiende el formato por lo que nunca podras conectar un control Data de DAO a una BD Access 2000 hay que convertirla desde Access a version 97 como ya han indicado por ahi, o hacerla en el VisData del propio VB version 7, la cual es Access 97.  Pero para cualquier otra BD sea SQL Server, Oracle, etc.. definitivamente ADO  ;)


Citar
jc_moty:

Personalmente uso ADO pero a nivel de Codigo (Sin el Datacontrol), se me hace mas practico que estar pegando un ADODC en cada form, simplemente uso una conexion global (se que esta mal crear objetos o variable de tipo Global biggrin.gif) a la que accederan todos los Recordsets de la aplicacion.

¿Cómo asi de que es malo la declaracion de variables Globales para los objetos de conexión?  ¿si es malo? y eso porque? :blink:

saludos pues.
Título: Re: Acceso A Db Desde Vb
Publicado por: hdr en Miércoles 18 de Enero de 2006, 19:29
el control data si se puede conectar a access 2000 solo debes instalar el sp5 para el visual basic y el actualiza el data con la opcion de access 2000.
si por alguna razon no lo pueden conseguir yo se los paso.
Título: Re: Acceso A Db Desde Vb
Publicado por: UserCode en Miércoles 18 de Enero de 2006, 20:08
ahhhhhh broma si cierto, si los sp, llevo mucho tiempo que no uso controls Data, puro por codigo más fluido, los controles data son algo muy encapsulado, a bueno ya algo bueno para DAO que haga que aun se pueda seguir usando para BD Access más actuales, cool  ;)

PD: yo creo que si tengo el sp5 o el sp6 por una vez que lo tuve que bajar para mostrar Reportes del DateReport en hoja Horizontal y no vertial ya que no cabian los datos en la hoja normal y el sp traia una funcion o dlls para eso, pero ya uso Crystal Report.

mil perdones por la desactualizacion de los contorles Data y saludos developer  :hola:
Título: Re: Acceso A Db Desde Vb
Publicado por: Mellileo en Miércoles 18 de Enero de 2006, 22:49
Hola Genios:

He leido con con el SP 6 de VB se puede enlazar un control Data a una BD de access.  Muy interesante, pero cómo hago para hacer esto, pues ya he instalado el SP6 de VB y no he podido lograr conectar el Data a la BD.

Gracias por cualquier aporte??

Saludos.
Título: Re: Acceso A Db Desde Vb
Publicado por: cpmario en Jueves 19 de Enero de 2006, 00:05
En el menú 'Proyecto' busca 'Referencias' y selecciona "Microsoft DAO 3.6 Object Library"
En la propiedad 'Connect' del control Data selecciona "Access 2000;"

 :comp:
Título: Re: Acceso A Db Desde Vb
Publicado por: jc_moty en Jueves 19 de Enero de 2006, 04:02
Cita de: "UserCode"
¿Cómo asi de que es malo la declaracion de variables Globales para los objetos de conexión? ¿si es malo? y eso porque?
Creo que use la palabra incorrecta :P  no es que sea malo declarar variables Globales, sino que a nosotros como programadores nos mal acostumbra ¿Porqué? por que cuando estemos aprendiendo otro lenguaje quiza necesitemos crear este tipo de variables y en algunos no se podra.
En mi experiencia, lenguajes como PHP, C++, Java, VB .NET no admiten variables Globales.
Y no solo es el hecho de las variables globales lo que nos mal acostumbra, hay muchas cosas de VB que mal acostumbran al programador: Variables sin declarar, Variables de tipo indefinido (Variant), Código repetido, Uso de goto y etiquetas, etc.
El punto es: no acostumbrarnos a este tipo de cosas, para que cuando queramos o necesitemos aprender otro lenguaje no nos cueste tanto la transicion.

Saludos :comp:
Título: Re: Acceso A Db Desde Vb
Publicado por: Mellileo en Jueves 19 de Enero de 2006, 15:20
Hola cpmario:

He cargado la referencia a "Microsoft DAO 3.6 Library " como me lo has sugerido, pero en la propiedad "connect " del control, no aparece la opción Access 2000.

Qué puede estar pasando?  acaso el SP6 que tengo no funciona? necesito otro SP?

Cualquier ayuda será muy agradecida!!!

Saludos,
Título: Re: Acceso A Db Desde Vb
Publicado por: cpmario en Jueves 19 de Enero de 2006, 16:34
Debiera aparecer con el SP6, que es lo que yo tengo. Ignoro cual pueda ser el problema.
Te adjunto 2 pequeños proyectos de una base de datos DAO, el único cambio que tienen es la referencia para Access 97="Microsoft DAO 3.51 Library", y para Access 2000= "Microsoft DAO 3.6 Library", además la propiedad Connect del control Data en Access 97= "Access" y en para Access 2000= "Access 2000;"

 :comp:
Título: Re: Acceso A Db Desde Vb
Publicado por: patitofeo en Viernes 20 de Enero de 2006, 14:09
Gracias por los manuales jc_moty

Ya conocia esa pagina y me parece muy buena. La recomiendo a todo el mundo.

Ya voy abriendome camino con ADO.

Por cierto, otra dudilla. ¿Como puedo cambiar la contraseña para un usuario de mi BD Access desde mi aplicacion de VB? ¿Se puede?

Saludos :hola:
Título: Re: Acceso A Db Desde Vb
Publicado por: Mellileo en Viernes 20 de Enero de 2006, 17:17
Hola cpmario

He logrado por fin conectar la bd de access 2000 con DAO, lo que pasaba es que el SP6 que tenía estaba incompleto.... mal descargado. Lo he bajado de nuevo y se ha instalado completo, corrigiendo el error de la propiedad connect  del control data.

Gracias por tu oportuna ayuda!!!
Título: Re: Acceso A Db Desde Vb
Publicado por: cpmario en Viernes 20 de Enero de 2006, 17:31
Para cambiar la contraseña a la base de datos encontré 2 enlaces en PSC para DAO y ADO respectivamente:

http://www.planetsourcecode.com/vb/scripts...=35220&lngWId=1 (http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=35220&lngWId=1)

http://www.planetsourcecode.com/vb/scripts...=35222&lngWId=1 (http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=35222&lngWId=1)

 :comp:
Título: Re: Acceso A Db Desde Vb
Publicado por: patitofeo en Viernes 20 de Enero de 2006, 18:12
Gracias pcmario

Pero antes tengo un problema mayor. Y es que mi aplicacion se conecta a una base de datos que en teoria esta protegida por password sin necesidad de especificar ni usuario ni password.

Me explico y quiza puedan decirme donde me equivoco.

Trabajo con Access 2000 y en la base de datos cree dos usuarios. "Administrador" y "consulta". Al administrador le dejo como estaba (es el usuario por defecto) solo que le di un password. A "consulta" le quite todos los permisos sobre las tablas excepto los de lectura y no le di password.

ahora cada vez que trato de abrir la base de datos (clicko directamente sobre el fichero) me pide usuario y password. Bien!!

Solo que si me conecto desde codigo

Código: Text
  1.  
  2. BaseDeDatos.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
  3.     & App.Path & "/Data/MenocaDB.mdb;"
  4. BaseDeDatos.Open                'BaseDeDatos.ConnectionString, "administrador", "*"
  5.  
  6.  

entonces no tengo que pasarle el pass ni nada y el se conecta perfectamente. ¿por qué?

Valla una seguridad ¿Que hago mal?
Título: Re: Acceso A Db Desde Vb
Publicado por: UserCode en Sábado 21 de Enero de 2006, 21:02
Citar
QUOTE (UserCode)
¿Cómo asi de que es malo la declaracion de variables Globales para los objetos de conexión? ¿si es malo? y eso porque?

Creo que use la palabra incorrecta tongue.gif no es que sea malo declarar variables Globales, sino que a nosotros como programadores nos mal acostumbra ¿Porqué? por que cuando estemos aprendiendo otro lenguaje quiza necesitemos crear este tipo de variables y en algunos no se podra.
En mi experiencia, lenguajes como PHP, C++, Java, VB .NET no admiten variables Globales.
Y no solo es el hecho de las variables globales lo que nos mal acostumbra, hay muchas cosas de VB que mal acostumbran al programador: Variables sin declarar, Variables de tipo indefinido (Variant), Código repetido, Uso de goto y etiquetas, etc.
El punto es: no acostumbrarnos a este tipo de cosas, para que cuando queramos o necesitemos aprender otro lenguaje no nos cueste tanto la transicion.

Saludos comp.gif

ahh ok gracias jc_moty, viendolo por ese lado si es cierto.

Amigo patitofeo no sé si entiendo bien el problema, es una Bd protegida, como cuando la abres desde Access y te pide clave para poder abrirla, y quieres que el usuario pueda cambiar esa clave y que no este esa clave escrita directamente dentro del codigo de conexion del programa? es eso? porque no creo que sea clave de como cuando tu creas una tabla "Clave" o "Acceso" con campos de Login y Psswd, eso es acceso para el sistema, asi que lo tuyo debe ser claramente acceso a la BD, (lo reconfirmo por si acaso).

Si quieres que el propio usuario cambie la clave de ser necesario, tal vez si tengas que hacer una tabla en la BD para eso y que el campo clave del string de conexion a la BD sea una variable que recoga el campo de esa tabla, bueno en teoria.  :unsure:
Título: Re: Acceso A Db Desde Vb
Publicado por: patitofeo en Lunes 23 de Enero de 2006, 10:59
Bueno:

Yo os explico el problema desde el principio y me decis donde me equivoco o me pierdo. Ya os he dicho que estoy empezando....

El acceso a la base de datos desde mi aplicacion en Visual Basic debe comportarse de forma diferente dependiendo de que usuario trate de acceder (problema bastante comun). La base de datos es una base de Datos Access 2000 que trabaja en local, en el mismo PC donde estara la aplicacion. Yo accedo a ella directamente con el driver del Motor Jet de Windows/Visual Basic.
Código: Text
  1.  
  2. BaseDeDatos.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
  3.     & App.Path & "/Data/DB.mdb;"
  4.  
  5.  

Como la base de Datos va ha estar en local, pense que debería proteger el fichero (la base de datos como tal). Tras paparme un poco de ayuda y rebuscar por internet (ya que no he tirado nunca mucho de Access) encontre lo de la gestion de usuarios y grupos de Access.

Dije "perfecto! todo solucionado". Cree, una cuenta de usuario 'administrador' con todos los permisos y una cuenta 'consulta' con permisos restringidos (solo consultas, como su propio nombre indica)

Esto fue bastante bien. Cuando intentaba abrir el fichero (de forma externa a mi aplicación. Simplemente doble click sobre el icono) Access me pedia nombre de usuario y password.

Pense que ya estaba todo arreglado. Luego trate de abrir la base de datos desde mi aplicacion y resulto qeu indicando el nombre de usuario y el pass, el visual se cascaba un error diciendo que faltaba un fichero de gestion de usuarios.

Cuando descubri lo que era eso, vi que era una cagada, ya que si la gestion de usuarios y grupos esta en otro fichero, con borrar ese fichero, la puerta hacia mi base de datos estaba abierta (no hace falta ser hacker para hacer esto). A pesar de todo segui a delante y cree el fichero .vbw .

No consegui acceder a la base de datos usando un usuario. Siempre me resultaba el mismo error.

Luego pude ver que en cualquiera de los casos (con politica de usuarios y grupos, con fichero .vbw, sin el, de cualquier modo) no puedo acceder poniendo explicitamente el nombre de usuario y password pero SIEMPRE puedo acceder directamente sin ponerlo.

¡Que gracioso!  :kicking:

Finalmente opte por la solución que no queria utilizar desde el princio que es incluir el password que da los permisos en una tabla de la BD y gestionar esos permisos desde mi aplicación. Lo cual no protege nada, ya que si alguien quiere modificar la Base de datos solo tiene que hacer doble click sobre el fichero en cuestion y modificar lo que quiera. Le puse una clave como antes para que por lo menos no pudiesen hacer esto. Pero ahora, el administrador necesita saber la clave que protege el fichero que no tiene porque coincidir con la que hay en la tabla "password"  ya que esta segunda se puede cambiar. No es el mayor problema ya que en principio nunca debería hacer falta trabajar sobre el fichero directamente abriendolo con access

De todos modos esto sigue asi porque hasta donde he podido ver. Las bases de datos Access son de todo menos seguras ni comodas.

Ahora, tengo que trabajar el doble al hacer mi aplicación para gestionar de forma externa los permisos para los usuarios (al menos que alguien me clarifique el camino y me de una solucion) y además estoy seguro que si alguna persona que no tiene permisos se propone conseguirlos, no le sera muy dificil aunque no tenga ni idea de informatica.

Esta es la forma mas segura que he encontrado para la base de datos. Clave en una tabla y fichero con usuarios y protegido con Clave.

 :hola:  Saludos
Título: Re: Acceso A Db Desde Vb
Publicado por: Mellileo en Lunes 23 de Enero de 2006, 14:53
Hola Amigo patitofeo:

Si lo que quieres es que nadie te abra la BD de Access haciendo doble clic sobre el archivo.... y dado que como sabes, access no ofrece la mejor seguridad del mundo... te recomiendo que encriptes el archivo de BD.

Yo lo he hecho y me ha dado excelentes resultados... ya que tu puedes encriptar y descencriptar el archivo solamente cuando ejecutas tu aplicación.

Para mayor información visita este post:

cómo encriptar una base de datos (http://foros.solocodigo.com/index.php?showtopic=2708)

Espero te sirva como me ha servido a mi.

Saludos.
Título: Re: Acceso A Db Desde Vb
Publicado por: patitofeo en Lunes 30 de Enero de 2006, 13:27
Gracias:

Esa puede ser una solución. Aunque me parece bastante fea. El hecho de que tengas que "desmontar" el fichero y volverlo a montar en cada uso. buff!!!

No obstante me parece la mejor solucion. gracias de nuevo

Saludos  :hola: