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

Visual Basic y ADO

Estas en el tema de Visual Basic y ADO en el foro de Visual Basic clásico en Foros del Web. Hola : Por primera vez debo diagramar una aplicación para trabajar con una base de datos en red. Varios usuarios deben "escribir" sobre una misma ...
  #1 (permalink)  
Antiguo 25/08/2008, 07:24
 
Fecha de Ingreso: octubre-2006
Mensajes: 139
Antigüedad: 17 años, 6 meses
Puntos: 1
Visual Basic y ADO

Hola :
Por primera vez debo diagramar una aplicación para trabajar con una base de datos en red.
Varios usuarios deben "escribir" sobre una misma base de datos que consta de diferentes tablas . Esta base estará en una Pc que funcionará como servidor, .
Hasta ahora he manejado Ado , Jet 4.0 OLE DB Provider y una base de datos de Access, pero siempre con una base de datos existente en la propia máquina donde se ejecuta el programa.
Mis pregunta son :
¿ Como le indico a Ado que la base de datos está en una máquina en red ?
¿ Simplemente en Propiedades de Vínculo de datos de Ado como siempre?
¿ aparecerá la opción de elegir un equipo de la red y selecciono la base residente en una máquina en red?
Gracias
  #2 (permalink)  
Antiguo 25/08/2008, 08:14
 
Fecha de Ingreso: agosto-2008
Ubicación: Argentina
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Visual Basic y ADO

Hola que tal no has pensado en hacerlo con sqlserver o mysql?

o si o si es una base de datos access?
  #3 (permalink)  
Antiguo 25/08/2008, 08:40
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
Respuesta: Visual Basic y ADO

Cita:
Iniciado por DIDAKE Ver Mensaje
Mis pregunta son :
¿ Como le indico a Ado que la base de datos está en una máquina en red ?
Claro cuando realizas la conexion le especificas la ruta, bueno ahi tenes que poner la ruta del .mdb que esta en la red (obviamente primero debes compartir la carpara) osea quedaria una cosa asi
\\ip\carpeta\base.mdb


Como dijo el amigo anterior, capaz que te combiene utilizar motores del tipo cliente/servidor...

MySQL o Postgresql son alternativas libres muy buenas, MySQL un poco mas facil por el echo de haber tanta documentacion
  #4 (permalink)  
Antiguo 25/08/2008, 10:42
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Visual Basic y ADO

Hola!

La solución más inmediata pasa por definir un DSN en Windows y llamarlo en la inicialización de tu conexión. Con esto dependes de que tu instalador pueda configurarte el origen de datos, o puede que tengas que hacerlo manualmente en cada ordenador, pero ganas la potencia de que tu aplicación puede acceder a la base de datos sea cual sea el gestor, desde Jet hasta ficheros de texto plano, ya que la conexión se basaría totalmente en ODBC y la gestionaría Windows, por lo que si un día cambias de Jet a MySQL o a Oracle, sólo tienes que modificar los DSN y no recompilar la aplicación.

En principio, bastaría con que en el método Open del objeto ADOConnection le pases el nombre del DSN, y voilà, conectado, ya podrías definir recordsets para hacer consultas y lo que quieras
__________________
wile sona li mute e sona
  #5 (permalink)  
Antiguo 26/08/2008, 06:54
 
Fecha de Ingreso: octubre-2006
Mensajes: 139
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Visual Basic y ADO

Primero que nada gracias a todos :

Txoco : No me siento aún muy capacitado como para sqlserver o mysql o los DSN , aunque empezé a buscar material de lectura. ¿Como puedo definir un DSN en Windows y llamarlo en la inicialización de mi conexión manualmente en cada máquina ?.

Como mi red de trabajo no está aún armada no pueda conocer la ruta de la base de datos.¿Como la indico?

Culd : Si uso Ado ¿podría programar la selección de esta ruta desde un CommonDialog asignando la ruta con CommonDialog.FileName?

Entiendo por este ejemplo \\ip\carpeta\base.mdb , que hay una dirección Ip en el medio. Eso aparecería en el CommonDialog.FileName?

¿ alguno puede colgar un ejemplo de como quedaría una posible ruta de una mdb en otra máquina ?

Última edición por DIDAKE; 26/08/2008 a las 07:09
  #6 (permalink)  
Antiguo 26/08/2008, 11:13
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Visual Basic y ADO

Bueno, es esencial que sepas cómo va a funcionar la red para poder trabajar sobre ella...

Por una parte, definir un DNS es tan sencillo como ir, desde el menú Inicio, a Herramientas Administrativas -> Origenes de datos (ODBC), o, si no tienes el acceso directo en el menú, desde el Panel de Control -> Herramientas Administrativas -> Origenes de datos (ODBC). Ahí tienes tres posibilidades: DSN de archivo, de sistema y de usuario. Yo he utilizado habitualmente los dos últimos, que se diferencian en que los de sistema sólo los puede crear un administrador y están disponibles para todos los usuarios, mientras que los de usuario sólo están disponibles para el usuario que los crea.

En la pantalla que se abre, cuando le das a agregar, primero te pregunta el tipo de base de datos a la que te vas a conectar y luego te aparecen formularios para configurarlo, cuyo aspecto varía dependiendo del driver que hayas elegido.

Si vas a acceder a una base de datos Access, puedes elegir el Microsoft Access Driver (*.mdb), en inglés, porque por alguna extraña razón, nunca lo he visto definido en castellano, siempre en inglés, portugués y alemán... si lo eliges en inglés, la interfaz sí te aparecerá en castellano, así que no tienes por qué preocuparte.

--

Si decides no utilizar DSNs y atacar directamente contra carpetas compartidas, recuerda primero que en cualquier caso, debes compartir esa carpeta en el servidor, con permisos de lectura y escritura. Para conectar con el fichero, el ejemplo de culd es el más efectivo, ya que utilizas directamente TCP/IP en lugar de NetBios para acceder a la carpeta en la que se encuentra, y suele dar menos problemas. Esto es importante por la siguiente razón:

En el Common Dialog no te aparecen direcciones IP, si no nombres de equipo de NetBios. Por ejemplo, si el equipo con la IP 192.1.1.15 se llama "ServidorBD", y tiene la base de datos "clientes.mdb" en la carpeta compartida "bases_datos", puedes abrir la base de datos desde el Explorador de Windows tecleando en la barra de direcciones tanto esto:

\\ServidorBD\bases_datos\clientes.mdb

como esto:

\\192.1.1.15\bases_datos\clientes.mdb

Sin embargo, si la seleccionas mediante el Common Dialog, debes buscar en Mis Sitios de Red -> Toda la Red -> Red de Microsoft Windows -> <nombre del grupo de trabajo o dominio> -> ServidorBD, con lo que obtendrás la ruta de la primera forma.

Si utilizas el método de las carpetas compartidas, te recomiendo que configures la aplicación mediante un ficherito .ini, de tal forma que puedas cambiarlo en cualquier momento sin tener que recompilar, además porque ahí podrás especificar tanto la IP como el nombre, indistintamente, aunque tengas que hacerlo a mano.

--

En cualquier caso, si tu aplicación trabaja contra un fichero Access, recuerda definir en el fichero mdb que el acceso es compartido (varios usuarios pueden leer y escribir a la vez) ya que por defecto lo suele crear como exclusivo (el primero que lo abre puede escribir, los demás, si acaso, pueden mirar nada más). Esto lo configuras desde el menú de Access (menú Herramientas -> Opciones -> pestaña Avanzadas).


Espero no haberte liado... mucho
__________________
wile sona li mute e sona
  #7 (permalink)  
Antiguo 26/08/2008, 11:30
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Respuesta: Visual Basic y ADO

Esa ase de datos después de un tiempo se va a arruinar te recomiendo que saques backup de ella diariamente.

Saludos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #8 (permalink)  
Antiguo 26/08/2008, 17:34
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
Respuesta: Visual Basic y ADO

Exactamente con un commandialog si buscas en mis sitios de red, luego entras al grupo de trabajo, te vas a la pc, carpata etc... Si te sale la ruta del archivo...

Lo que podes hacer es una seccion de configuracion donde buscas por unica vez eso, asi lo almacenas en un .ini o .txt..

Igualmente antes de hacer eso tenes que entrar a la carpata como lo harias normalmente, te va a pedir el usuario y password de la otra pc (guarda la contraseña)... eso por unica vez sino vb no va a poder acceder y te va a tirar error.
  #9 (permalink)  
Antiguo 27/08/2008, 09:41
 
Fecha de Ingreso: octubre-2006
Mensajes: 139
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Visual Basic y ADO

Culd :

Estoy creando las bases de datos yo para esta aplicación, por lo que las puedo crear sin colocar password ni contraseña ¿ verdad?

Estoy usando esta sentencia :

' Indicar la base de datos a usar
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & base
'para Conectarlo a la tabla
Adodc1.CursorType = adOpenDynamic

¿Que ocurre cuando varios usuarios acceden a la base al mismo tiempo?


Dame algun ejemplo de lo que mencionás de un archivo Ini. Gracias
  #10 (permalink)  
Antiguo 27/08/2008, 10:55
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
Respuesta: Visual Basic y ADO

Cita:
Iniciado por DIDAKE Ver Mensaje
Culd :

Estoy creando las bases de datos yo para esta aplicación, por lo que las puedo crear sin colocar password ni contraseña ¿ verdad?
Cuando dije contraseña, no hablaba de la base de datos... Hablaba de la PC en red...

Para armar una red en windows XP y poder compartir carpetas y archivos, tenes que desactivar el "uso compartido simple de archivos"
- En una carpeta te vas a herramientas
- Luego a opciones de carpeta
- Luego a la pestaña ver
- Al final de la lista dice "Utilizar uso compartido simple de archivos" eso lo tenes que destildar...

Una vez que hiciste eso, tenes que ir a la carpeta que vas a compartir, y le das click derecho, luego en "Compartir" y ahi le asignas un nombre y los privilegios (tenes que poner todos los privilegios para que pueda sobrescribir los archivos)...

Apartir de windows XP SP1, es obligatorio que un usuario de windows tenga una contraseña (sino no vas a poder acceder a la maquina) <--- ESA ES LA CONTRASEÑA QUE TE HABLABA...

Entonces por unica vez, vas a mis sitios de red, ver equipos del grupo de trabajo... Le das doble click a la pc que queres acceder y te va a pedir el usuario y la contraseña (cuando instalaste windows te pidio la contraseña de administrador) entonces pones
Usuario: administrador
Password: la que pusiste cuando instalaste windows..
Y tildas la opcion de guardar contraseña... Ahi vas a acceder a la otra PC... (como se guardo la contraseña si utilizas VB no te la va a pedir y no va a tirar ningun error)...

En fin espero que se haya entendido.

Cita:
Iniciado por DIDAKE Ver Mensaje
Estoy usando esta sentencia :

' Indicar la base de datos a usar
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & base
'para Conectarlo a la tabla
Adodc1.CursorType = adOpenDynamic

¿Que ocurre cuando varios usuarios acceden a la base al mismo tiempo?
Estem puede traer muchos errores... Mira te explico

CursorType es la forma que se conecta hay varias:

adOpenDynamic: se mueve en los dos sentidos y se puede modificar (pero se ven los cambios que pueden realizar otros usuarios
adOpenForwardOnly: solo se puede recorrer la tabla en forma secuencial, y no se pueden modificar los registros
adOpenKeyset: se puede mover en los dos sentidos y SI permite modificar registros (no se ven los cambios que realizan otros usuarios simultaneamente)
adOpenStatic: se puede mover en los dos sentidos NO SE PUEDE MODIFICAR

Tambien existe la forma de cerradura

adLockBatchOptimistic: mmm es similar al de abajo pero no lo use nunca, je
adLockOptimistic: este lo que hace es al utilizar "Update" le cierra la tabla a los otros usuarios asi no hay errores al grabar...
adLockPessimistic: cuando se habre la tabla ningun otro usuario va a poder acceder a esa tabla (asi se asegura que los datos van a ser correctos)
adLockReadOnly: no se puede modificar nada solo lectura

Todo depende de que vas a hacer en cada proceso y funcion la forma que vas a abrir la tabla por ejemplo, si queres hacer una consulta, buscar un dato, algo por el estido tenes que abrirlo asi
odOpenStatic - AdLockReadOnly
asi de esa manera podes abrir y seguis dejando a otros usuarios que lo habran simultaneamente

Ahora si vas a modificar datos muy muy importantes podes hacer
adOpenDynamic - adLockPessimistic
asi bloqueas a los demas usuarios para que no cambian algo con lo que estas trabajando que te puede traer errores de calculos...

En fin, depende lo que vas a hacer es la forma que vas a conectar... Aparte access no ayuda mucho en este sentido por qu eno fue pensado para multiusuario como lo es mysql, postgre, sql server, firebird, interbase, db2, oracle (jejee hay muchas)
  #11 (permalink)  
Antiguo 01/09/2008, 06:44
 
Fecha de Ingreso: octubre-2006
Mensajes: 139
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Visual Basic y ADO

Colegas :
Gracias, voy encaminado.
Necesitaría algún ejemplo de como "escribir" una archivo INI y como asignarlo luego a mi aplicación.
Otra : Necesito saber si puedo "construir" controles más vistosos, por ejemplo redondeados en los vértices en Vb6 ¿o debo empezar con Visual Basic 2005 ? ¿ 2005 es similar en cuanto a la forma de comunicar Ado con Access?
  #12 (permalink)  
Antiguo 17/09/2008, 05:29
 
Fecha de Ingreso: octubre-2006
Mensajes: 139
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Visual Basic y ADO

Colegas :
Necesitaría algún ejemplo de como "leer" con código y desde la aplicación Visual Basic, un archivo INI.
El archivo INI lo arme como un .txt , lo llamo: ubicación.txt y está dentro de la carpeta donde se ejecuta el propio programa (puedo usar App.Path para indicar donde se encuentra) y este txt sólo contiene esto : \\ServidorBD\bases_datos\
¿Alguno podría pasarme un ejemplo de como "leer" con código y desde la aplicación Visual Basic?
Quisiera para poder terminar usando algo parecido a esto :

Adodc1.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= ubicación & "\A.mdb;" & _
"Persist Security Info=False"
Adodc1.CursorType = adOpenDynamic
' Conectarlo a la tabla de prueba
Adodc1.RecordSource = "CARPA_cAm_generica_puntuacionesA"
' Refresh es necesario para que se cargue la tabla
Adodc1.Refresh
  #13 (permalink)  
Antiguo 17/09/2008, 06:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Visual Basic y ADO

Aquí:
http://www.forosdelweb.com/760668-post13.html
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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 17:22.