Función para buscar registros - Recordset Access

Estoy desarrollando un BD de access, quisiera saber como puedo hacer para realizar una consulta y devolver en un recordset. Esto lo se hacer sin novedad.
La ayuda es para que la función sirva en cualquier formulario y se pueda filtrar por cualquiera de ellos o la combinación.

Es decir, que para este ejemplo puedo escribir el numero del contrato, y la sigla y el flag de activo. Y así encontrar los resultados. De igual manera, cualquier combinación de estos.
Tanto para este formulario como para cualquier otro.

2 respuestas

Respuesta
3

Te pongo en antecedentes y luego tu le cambias los nombres. Tengo un formulario Clientes con Nombrecompañia,..., Ciudad y País y en el encabezado del informe tengo tres combinados PaisA, PaisB y PaisC, en los que puedo elegir uno, dos o tres países para filtrar. En el botón tengo puesto

Dim julian As Variant
    Dim gonzalez As Variant
    Dim cabarcos As Variant
    Dim yoquese As Integer
    Dim nolose As String
    julian = Nz(Me.PaisA.Value, "")
    gonzalez = Nz(Me.PaisB.Value, "")
    cabarcos = Nz(Me.Paisc.Value, "")
    nolose = ""
    If julian <> "" Then
        nolose = "and [pais]='" & julian & "'"
    End If
    If gonzalez <> "" Then
        nolose = nolose & " or [pais]='" & gonzalez & "'"
    End If
    If cabarcos <> "" Then
        nolose = nolose & " or [pais]='" & cabarcos & "'"
    End If
    yoquese = Len(nolose)
    If yoquese > 0 Then
        nolose = Right(nolose, yoquese - 4)
    End If
    Me.Filter = nolose
    Me.FilterOn = True

¡Gracias! Julián González Cabarcos

Esta super la función, para cuando se trabaja en un formulario con recordsource asignado a una tabla.

Sin embargo, requiero trabajarlo con recordset.

Espero que pueda ayudarme

No lo he entendido, porque recordset no deja de ser registro y en Access en particular se refiere a los orígenes de los formularios e informes, pero en cristiano. Es lo mismo que cuando en código se le dice ... current. Db, es como si fueras a entrar en el ascensor del edificio donde vives y alguien te preguntara a que piso vas. No le dirías, al menos yo, voy al Pº Alfonso XIII edificio La marina 4º A,, si ya exstoy en el él. Otra forma, pero más laboriosa sería

If not isnull([paisa]) and not isnull([paisB]) and not isnull([paisc]) then

docmd.openform"form1",,,"loquesea=..... and otracosa=.....""

elseif not isnull([paisa]) and not isnull([paisb]) and isnull([paisc]) then

...

Es decir, que ejecute algo distinto en función de los valores que haya( o no haya)

Respuesta
1

Entiendo que tu consulta es para buscar desde cualquier formulario. Tienes que pasar a la función el nombre del formulario que llama la consulta, igualmente debes pasar los campos opcionales a consultar, con base en esta información creas una consulta SQL, algo como: (lo he elaborado de prisa)

Public Function Busqueda(mform as Form, Optionalm campo1 AS TipoDato, Optional mcampo2 As TipoDato, mcampo3 AS TipoDato, Optional mcampoN....)

'Puedes utilizar DAO o ADO

Dim db AS Database

Dim rs AS Rercordset

Dim sql AS String

Set db=Currentdb

Select Case mform

  Case "frmFormulario_1"

       sql="SELECT campo1 FROM tabla1 WHERE campo1= " & mcampo1

       set rs=db.OpenRecordset(sql)

      forms!mform!campo1= sql

      forms!mform!.Refresh

 Case "frmFormulario_2"

       sql="SELECT campo1 FROM tabla1 WHERE campo1= " & mcampo1

      set rs=db.OpenRecordset(sql)

      forms!mform!campo1= sql

      forms!mform!.Refresh

Case  ....

    ........

Case

    .....

End Select

rs.close

db.close

set rs=Nothing

set db=Nothing

End Function

Se pueden hacer otras mejoras como usa Screen etc, solo te doy una idea

¡Gracias! Eduardo Pérez Fernández

creo que no lo dije como era. :(

por ejemplo el formulario del ejemplo, tiene 5 campos. lo que quiero es:

  • Si el usuario ingresa un valor en la fecha (24/02/2017)se obtengan todos los registros de esa fecha.
  • El usuario escribe en la fecha (24/02/2017) y en el Flag (Verdadero), se obtengan los registros con estos dos filtros
  • la idea es que sin importar la cantidad de campos, el usuario pueda escribirlos y asi mismo se obtengan los resultados con esos filtros

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas