Access - fallo codigo con filtro

 
Vista:

fallo codigo con filtro

Publicado por mamac (6 intervenciones) el 02/03/2007 15:50:36
hola a todos
tengo el sigiente codigo que no funcion bien

Private Sub Comando72_Click()
On Error GoTo Err_Comando72_Click
Dim rs As Recordset
DoCmd.Close
Set ControlActivo = Screen.ActiveControl
DoCmd.SelectObject acForm, "GESTION", False
DoCmd.GoToControl "Texto137"
DoCmd.Requery "subtarea"
DoCmd.GoToControl "subtarea"
Set rs = CurrentDb.OpenRecordset("Tareas")
rs.Close
Set rs = Nothing
Err_Comando72_Click:
End Sub
este codigo lo ejecuto desde otro formulario llamado Tares

y cuando el formulario GESTION esta filtrado al hacer el refresco el subtarea sa va al primer registro y lo que pretendo es que se quede igau que estaba antes de llamar al formulario tareas hay que tener en cuente que los dos estaqn abiertos
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

RE:fallo codigo con filtro

Publicado por Chea (1015 intervenciones) el 02/03/2007 18:36:11
El código no falla, está actuando correctamete. El Requery lo que hace es volver a cargar los datos en el formulario y, por tanto se sitúa en el primer registros.

Lo que debes hacer es memorizar el ID que se corresponda con la posición actual y, después del Requery, moverte a él.

Saludos
José Bengoechea Ibaceta
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

RE:fallo codigo con filtro

Publicado por mamac (6 intervenciones) el 02/03/2007 18:42:28
gracias por tu pronta contestacion pero me podrias ayuda ya que ya habia valorado la posibilidad de guardar una variable e utilizarla desprues pero no se como hacerlo ni donde ponerlo

he pensado
DIM variable AS string
variable=me.Id_Tarea

bien ya tengo la variable que ademas llevo a un control del formulario pues como hago para utilizarla
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

RE:fallo codigo con filtro

Publicado por Chea (1015 intervenciones) el 02/03/2007 23:04:55
Después de Requery, pondría algo así

On error resume next
Me.Recordsetclone.Findfirst "IdTarea = '" & Variable & "'"
Me.Bookmark = me.Recordsetclone.bookmark
err.clear

Observa que he delimitado Variable con comillas simples. Lo he hecho así porque tú has dimensionado Variable como string, aunque lo que parecería lógico es que id_tarea fuese un Long.

Si fuese long, sería

Me.Recordsetclone.Findfirst "IdTarea = & Variable

Saludos
José Bengoechea Ibaceta
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

RE:fallo codigo con filtro

Publicado por mamac (6 intervenciones) el 05/03/2007 12:48:55
hola José
ante todo darte las gracias por tu ayuda.
Esto no me funciona el cursor sigue marchandose al primer registro.
si el formulario principal se llama Gestion y el dichoso subformulario se llama subtarea
como lo arias tu, teniendo en cuenta que no funciona cuando esta filtrado
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

RE:fallo codigo con filtro

Publicado por Enrique (1299 intervenciones) el 05/03/2007 19:05:22
Mamac, por probar que no quede, intentalo así (puede que tengas que hacer alguna variación para adaptarlo):

'Definimos una variable Integer
Dim PosActual As Integer
'Almacenamos en la variable "PosActual" el Nº registro de la posición actual
PosActual = Form_subtarea.CurrentRecord
'Ejecutas tu código
....................
....................
....................
'Refrescamos el Subformulario "subtarea"
Form_subtarea.Requery
'Retornamos el control a la posición inicial
DoCmd.GoToRecord , , acGoTo, PosActual

Al hacer el Requery, es inevitable que el control se vaya al primer registro, pero inmediatamente debe regresar a la posición inicial de forma casi imperceptible. A mi me funciona bien para hacer algo ligeramente parecido a lo tuyo.

Un saludo
Enrique
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

RE:fallo codigo con filtro

Publicado por mamac (6 intervenciones) el 06/03/2007 17:15:50
Hola enrique gracias por tu interes
he provado el codigo pero me dice que la variable esta vacia
como hago para que se bloquee la variable y donde coloco los codigos
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

RE:fallo codigo con filtro

Publicado por Enrique (1299 intervenciones) el 06/03/2007 18:54:04
Hola Mamac:
Me parece que el origen de tu problema parte del Evento Private Sub Comando72_Click que pusiste en tu primer mensaje. Primero abres el Recordset "rs" que luego no usas para nada aparentemente, haces un SelectObject al formulario "Gestion", pasas el control al cuadro de texto "Texto137" para seguidamente hacer un Requery al Subformulario "subtarea" y pasarle el control, además de otras cosas más que no entiendo en obsoluto y todo esto dices que lo ejecutas desde el formulario "Tarea" que es un formulario distinto al de "Gestion" que seguramente será donde tienes insertado el subform "subtarea"........ sinceramente me pierdo.

No dudo que todo ese código que pones tendrá su sentido, pero para que la variable guarde el valor del registro activo de subtarea es necesario que antes de hacer nada, el foco esté situado en un determinado registro de subtarea para que después de hacer el refresco podamos usar el valor de la variable para regresar a la misma posición. Si en lugar del CurrentRecord necesitas que sea el "Id" del registro, tambien se puede hacer pero se tiene que dar la misma circunstancia porque si no, la variable queda sin valor (no es que lo pierda, es que no llega a tomarlo).

Seguro que es más fácil de lo que parece. Si quieres, intenta explicar lo que realmente quieres hacer, olvidándote de momento, del tema de que el cursor se quede donde estaba, que eso ya se resolvería después.

Un saludo
Enrique
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

RE:fallo codigo con filtro

Publicado por mamac (6 intervenciones) el 07/03/2007 09:20:56
hola enrique, estoy intentando hacer una Agenda comercial
tengo un formulario principal llamado "Gestion" y dentro de el 2 subformularios uno llamado "subtarea" y otro llamado "Acciones". El formulario "Gestion" es el principal que siempre esta abierto y desde el que hacemos todas las gestiones, no esta pensado para introducir datos sino que es el que muestra todas las agendas de los comerciales.
Tanto desde el propio formuario"Gestion" como el subformulario "subtares" lo tengo configurado en Tecla vista rapida a SI y en el evento press Key ejecuto el siguiente codigo:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
On Error GoTo Err_KeyDown
Dim ControlActivo As Control
Set ControlActivo = Screen.ActiveControl
If ControlActivo.ControlType = acTextBox Then
Dim stLinkCriteria As String
Dim stDocName As String
'aquí tu codigo
If KeyCode = 114 Then

DoCmd.OpenForm "Tareas", acNormal, "", "", acAdd, acNormal
Forms!TAREAS.Caption = "DANDO DE ALTA UNA TAREA"
End If
If KeyCode = 115 Then
stDocName = "Tareas"
stLinkCriteria = "[Id_Tarea]=" & Me![Id_Tarea]
DoCmd.OpenForm stDocName, , , stLinkCriteria
Forms!TAREAS.Caption = "MODIFICANDO ALBARAN" & " Nº " & Me.[Texto152]
End If
If KeyCode = 116 Then
stDocName = "Tareas1"
stLinkCriteria = "[Id_Tarea]=" & Me![Id_Tarea]
DoCmd.OpenForm "Tareas1", acNormal, "", "", acAdd, acNormal
Forms!tareas1.Caption = "ALTA LINEAS DE TRABAJO"
End If
End If

Err_KeyDown:

End Sub
Como veras abro el formulario "Tareas" que es el que utilizo para la modificacion de una Tarea como el dar una de alta nueva, y es estos datos son los que se muestran el el subformulario "subtarea".
El codigo que ejecuto en el Formulario "Tareas" es el siguiente
En el boton
Private Sub Comando72_Click()
On Error GoTo Err_Comando72_Click
Dim rs As Recordset
If Me.Texto116 > 1 And Me.Cod_Local_Tarea <> 0 And Me.Cod_Local_Tarea <> 1 Then
MsgBox "ESTE LOCAL YA TIENE UNA TAREA ACTIVA", vbCritical, "DUPLICADOS"
Me.Undo
DoCmd.Close
Set ControlActivo = Screen.ActiveControl
DoCmd.SelectObject acForm, "GESTION", False
DoCmd.GoToControl "Texto137"
DoCmd.Requery "subtarea"
DoCmd.GoToControl "subtarea"
Set rs = CurrentDb.OpenRecordset("Tareas")
rs.Close
Set rs = Nothing
Err_Comando72_Click:
End Sub
-----Ejemplo de Trabajo----
Abro el formulario "Gestion" y me muevo al subformulario Subtarea donde tengo todas las visitas pendientes de realizar por mis comerciales que son 9 y entonces supongamos que tengo 80 o 90 registros (a proposito los subformularos son en hoja de Datos y ademas cuando muevo el foco de un registro a otro hago esto para que el registro activo este seleccionado:DoCmd.RunCommand acCmdSelectRecord) entonces imaginemos que estoy en el registro 32 y desde el presonamos el {F3} para dar de alta una terea nueva, entonces unavez dada la terea de alta cierro el formulario
con el Comando72_Click y vuelvo al Formulario "Gestion"Subformulario"subtarea" y el registro activo del subformulario "subtarea" sigue en el registro 32 ,hasta aqui correcto
PREO MI PROBLEMA EMPIEZA CUANDO........
viene un comercial a liquidar su agenda entonces en el formulario "Gestion" tengo un combo para filtrar al comercial en cuestion con el siguiente codigo:

Private Sub Cuadro_combinado124_Change()
On Error GoTo Err_Change
If Me.Cuadro_combinado124 <> "0" Then
Me.Cuadro_combinado163.Visible = True
Me.subtarea.Form.Filter = "Ruta_Cial=" & Me.Cuadro_combinado124.Text
Me.subtarea.Form.FilterOn = True
Me.subtarea.Form.Recalc
DoCmd.RunCommand acCmdSelectRecord
End If
If Me.Cuadro_combinado124.Value = "0" Or Null Then
Me.Cuadro_combinado163.Visible = False
Me.subtarea.SetFocus
DoCmd.RunCommand acCmdRemoveFilterSort
DoCmd.RunCommand acCmdSelectRecord
End If
Me.Cuadro_combinado163.Requery
Me.Cuadro_combinado163.Value = ""
DoCmd.Requery "subtarea"
DoCmd.GoToControl "subtarea"
DoCmd.RunCommand acCmdSelectRecord

Err_Change:
End Sub
es aqui donde falla ya que cuando efectuo los mismos pasos que te explico anteriormente es cuando el cursor se posiciona en el registro 1 y no en el que tenia acttivo y me esta volviendo loco ya que en cada momento tengo que estar buscando el registro del que estabamos hablando

Espero haberme explicado bien y quiero agradecerte de antemano tu interes en 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

RE:fallo codigo con filtro

Publicado por Enrique (1299 intervenciones) el 07/03/2007 19:07:14
Hola Mamac, sinceramente me gustaría ayudarte pero comprenderás que no me es posible analizar toda esa cantidad de código que utilizas en tus Eventos para detectar en que momento falla, sobre todo veo que utlizas excesivamente el comando "DoCmd" y en particular el "DoCmd.RunCommand" con diferentes acciones, además de algún "Recalc" y varias veces "Requery". Así es imposible darte ninguna orientación, me siento incapaz solo viendo el código que utilizas sin poder probarlo.

Un saludo y espero que termines consiguiendo lo que quieres.
Enrique
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