Margarita83, tenes que tener fe en el pai Pablo: abre caminos, acerca amigos y destraba visual!! ja, ja.
Hermano Pablo tenias razon , funciona y aqui pongo lo que queria conseguir:
Option Explicit
Private conexion As ADODB.Connection
Private rst As ADODB.Recordset
Dim pathBase As String
Dim sql As String
Dim NombreTabla As String
Dim dato As ListItem
Dim p As Integer
Public Function abrir_base() As Integer
On Error GoTo ver_errores
Set conexion = New Connection
conexion.Open "Provider=Microsoft.jet.OLEDB.3.51;Data Source=" & pathBase
Set rst = New ADODB.Recordset
rst.ActiveConnection = conexion
rst.CursorLocation = adUseClient
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
Set rst_tmp = New ADODB.Recordset
rst_tmp.ActiveConnection = conexion
rst_tmp.CursorLocation = adUseClient
rst_tmp.CursorType = adOpenKeyset
rst_tmp.LockType = adLockOptimistic
abrir_base = 0
Exit Function
ver_errores:
abrir_base = 1
MsgBox "No es posible conectarse con la base " & pathBase, vbCritical
End
End Function
Public Function centra(Form1 As Form)
Form1.Left = (Screen.Width - Form1.Width) \ 2
Form1.Top = (Screen.Height - Form1.Height) \ 2
End Function
Private Sub cboTablas_Click()
Dim tot_reg As Integer
If rst.State <> adStateClosed Then
rst.Close
End If
rst.Source = "Select * from " & cboTablas.Text
rst.Open
Progreso.Visible = True
Progreso.Value = 0
Timer1.Enabled = True
End Sub
Private Sub cmdConectar_Click()
CommonDialog1.Filter = "Base de datos Microsoft Access" & _
"(*.mdb)|*.mdb|"
CommonDialog1.ShowOpen
pathBase = CommonDialog1.FileName
abrir_base
lblPathBase.Caption = pathBase
Set rst_tmp = conexion.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
While Not rst_tmp.EOF
cboTablas.AddItem rst_tmp!TABLE_NAME
rst_tmp.MoveNext
Wend
rst_tmp.Close
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Command1_Click()
End Sub
Private Sub Form_Activate()
centra Me
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
Progreso.Visible = False
End Sub
Private Sub Timer1_Timer()
With Progreso
If .Value < .Max Then
.Value = .Value + 1
StatusBar1.Panels("reg").Text = "Cargando Tabla " & cboTablas.Text
Else
Timer1.Enabled = False
Set DataGrid1.DataSource = rst
tot_reg = rst.RecordCount
StatusBar1.Panels("reg").Text = "Cant de Reg: " & Str(tot_reg)
Progreso.Visible = False
End If
End With
End Sub
y el modulo:
Option Explicit
Global conexion As ADODB.Connection
Global rst As ADODB.Recordset
Global rst_tmp As ADODB.Recordset
Global tot_reg As Integer
Con tu ayuda he comprendido algunas cosas pero han surgido otras que detallo:
1) hubo que declarar las variables de conexion y recordset en un modulo.
2) hubo que declarar dos recordset, ya que si queria usar el mismo para todo daba error en la asignacion del DataGrid.
3) Si la tabla tiene un nombre compuesto ( ej: Datos viejos) da un error 80040e37: No se encuentra la tabla. Como deberia salvar este tema?. Probe cambiando el nombre de la tabla poniendo un guion bajo que una las dos palabras, pero creo que no es lo ideal.
4) si doy Cancelar y no conecto con una base me avisa diciendo "No es posible conectarse con la base" y se detiene la ejecucion. Se puede hacer que el programa continue para esperar otra seleccion de base de datos?
5) el codigo me quedo un poco despelotado, alguien tendra ganas de mejorarlo?
Pablo un saludo, un gracias y hasta pronto.