Foros del Web » Programación para mayores de 30 ;) » Programación General »

VB6 ayuda porfavor

Estas en el tema de VB6 ayuda porfavor en el foro de Programación General en Foros del Web. Veran soy novato en esto, tengo una Base de Datos access, quiero que se conecte a trabes de visual basic, pero de la siguiente forma, ...
  #1 (permalink)  
Antiguo 15/05/2004, 14:58
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 9 meses
Puntos: 0
VB6 ayuda porfavor

Veran soy novato en esto, tengo una Base de Datos access, quiero que se conecte a trabes de visual basic, pero de la siguiente forma, hay un boton llamado "listado de pelis" que una ves abierto se habre una ventana con un listbox, lo que quiero es que cuando se pulse el boton listado de pelis, en el listbox que se habra, me salga el contenido de la base de datos i del campo que quiero, me gustaria saber como lo tengo que hacer, y si puede ser que me den el codigo para las dos cosas, alguien me podria ayudar porfavor?
  #2 (permalink)  
Antiguo 15/05/2004, 20:05
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años, 7 meses
Puntos: 1
Espero que no lo tomes a mal, pero pienso que lo que tu necesitas es un buen libro de Bases de Datos o en su caso un buen tutorial, porque lo tuyo mas que duda es desconocimiento total, pero aqui va la respuesta a tu pregunta

Suponiendo que tienes un formulario con un ListBox (ListBox1) y un Boton (Command1). Una base de datos llamada "Prueba.mdb" que contiene una tabla llamada "Table1". Ahora si podemos continuar.

En tu formulario copia y pega este codigo y listo


'Declaracion de variables para abrir la base de datos
Public Cnn As New ADODB.Connection
Public Rst As New ADODB.Recordset

'Al cargar el formulario se abre la base
'Y se cargan todos los datos de la tabla
'en este ejemplo la base de datos access es PRUEBA.MDB
'Y la tabla se llama TABLE1
Private Sub Form_Load()
Cnn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\Prueba.mdb"
Cnn.Open

With Rst
.ActiveConnection = Cnn
.LockType = adLockReadOnly
.CursorType = adOpenStatic
.Open "Select * from Tabla1"
End With

End Sub

'Al pulsar el boton Command1 se llena el ListBox
'En este caso en la linea= List1.AddItem Rst.Fields(0)
'el numero 0 que esta en parentesis debes remplazarlo
'por un numero que indique la posicion del campo deseado
'comenzando a numerar por el cero, claro esta.

Private Sub Command1_Click()
Dim Contador As Integer

For Contador = 1 To Rst.RecordCount
List1.AddItem Rst.Fields(0)
Rst.MoveNext
Next

End Sub
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #3 (permalink)  
Antiguo 15/05/2004, 20:13
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años, 7 meses
Puntos: 1
Por cierto olvide decirte algo...

Tienes que ir al menu PROYECTO -> REFERENCIAS y agregar la libreria Microsoft ActiveX Data Objects, de lo contrario no funcionara
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #4 (permalink)  
Antiguo 16/05/2004, 04:40
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 9 meses
Puntos: 0
Probe tu codigo y me da el siguiente error:


Error'-2147467259(80004005)'en tiempo de ejecucióm:
[Microsoft][Controlador ODBC Microsoft Access]No es un nombre de archivo válido. en la sentencia Cnn.Open que hago para que funcione?
Tambien me da un error en esta sentencia
.Open "Select TITULO from PELIS"
TITULO: campo de la base de datos
PELIS: Tabla de la base de datos
Por cierto el bono listado de pelis esta en otro form, si quiero que s agregue automaticamente el contenido de la BD al listbox, apretando ese boton cuando se habra el nuevo form, eso se puede hacer, si no da igual metere un boton en dicho form i que lo haga, pero dime que hago para que me funcione, me da este error. gracias de adelantado

Última edición por slope; 16/05/2004 a las 04:43
  #5 (permalink)  
Antiguo 16/05/2004, 05:03
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 9 meses
Puntos: 0
Lo consegui arreglar, poniendo esto delante de la sentencia Cnn.Open:
On Error Resume Next
Cnn.Open

se me habre el nuevo form, pero nos e me añaden las pelis al listbox, porque?
  #6 (permalink)  
Antiguo 16/05/2004, 12:13
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años, 7 meses
Puntos: 1
Que tal:

por lo que me dices pienso que el problema esta en la linea antes del .open la de .ConnectionString

Asegurate que la instruccion "Cnn.ConnectionString ..." este en una misma línea y en otra linea el Cnn.Open

Si te das cuenta en la instruccion del ConnectionString hay un comando "App.Path" eso indica que tratas de abrir una base de datos que se encuentra en el mismo folder (ruta en disco) que tu proyecto o ejecutable. Si no es asi, sustituye la instruccion "App.Path" por tu Ruta en disco, ejemplo "C:\Bases\Prueba.mdb"

'Esto seria cuando tu base esta en el mismo folder que el proyecto
Cnn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\Prueba.mdb"
Cnn.Open

'Esto cuando esta en otra Ruta
Cnn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Bases\Prueba.mdb"
Cnn.Open

'No utilices la instruccion ON ERROR RESUME NEXT en estos casos ya que de haber un error al conectarte a la base pues no lo vas a detectar y simplemente no abrira la base de datos.


Y como no abre bien la base de datos pues es obvio que al querer abrir el el recordset genere un error de la misma manera

.Open "Select TITULO from PELIS"

ya que el recordset se basa en la Conexion Cnn.

Haz lo que te indico arriba y ya veras que te funciona.


De lo que me dices del listbox, si es que este se encuentra en otro formulario hay 2 opciones.

---------------------------------------------------------------------------------
1.- Suponiendo que las variables y la apertura de la base lo pusiste en el formulario FORM1 y que el boton y el listbox se encuentran en el FORM2.

En el Form2 en el codigo del Boton Command1 pon lo siguiente

Private Sub Command1_Click()
Dim Contador As Integer

For Contador = 1 To Form1.Rst.RecordCount
List1.AddItem Form1.Rst.Fields(0)
Form1.Rst.MoveNext
Next

End Sub

---------------------------------------------------------------------------------

2.- Yo preferiria esta opcion ya que es mucho mas eficiente

Agrega un modulo a tu proyecto y declara ahi tus variables para la conexion y el recordset


'Declaracion de variables para abrir la base de datos
Public Cnn As New ADODB.Connection
Public Rst As New ADODB.Recordset


y despues de eso, en el mismo modulo pon lo siguiente

Sub main()

Cnn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\Prueba.mdb"
Cnn.Open

With Rst
.ActiveConnection = Cnn
.LockType = adLockReadOnly
.CursorType = adOpenStatic
.Open "Select * from Tabla1"
End With

Form1.Show

End Sub



Ahora en el Menu PORYECTO -> PROPIEDADES DE PROYECTO... En la pestaña GENERAL elige como OBJETO INICIAL Sub Main y quita del Form1 el codigo que habias puesto en el Form Load () ya que ahora se encuentra el codigo en el modulo y sera accesible para todos los formularios

De esta manera no importa en el formulario q


Paso siguiente
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #7 (permalink)  
Antiguo 16/05/2004, 12:15
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años, 7 meses
Puntos: 1
Se me fue el enter y se envio el mensaje incompleto jeje, te decia que ....

(Hablando de la segunda solucion)
De esta manera no importa en el formulario en que pongas tu boton y el listbox tu siempre podras utilizar

For Contador = 1 To Rst.RecordCount
List1.AddItem Rst.Fields(0)
Rst.MoveNext
Next


ya que son variables publicas dentro de un modulo


Espero haber sido explicito, y sino pues aqui estamos
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #8 (permalink)  
Antiguo 16/05/2004, 13:59
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 9 meses
Puntos: 0
Oye, i para que el boton ste en otro formulario i el listbox en otro que es mi caso, que hago pongo este codigo en lo de modulos tambien:

For Contador = 1 To Rst.RecordCount
lstpelis.AddItem Rst.Fields(0)
Rst.MoveNext
Next


?????????????????
  #9 (permalink)  
Antiguo 17/05/2004, 10:11
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años, 7 meses
Puntos: 1
Suponiendo que el boton esta en el FORM1 y el listbox esta en FORM2

'Codigo del boton en el FORM1....
For Contador = 1 To Rst.RecordCount
FORM2.lstpelis.AddItem Rst.Fields(0)
Rst.MoveNext
Next
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #10 (permalink)  
Antiguo 17/05/2004, 11:45
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 9 meses
Puntos: 0
Me da el error :

Error'91' en tiempo de ejecución:
Variable de tipo Object o la variable de bloque With no está establecida

i me marca esto en fluorescente amarillo :
For Contador = 1 To MisPelis.RecordCount


Como siempre, que hago?

Última edición por slope; 17/05/2004 a las 13:22
  #11 (permalink)  
Antiguo 17/05/2004, 15:13
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años, 7 meses
Puntos: 1
No estas inicializando bien el recordset MISPELIS.. debe de haber un error en tu incializacion o al abrirlo... verificalo o envia mejor tu proyecto.. creo que sera mas facil
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
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 14:30.