Como llenar automáticamente 5 cuadros de texto en access

Tengo 15 cuadros de textos llamados

c1, c2, c3, c4 ......c15

A veces todos los cuadros tienen información

Otras solo uno o 2, depende la consulta

A parte tengo 5 cuadros de texto

m1, m2, m3, m4, m5

Lo que quiero haces es

Al oprimir un botón

m1 = c1

Pero en el caso de los demás cuadros

M2 = al siguiente cuadro c(x numero) sea diferente a c1

M3 = al siguiente c(x) donde sea diferente el numero

Ejemplo

c1=abc

c2=abc

c3=def

c4=ghi

c5=jkl

c6=jkl

entonces los cuadros m quedan asi

m1=abc

m2=def

m3=ghi

m4=jkl

¿Se puede hacer eso?

¿Cómo?

3 Respuestas

Respuesta
1

Vamos a ver si me explico. Hacer se puede hacer, pero es cierto que tampoco le veo utilidad ninguna.

Como no dices si los cuadros de texto son independientes voy a suponer que sí. Voy a tratar de ser lo más sencillo posible. Construyo una tabla Aux que sólo sirve para "guardar" los datos de esos cuadros de texto C1,... luego se borra.

Como puede darse el caso de que habrá valores repetidos con la tabla construyo una consulta Consulta1 para agrupar los datos y "eliminar" los repetidos.

Y con esta consulta1 construyo una consulta Consulta2 donde le añado un campo Orden como ves en la imagen(luego te explico para que sirve)

Ahora supongamos que tengo el formulario que dices, donde en los cuadros C1,.. puede haber valores repetidos. Sólo pongo 8 cuadros, pero es lo mismo para 15.

Cuando hago doble clic en el botón pasar (sí, si, doble clic, luego te explico el porqué), me deja la consulta 2 como

Es precisamente ese valor de Orden el que voy a usar para rellenar los cuadros de texto M1,... con lo que el formulario me queda

En caso de que hubiera más valores C sería lo mismo

El código del evento Al hacer clic del botón es

Private Sub Comando26_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from aux"
Dim i As Byte
For i = 1 To 8
If Not IsNull(Controls("C" & i)) Then
DoCmd.RunSQL "insert into aux(campoa)values('" & Controls("C" & i).Value & "')"
Else
Exit Sub
End If
Next
End Sub

Es decir, ingrésame en la tabla Aux aquellos valores de los controles C que no estén vacíos, con lo cual la consulta1 me "elimina" los duplicados y la consulta2 le da un orden.

Y el código del evento Al hacer doble clic del botón es

Private Sub Comando26_DblClick(Cancel As Integer)
For b = 1 To 5
Controls("M" & b).Value = DLookup("campoA", "consulta2", "orden=" & b & " and campoa is not null")
Next
End Sub

Es decir, vete rellenando los controles M1, M2,... con los  valores que en la consulta2 tengan el orden 1,2,...( para eso servía) y que no estén vacíos.

Me había olvidado de decirte que cuando haces doble clic primero ejecuta Al hacer clic y luego ejecuta el doble clic

Respuesta
1

De mi parte no entiendo que es lo que quiere y cuál es la utilidad, sería conveniente adicionara una imagen etc.

Respuesta

Las condiciones que han de cumplir los datos deben de quedar muy claras, en el ejemplo hay ambigüedad.

Hay 15 cuadros (c1... c15) que obtienen valores de una consulta, se desconoce cuantos y cuales tendrán un valor y (según lo expuesto) parece que se eliminan las repeticiones.

Habrá que filtrar la respuesta de esa consulta para eliminar los cuadros de texto sin valor asignado y a la vez verificar que los datos son únicos.

Tras ello (y por si se da el caso) se evaluaría cuantos resultados se obtienen y también cuantos, lo de asignarlos por orden a los (m1 ... m5) es sencillo.

Lo que tiene que quedar claro es el conjunto de condiciones que han de cumplir los datos y plantearse como asignar a los cinco posibles resultados (m1 ... m5) las respuestas (c1 ... c15) en el caso de ser superior a cinco.

Si son cero o inferior a seis no habrá problema, pero si la 'buena' es la séptima ...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas