Conectar con una Consulta Access

Esta es primera vez que le hago una consulta sobre el particular...
Mi problema es el siguiente.
Tengo una aplicación desarrollada con VB 6.0 y necesito accesar una Consulta de access. La consulta es el resultado de varios registros que se duplican en otras tablas y arrojan el total. Es decir el código de un registro puede aparecer en varias tablas pero en la consulta solo una vez y mostrando el resumen de la base de datos para cada código. Hasta ahí todo bien; el problema es cuando necesito llenar el DataGrid en la aplicación que me dice que falta un parámetro ¡¿?!.
"No se han especificado valores para alguno de los parámetros requeridos"
El código es el siguiente:
'------------------------------------------------------------------------------------------------------
Private Sub Form_Load()
Dim rs as Adodb.RecordSet
Set rs = New Adodb.Recordset
Sql ="Select * From AnexoEstadoPago Where AnexoEstadoPago.CentrodeCostos='" & Principal.TextCentrodeCostos & "'"
rs.Open Sql, cn, adOpenStatic, adLockOptimistic
Set DataItems.DataSource=rs
End Sub
La conexión "cn" se hace desde un Modulo y trabaja bien, TextCentrodeCostos es un string que filtra los registros con un determinado criterio. (Y trabaja bien; el campo CentrodeCostos existe en la consulta)
Creo que (como no soy muy experto en esto) estoy olvidando alguna instrucción para referirse a una consulta. ¿O se tratan del mismo modo que las tablas?..
1

1 Respuesta

50.850 pts. Programación Avanzada en Visual Basic, VBA, Modelo de...
No te hará falta esto rs.CursorLocation = adUseClient,
Así lo uso y no me da problemas
Ejemplo:
Private Sub Command1_Click()
Dim conConnection As New ADODB.Connection
Dim cmdCommand As New ADODB.Command
Dim rstRecordSet As New ADODB.Recordset
conConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      App.Path & "\" & "database.mdb;Mode=Read|Write"
  conConnection.CursorLocation = adUseClient
  conConnection.Open
  With cmdCommand
    .ActiveConnection = conConnection
    .CommandText = "SELECT * FROM tabTestTable;"
    .CommandType = adCmdText
  End With
  With rstRecordSet
    .CursorType = adOpenStatic
    .CursorLocation = adUseClient
    .LockType = adLockOptimistic
    .Open cmdCommand
  End With
  If rstRecordSet.EOF = False Then
    rstRecordSet.MoveFirst
    Do
      MsgBox "Record " & rstRecordSet.AbsolutePosition & " " & _
          rstRecordSet.Fields(0).Name & "=" & rstRecordSet.Fields(0) & " " & _
          rstRecordSet.Fields(1).Name & "=" & rstRecordSet.Fields(1)
      rstRecordSet.MoveNext
    Loop Until rstRecordSet.EOF = True
    With rstRecordSet
      .AddNew
      .Fields(0) = "New"
      .Fields(1) = "Record"
      .Update
    End With
    rstRecordSet.MoveFirst
    rstRecordSet.Delete
    rstRecordSet.Update
    rstRecordSet.Close
  Else
    MsgBox "No records were returned using the query " & cmdCommand.CommandText
  End If
  conConnection.Close
  Set conConnection = Nothing
  Set cmdCommand = Nothing
  Set rstRecordSet = Nothing
End Sub
Hola josaul75...
Gracias por tu respuesta: le he agregado la propiedad .CursorLocation=adUseClient a mi RecordSet "rs" y de todas maneras al recorrer el código me da el mismo error.
Me voy a disecar frente a la pantalla buscando mi error.
Si me compartes tu aplicación te puedo ayudar mejor.
[email protected]
Que parte... ¿Todo el código?
Porque en realidad más que eso solo te encuentras el modulo que abre la base de datos.
Acá tienes parte del código de la aplicación.
Tengo algunas dudas.
Uso Ado
¿No será que debo usar el método OpenRecordset del objeto QueryDef?
Porque recuerda que estoy accediendo a una consulta creada en Access y no a una tabla.
Option Explicit
Public cn As ADODB.Connection
'-----------------------------------------------------------------------------------------------------------
Public Function AbrirBase(NameDataBase As String)
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\Compaqgerencia\Documentos c\Prueba Sist_DEFLUV\" & NameDataBase & ";Persist Security Info=False"
cn.CursorLocation = adUseClient
cn.Open
End Function
'-----------------------------------------------------------------------------------------------------------
Private Sub Form_Load()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
sql = "Select * FROM AnexoEstadoPago Where AnexoEstadoPago.CentrodeCostos='" & Principal.TextCentrodeCostos & "'"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
Cuenta = rs.RecordCount
Set DataItems.DataSource = rec
End Sub
'----------------------------------------------------------------------------------------------------------
Private Sub Salir_Click()
Unload PreparaCobro
End Sub
Si es así eso de utilizar QueryDef. ¿Cómo se hace eso? :(
Intenta cambiando adOpenStatic por adOpenDynamic
Gracias por la ayuda.
Lo he resuelto cambiando la consulta por una de creación de tablas y desde ahí pude solucionar el problema (funciona como reloj suizo).
Que bueno que pudiste resolverlo
Gracias por la preocupación.
Aunque me las arregle con mis mañas para solucionar el problema, es bueno saber que uno puede contar con personas que están dispuestas a dar una mano. Por lo que uno en la medida que pueda debe y tiene que ayudar a los demás cuando este dentro de nuestras capacidades hacerlo.
Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas