Access - volver al registro de donde partió en formulario filtrado

 
Vista:
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 20/04/2017 16:43:30
Hola! Se trata de la agenda de mi consultorio donde muchas veces se repiten los pacientes y los horarios todas las semanas por lo que con un botón copio los pacientes de hoy y los copio con dia=fechaFiltro+7. Para ello tengo un formulario TurnosForm y en el encabezado tengo un cuadro de texto para filtrar el día del cual quiero copiar todos los pacientes y sumarle una semana. Para empezar puse un botón al registro en el formulario para que copie solo ese paciente una semana más en un registro nuevo . Uso variables dia, VPaciente, registro actual

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Copiar_Click()
CopiarSemanaProxima
End Sub
 
Sub CopiarSemanaProxima()
VPaciente = IdPaciente
registroactual = IdTurno + 1    'para saber a cual registro volver
dia = FechaFiltro + 7
DoCmd.GoToRecord , , acNewRec
Fecha = dia
IdPaciente = VPaciente
IdTurno.SetFocus
DoCmd.FindRecord registroactual, acAnywhere, Falso, acSearchAll, False, acCurrent, True
End Sub
No se por qué no funciona el findrecord. Probé también con gotorecord, refresh....no se
El segundo paso sería con un botón en el encabezado para repetir este código mientras Fecha sea igual a FechaFiltro. Desde ya gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 21/04/2017 18:50:40
Funciona!!!
La instrucción 7 la dejé:

registroactual = IdTurno

Cambie las instrucciones 12 y 13 por:

Requery
VolverA registroactual

y agregué:

1
2
3
4
5
6
7
8
9
10
Private Sub BtnSemanaProx_Click()
Do While Fecha = FechaFiltro
CopiarSemanaProxima
Loop
End Sub
 
Public Sub VolverA(codigo)
DoCmd.FindRecord codigo, acEntire, , acSearchAll, , acAll
DoCmd.GoToRecord , , acNext
End Sub

Serán bienvenidas sugerencias de mejoras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 23/04/2017 12:24:07
Lo que ayer anduvo bien me produjo un error con el botón BtnSemanaProx. Se produjo un error que me hizo un bucle infinito que copiaba el primer registro del filtro. Lo tuve que detener con ctrl+spr y copiar la estructura de la tabla y pegarle solo los registros que servían.
Creo que podría estar causado por donde estaba el cursor (el control que tenia el foco) en el momento que hice click al BtnSemanaProx
Alguien puede ayudarme?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

volver al registro de donde partió en formulario filtrado

Publicado por Anonimo (3322 intervenciones) el 24/04/2017 11:57:53
.- Una consulta de selección que obtenga los datos a manipular.
.- Una consulta de inserción que añada los datos (ya manipulados: la consulta anterior) a la tabla

Con ello (y sin moverse del registro actual) obtendríamos el resultado deseado.

Solo quedaría un detalle, dado que la inserción se efectúa de forma independiente, seria necesario refrescar (recargar) el formulario para que los presentase, pues estarían en el origen (la tabla) pero no en el formulario.

Suponiendo:

Tabla con datos: Tabla1
Campos a tratar: ElPaciente, LaFecha
Formulario (con el cuadro de texto y la fecha seleccionada): Formulario1, TurnosForm

Consulta de selección (vista SQL):
SELECT [LaFecha]+7 AS Expr1, Tabla1.ElPaciente
FROM Tabla1
WHERE (((Int([LaFecha]))=[Formularios]![Formulario1]![TurnosForm]));


Consulta de inserción (vista SQL):
INSERT INTO Tabla1 ( LaFecha, ElPaciente )
SELECT Consulta1.Expr1, Consulta1.ElPaciente
FROM Consulta1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 30/04/2017 18:29:45
Perdona que no he escrito antes pero estuve estudiando sobre consultas de selección e inserción con las cuales no había trabajado antes. Gracias por tu respuesta!!!
La solución que me brindas es mucho más simple y se ejecuta más rápido! (aunque permíteme alardear de mi código, es que ha sido un gran logro para un novato como yo).
1- De acuerdo a tus indicaciones puse a TurnosForm como subformulario de un Formulario1 donde tenía el cuadro de texto con la FechaFiltro (Antes los registros filtrados estaban en el detalle de TurnosForm como Formulario Continuo). Ahora lo hice como Hoja de Datos. ¿Se puede ajustar los bordes a los campos que necesito?
2- Serías tan amable de explicarme por qué se usa Int ([LaFecha])?. Según lo que encontré esa función recorta (También fix) la parte decimal. Cambié
WHERE (((Int([LaFecha]))=[Formularios]![Formulario1]![TurnosForm])); por
WHERE (((Int([LaFecha]))=[Formularios]![Formulario1]![FechaFiltro]));
3- Interpuse una Consulta de Creación de Tabla que crea una TabladeAgregado. Puse un botón con el Asistente para ejecutar esa consulta y en su código le agregué “DoCmd.OpenForm “AgregadoTabla”, acFormDS” que me abre un formulario de esa tabla encima de TurnosForm para poder editar los registros a insertar. Luego otro botón cierra ese formulario y ejecuta una consulta de inserción de esos registros. ¡Funciona! Eliminé los mensajes de advertencia con una línea “DoCmd.SetWarnings false” y “true” al principio y final del código de los botones. ¿Por qué se abre la hoja de propiedades cuando abre TurnosForm?
4- En TurnosForm tenía un cuadro de texto con DBúsq (DLookup) que insertaba el nombre del paciente (que estaba en otra tabla ya que en el Turno solo ponía su IDPaciente) con un cuadro combinado. Ahora sale como error: #¿Nombre?. ¿Sabrías decirme por qué? Los pacientes actuales están señalados con un campo con “Si/No” y los que tienen el alta los destildo para que no aparezcan todos en el cuadro combinado pero me gustaría poder ver a todos TurnosForm.
Vuelvo a agradecer y pido por favor que tú o algún otro programador me diga si está bien lo que hice o me brinde alguna idea para mejorar y terminar mi base de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 04/05/2017 16:35:19
Si Anónimo o algún otro programador sería tan amable de responderme por qué usó Int ([LaFecha]) doy por resuelta mi consulta y para mis otras preguntas abro otros hilos. Vuelvo a agradecer la solución de Anónimo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 30/04/2017 18:31:28
Había agregado unas líneas de código que provocó este error. Me rectifico: Funciona bien!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 01/05/2017 16:47:55
Este comentario lo puse en relación al error que provocaba un bucle infinito. Tal como está escrito en esta página el código funciona bien, aunque la solución que me brinda Anonimo es superadora
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

volver al registro de donde partió en formulario filtrado

Publicado por Anonimo (3322 intervenciones) el 05/05/2017 10:14:47
Aplicar la funcion 'Int' al dato 'Fecha', le elimina la parte horaria (si tiene) y asume a todos los registros de un mismo dia.

Dado que son citas (sean medicas o de cualquier otro tipo) se supone que se efectuaran a lo largo del dia a diferentes horas y esa parte (la hora) se ignora utilizando 'Int'.

Quizas la hora sea otro campo de la tabla (un desperdicio de espacio), pero se desconoce la aplicacion real y asi se evitan divergencias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

volver al registro de donde partió en formulario filtrado

Publicado por Daniel (15 intervenciones) el 05/05/2017 15:12:26
Gracias Anónimo nuevamente! Muy clara tu explicación. Doy por resuelto el tema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar