Ver Mensaje Individual
  #18 (permalink)  
Antiguo 17/11/2003, 20:36
Avatar de carlunchos
carlunchos
 
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 22 años, 3 meses
Puntos: 1
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.

__________________
Carlunchos