** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Velocidad consulta  o  funciones dominio
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoVelocidad consulta o funciones dominio

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2210
Enlace directo a este mensaje Tema: Velocidad consulta o funciones dominio
    Enviado: 08/Abril/2018 a las 12:42
Buenas.
Me a surgido una duda....tengo diseñado una busqueda que combina una consulta con dos criterios obtenidos de un formulario y sobre esa consulta utilizo un if(dcount.......)>0 then... y despues dlookup para poner datos a dos variables. Esa consulta o da 0 registros o uno solo. Si da uno, de un par de campos obtengo los datos para esas dos variables con 2 dlookup
Como seria mas rapida esa busqueda, como lo tengo diseñado ahora, o haciendo todo solo con las funciones de dominio sobre la tabla con los correspondientes criterios????

Saludos

Editado por rokoko - 08/Abril/2018 a las 12:43
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 13:16
Pon toda la serie de órdenes aquí que veamos como funciona ....


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 16:16
Aqui esta el codigo.  La consulta qryVerificaTrabajador tiene 2 criterios pillando datos de un formulario. La duda era que es mas rapido, como lo tengo o con las funciones de dominio con sus criterios(2) atacando a las tablas directamente

If DCount("IdTrabajador", "qryVerificarTrabajador") > 0 Then    'verifica que no esta en otra hoja de firmas
           
           
            Dim varNombre As String
            Dim varParque As String
            varNombre = DLookup("Trabajador", "qryVerificarTrabajador")
            varParque = DLookup("Parque", "qryVerificarTrabajador")
            MsgBox varNombre & " ya esta en la hoja de firmas de " & UCase(varParque) & " en esta misma fecha, no se puede el mismo trabajador en 2 hojas de firmas en la misma fecha.", vbExclamation
            Me.Undo
            DoCmd.GoToRecord , , acNewRec   
            Me.Trabajador.SetFocus
            Exit Sub
  End If


Editado por rokoko - 08/Abril/2018 a las 16:18
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 17:11
Hazlo con un recordset

Dim  Rs As DAO.Recordset

Set Rs = Currentdb.Openrecordset("SELECT * FROM qryVerificarTrabajador WHERE IdTrabajador = " & me.IdTrabajador, dbopenforwardonly)
if Rs.recordcount <> 0 then
    'existe el registro
    msgbox "Ya Existe"
    rs.close
    me.undo
    .
    .
end if
rs.close

Ojo, comprueba lo escrito (que esta hecho al vuelo) y completa lo que falta.

Siempre es mejor un acceso a recordset que tres funciones de dominio.

Nota: Un acceso a recordset tarda lo mismo que una función de dominio


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 17:23
A ver.....los recordset se me dan mal.......Unhappy
La consulta qryVerifica trabajador ya tiene sus criterios..es mejor que estos criterios vayan fuera, con el recordset???

Y como obtengo los datos para las dos variables con 1 solo recordset??

la consulta qryVerificaTrabajador  es esta

SELECT tbFicha.Fecha, tbFichaTrabajador.IdTrabajador, tbFicha.Parque, tbFichaTrabajador.Trabajador
FROM tbFicha INNER JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles
WHERE (((tbFicha.Fecha)=[Formularios]![frmFicha]![Fecha]) AND ((tbFichaTrabajador.IdTrabajador)=[Formularios]![frmFicha]![frmDetallesFicha]![IdTrabajador]));


Saludos


Editado por rokoko - 08/Abril/2018 a las 17:24
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 18:18
Puedes tirar de la Query o hacerlo directamente, yo lo haría directamente ....

La verdad es que una vez vista la Query, es lo que necesitas ....

Dim  Rs As DAO.Recordset, SQL As String

SQL = "SELECT tbFicha.Fecha, tbFichaTrabajador.IdTrabajador, tbFicha.Parque, tbFichaTrabajador.Trabajador " & _
          "FROM tbFicha INNER JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles " & _
          "WHERE (((tbFicha.Fecha)=[Formularios]![frmFicha]![Fecha]) AND ((tbFichaTrabajador.IdTrabajador)=[Formularios]![frmFicha]![frmDetallesFicha]![IdTrabajador]))"
Set Rs = Currentdb.Openrecordset(SQL, dbopenforwardonly)
if Rs.recordcount <> 0 then
    'existe el registro
    msgbox "Ya Existe"
    rs.close
    me.undo
    .
    .
end if
rs.close


Editado por Mihura - 08/Abril/2018 a las 18:18
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 18:43
Ok, gracias. Luego lo pruebo.
Y para extraer los datos para las dos variables, hago un recordset para cada variable?? o se puede extaer de alguna forma del mismo recordset??
Estas variables son para el msgbox...

Saludos
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 19:39
Necesitas ver el uso de recordsets urgentemente ....  LOL


me.fecha = rs!Fecha
me.trabajador = Rs!Trabajador
.
.
.

       
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 21:32
Cierto, pero no se porque me dan miedo...LOLOuch
Clap

Mañana lo pruebo, muchas gracias.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 08/Abril/2018 a las 21:34
Pues no muerden .....  Wink

Muchas de nadas.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2210
Enlace directo a este mensaje Enviado: 09/Abril/2018 a las 23:24
Bueno, pues en principio funciona muy bien, se te habia olvidado un detallito, decirme que en la consulta hacia falta poner los parametros en formato fecha americano, comillas,almoadillas  etc etc  jajajaWinkWink   pero poco a poco la he armado a base de prueba error, un poco ya he sudado....... me he imaginado que el error de se esperaba parametro 2  seria por eso.......
ClapClap  

Asi queda al final.  Saludos


Dim Rs As DAO.Recordset, SQL As String

          SQL = "SELECT tbFicha.Fecha, tbFichaTrabajador.IdTrabajador, tbFicha.Parque, tbFichaTrabajador.Trabajador " & _
          "FROM tbFicha INNER JOIN tbFichaTrabajador ON tbFicha.id = tbFichaTrabajador.IdDetalles " & _
          "WHERE (((tbFicha.Fecha)= #" & Format(Forms!frmFicha!Fecha, "mm/dd/yyyy") & "#) AND ((tbFichaTrabajador.IdTrabajador)= " & Me.IdTrabajador & " ))"
          
          Set Rs = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
          
          If Rs.RecordCount > 0 Then
          varParque = Rs!Parque
          varNombre = Rs!Trabajador
          
          Rs.Close
          '-----------------------------------------------------------------------
            
            
            
            
            MsgBox UCase(varNombre) & " ya esta en la hoja de firmas de " & UCase(varParque) & " en esta misma fecha, no se puede el mismo bombero en 2 hojas de firmas en la misma fecha.", vbExclamation
            Me.Undo
            DoCmd.GoToRecord , , acNewRec    
            Me.Trabajador.SetFocus
            Exit Sub
            End If
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 10/Abril/2018 a las 08:19
Sorry, no me había dado cuenta ...  Big smile

De todas formas los charcos, de uno en uno .....

Y para que te vayas entrenando con las fechas:




Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable