Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Estas en el tema de Conflicto de código con el selector activo del Cuadro de Lista - ACCES en el foro de Bases de Datos General en Foros del Web. Hola amigos! Les cuento que tengo un problema con la fila activa de un cuadro de lista. Tengo un formulario llamado CLIENTES, dividido por un ...
  #1 (permalink)  
Antiguo 06/04/2018, 19:13
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Hola amigos! Les cuento que tengo un problema con la fila activa de un cuadro de lista. Tengo un formulario llamado CLIENTES, dividido por un lado con el cuadro de lista (cmd_listaClientes) mostrando todas los registros de la tabla CLIENTES y por otro lado algunos datos provenientes de la misma tabla incluidos en campos de texto. Al pasar de un registro a otro, todo funciona bárbaro, porque dinámicamente hay relación del registro del cuadro de lista con los datos en los cuadros de texto. El problema surge que al querer activar un registro específico desde VBA lo hace bien pero al intentar irme a otros registros no puede salir el selector activo o el foco que se marcó desde VBA (hay un desfase en la relación del cuadro de lista con los datos de los cuadros de texto).

Al cargar la página del Formulario:
CÓDIGO: SELECCIONAR TODO

'PARA MOSTRAR AL CARGAR EL FORMULARIO
Private Sub Form_Current() 'Al cargar el formulario por registro
Código:
Dim verIdCliente As Integer
Dim registroSeleccionado As Integer

verIdCliente = 2 'Ejemplo: ver id_Cliente "2"
cmd_listaClientes.SetFocus
For registroSeleccionado = 0 To cmd_listaClientes.ListCount
If cmd_listaClientes.Column(0, registroSeleccionado) = verIdCliente Then
cmd_listaClientes.Selected(registroSeleccionado) = True
Exit For
End If
Next registroSeleccionado

End Sub

'PARA MOSTRAR LISTA DE CLIENTES EN EL CUADRO DE LISTA
Private Sub cmd_listaClientes_Click() 'Cuando se haga click en cada cliente (registro)

  Dim stDocName As String             'Declaración de variable "stDocName" propia por defecto.
  Dim stLinkCriteria As String        'Declararión de variable "stLinkCriteria" propia por defecto.
  stDocName = "CLIENTES"              'Iniciación del la variable "stName" guardando allí el nombre del formulario
  stLinkCriteria = "[Id_Cliente]=" & Me.cmd_listaClientes.Column(0) 'Inicialización de la variable "stLinkCriteria" guardando allí "Id_Cliente" del formulario

  DoCmd.OpenForm stDocName, , , stLinkCriteria  'Abrir registros del formulario

End Sub

Creo que especialmente hay un conflicto con estas 2 lineas de código:


Código:
If cmd_listaClientes.Column(0, registroSeleccionado) = verIdCliente Then


stLinkCriteria = "[Id_Cliente]=" & Me.cmd_listaClientes.Column(0) 'Inicialización de [la variable "stLinkCriteria" guardando allí "Id_Cliente" del formulario

Habrá alguna forma de solucionarlo por favor?

Archivo en funcionamiento:
http://ge.tt/5QgjPKp2
  #2 (permalink)  
Antiguo 06/04/2018, 20:33
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Saludo

Pues eso debe ser porque se tiene fijo el valor de la variable verIdCliente, no?

Lo que podrías hacer es volver esa variable global
(haciendo el dim luego de explicit y antes del form_current)

Luego, en el evento click de listaClientes
asignar a esa variable el valor de la columna que contiene el idCliente,
y finalmente en el evento del form podrías quitar todo el for
y dejar solo el setfocus, y luego el selected de listaclientes
enviandole la misma variable

(Eso en caso que haya entendido que sea eso lo que buscabas)
En caso contrario, detalla un poco más el asunto


__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 06/04/2018, 21:01
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Gracias por responder mortiprogramador.

Lo de variable global entiendo, me perdí aqui:
asignar a esa variable el valor de la columna que contiene el idCliente

Lo otro creo que podría seguir tus instrucciones.

Mi idea es que predeterminadamente se active un IdCliente preestablecido, por ejemplo "verIdCliente = 2", es decir que esté activado este registro en el cuadro de lista y que los campos de texto que están del lado opuesto sigan asociados a ese cliente, y en el caso que decida hacer clic en otros registros: los campos de texto que están al lado cambien.

El ejemplo en funcionamiento está en este link:
http://ge.tt/5QgjPKp2

Entre en confusión con esa línea:
asignar a esa variable el valor de la columna que contiene el idCliente
  #4 (permalink)  
Antiguo 06/04/2018, 22:21
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Conflicto de código con el selector activo del Cuadro de Lista - ACCES

De nada.

Bueno, entonces actualmente la parte que los valores
de los campos cambien dinámicamente esta funcionando
correctamente, el único asunto es que siempre queda
seleccionado el cliente predeterminado (En este caso el 2)
y entiendo que se quiere hacer que visualmente quede
seleccionado el que en realidad han elegido, correcto?

Si es así, entonces el asunto es más sencillo

1. Poner una variable global llamada IdCliente por ej

2. A la variable del punto 1, usarla en el evento Click de la lista,
y asignarle el valor de la columna
(es decir, el mismo valor que asignas a stLinkCriteria desde el Me en adelante)

3. En el evento de carga del formulario, antes del for
incluir un if donde se pregunte si IdCliente es mayor a 0,
y de cumplirse la condición, asignas a verIdCliente el valor de IdCliente

Espero que ahora si me haya explicado mejor
y que sea lo que buscas
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 07/04/2018, 01:08
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Buenas mortiprogramador.
Gracias otra vez por explicármelo.

Pude hacer esto:

Código:
Option Compare Database
Option Explicit

Public IdClientePredeterminado As Integer 'Declaración de la variable global

'PARA MOSTRAR AL CARGAR EL FORMULARIO
Private Sub Form_Current() 'Al cargar el formulario por registro
  Dim registroSeleccionado As Integer 'Declaración de la variable
  
  IdClientePredeterminado = 2 'Ejemplo: ver id_Cliente "2"
  
  cmd_listaClientes.SetFocus
  
  If IdClientePredeterminado > 0 Then
     If cmd_listaClientes.Column(0, registroSeleccionado) = IdClientePredeterminado Then
        cmd_listaClientes.Selected(registroSeleccionado) = True
     End If
  End If
  
'Next registroSeleccionado
End Sub

'PARA MOSTRAR LISTA DE CLIENTES EN EL CUADRO DE LISTA
Private Sub cmd_listaClientes_Click() 'Cuando se haga click en cada cliente (registro)
  Dim registroSeleccionado As Integer 'Declaración de la variable
  
  IdClientePredeterminado = Me.cmd_listaClientes.Column(0)

  Dim stDocName As String             'Declaración de variable "stDocName" propia por defecto.
  Dim stLinkCriteria As String        'Declararión de variable "stLinkCriteria" propia por defecto.
  stDocName = "CLIENTES"              'Iniciación del la variable "stName" guardando allí el nombre del formulario
  stLinkCriteria = "[Id_Cliente]=" & IdClientePredeterminado 'Inicialización de [la variable "stLinkCriteria" guardando allí "Id_Cliente" del formulario

  DoCmd.OpenForm stDocName, , , stLinkCriteria  'Abrir registros del formulario

End Sub
Resulta que todo sigue funcionando como antes, lo normal, pero no elije predeterminadamente el idCliente, en este caso, el 2 (a esta variable le puse de nombre "IdClientePredeterminado" en vez de "idCliente").

Intenté poner según mi entendimiento tus pasos.
Es probable que haya hecho algo mal.

Disculpá, que te pida ayuda para ver en qué me pude haber equivocado.
  #6 (permalink)  
Antiguo 07/04/2018, 01:31
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Hola mikehove

Lo hiciste excelente según las primeras indicaciones
que te comenté.

Sin embargo, cuando te lo volví a explicar se me paso
decirte que mejor dejaras lo que ya tenías, porque
por ejemplo podría pasar que borras el cliente predeterminado
por algún motivo, y cómo estan las modificaciones recientes
te daría error al no encontrarlo, por eso sería mejor
tener el ciclo que vos inicialmente usas

Adicional, manejar la variable que venías manejando
y hacer uso de la nueva solo para asignarla

Es decir, algo así:


Código vb:
Ver original
  1. Option Compare Database
  2. Option Explicit
  3.  
  4. Dim idClient As Integer
  5.  
  6. Private Sub Form_Current()
  7.  
  8.     Dim registroSeleccionado As Integer
  9.     Dim verIdCliente As Integer
  10.    
  11.     verIdCliente = 2
  12.    
  13.     If idCliente > 0 Then
  14.         verIdCliente = idClient
  15.     End If
  16.    
  17.     cmd_ListaClientes.SetFocus
  18.    
  19.     For registroSeleccionado = 0 To cmd_ListaClientes.ListCount
  20.         If cmd_ListaClientes.Column(0, registroSeleccionado) = verIdCliente Then
  21.             cmd_ListaClientes.Selected(registroSeleccionado) = True
  22.             Exit For
  23.         End If
  24.     Next registroSeleccionado
  25.  
  26. End Sub
  27.  
  28. Private Sub cmd_ListaClientes_Click()
  29.  
  30.     Dim stDocName As String
  31.     Dim stLinkCriteria As String
  32.    
  33.      stDocName = "CLIENTES"
  34.      idClient = Me.cmd_ListaClientes.Column(0)
  35.      stLinkCriteria = "[Id_Cliente]=" & idClient
  36.     DoCmd.OpenForm stDocName, , , stLinkCriteria
  37.  
  38. End Sub
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 07/04/2018, 02:27
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Conflicto de código con el selector activo del Cuadro de Lista - ACCES

Muchísima gracias mortiprogramador por tu valiosísima guía!
Funciona! Estoy muy contento.


Un saludo desde Córdoba, Argentina.

Etiquetas: activo, campos, conflicto, cuadro, lista, registros, selector, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:54.