** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Concatenar/descontar en horizontal casillas sudoku
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoConcatenar/descontar en horizontal casillas sudoku

 Responder Responder
Autor
Mensaje
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Tema: Concatenar/descontar en horizontal casillas sudoku
    Enviado: 01/Abril/2020 a las 20:47
Buenas noches a todos.

Me explico más ampliamente.

Se me ocurre ponerme a crear un programa de sudokus. 

Del estilo 9 x 9. (81 casillas)

Uso 9 registros y tengo 9 campos (n1,n2...,..,n9)

Hago un formulario continuo y en el pie del informe le pongo 9 (casillas/controles de texto) para que me "concatene" los números que ya existen (así lo pongo en el origen del control del control de texto): =Nz(n1) & Nz(nn2).... & Nz(n9). 

Con esto saco las sumas verticales de los número que ya existen puestos (lógicamente no aparecen los que no existen en las casillas en blanco. Las no ocupadas de números).

Hasta aquí ningún problema, todo perfecto, pero.... claro, quiero mas... y sigo.

Con código, ya consigo que además, en otras 9 casillas, (también colocadas en el pie del informe), muy simple tengo una varialbe NumPendPoner="123456789", a la que con Replace y dentro de un For, le voy quitando los números que existen en las Casillas anteriores, al final se me queda una variable NumPendPoner (dependiendo de las casillas ocupadas) de los números que aún no están puestos en esa columna. Esa variable se la asigno a las (casillas/controles de texto) correspondientes y listo.

Bien llegado hasta aquí, si os fijáis en el título del asunto, puse: Concatenar/descontar...., es por la razón de que no se (no lo he encontrado) si existe la posibilidad o la función, para hacerlo también automáticamente al igual que en las primeras (casillas/controles de texto), las que concatenan los números que ya están.

Pero, claro, todavía quiero mas... y digo, si me los concatena perfectamente abajo en el pie del informe, voy a ponerle una casilla/control de texto, en las horizontales.... (¿cómo he dicho?), no puedo ponerle nada mas que una (casilla/control de texto) por fila, bueno, conociéndome, voy y pongo una casilla/control de texto, para que concatene también y.... las concatena, igualmente sin problema. Puesta una casilla y obtenidos 9 resultados.

Ya os imagináis, ¿no?, cuando he puesto otra mas al lado para que me las "descontase" de las otras, tan solo actúa en la primera horizontal (en el primer registro, para hablar en Access).

Bueno, aquí me he encayado....

Ojo sí tengo que decir que también he encontrado la solución para esta última cuestión, es la de utilizar en el pie del informe otros tantos controles de texto y hacer lo mismo que con el otro For anterior, un nuevo For para que me quite las horizontales existentes.

Repito, ignoro si hay otra manera de hacerlo y es por eso que he expuesto lo mas explicado posible el problema.

Lo mismo y existe, pero lo desconozco. Si alguien tiene alguna idea, la probaré.

Gracias por vuestra paciencia al leer el tocho que he puesto.

Saludos.




Editado por VIMIPAS - 01/Abril/2020 a las 20:51
Gracias
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 01/Abril/2020 a las 22:32
Has probado a colocar esos cuadros de texto como campos en una consulta que sirva de origen al formulario continuo? Lo que tengas ahora te puede servir de base como una función pública para calcular el campo, y luego usas un Requery para actualizar datos.

Otra posibilidad es tener ese campo en la tabla, y actualizar registros.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Enviado: 01/Abril/2020 a las 23:56
Hola buenas noches.

Pitxiku, aquí dejo mi prueba:


Consulta1

N1

N2

N3

N4

N5

N6

N7

N8

N9

id_sudoku

id

Qdificultad

SIhay1

Expr1

EXPR2

4

2

24

208

4

42

12356789

1356789

7

1

8

24

209

4

718

#Error

7

8

2

24

210

4

782

3

9

4

24

211

4

394

12456789

8

2

1

9

24

212

4

8219

6

4

8

2

24

213

4

6482

1

3

5

24

214

4

135

#Error

8

5

4

1

6

24

215

4

85416

12345679

6

5

2

24

216

4

652

12345789



SELECT sudokuCOPIADO.N1, sudokuCOPIADO.N2, sudokuCOPIADO.N3, sudokuCOPIADO.N4, sudokuCOPIADO.N5, sudokuCOPIADO.N6, sudokuCOPIADO.N7, sudokuCOPIADO.N8, sudokuCOPIADO.N9, sudokuCOPIADO.id_sudoku, sudokuCOPIADO.id, sudokuCOPIADO.Qdificultad, [n1] & [n2] & [n3] & [n4] & [n5] & [n6] & [n7] & [n8] & [n9] AS SIhay1, IIf(NZ([N1])>0,Replace("123456789",nz([n1]),"")) AS Expr1, IIf(NZ([N9])>0,Replace([EXPR1],nz([n9]),"")) AS EXPR2
FROM sudokuCOPIADO;

Tan solo la he probado con el primer registro que es donde hay dos números, en N1 y N9. La extensión de la SQL es tremenda, ya que para esos dos números he debido poner el primer Replace en Expr1 y luego sobre Expr1 actuar de nuevo con un nuevo Replace en Expr2.

Es decir que Expr1 tiene todos los que faltan menos n1 y Expr2 los que tenía Expr1 menos n9.

Funcionar funciona, pero debo poner todos los Replaces (9) en los n1…n9 con su Nz para evitar errores.

La idea es correcta, no había caído en ella, que por eso he abierto el hilo. De todas formas sigo abierto a si alguien sabe/quiere aportar algo más.

Gracias Pitxiku.

Gracias
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Enviado: 02/Abril/2020 a las 14:03
Hola de nuevo.

Prueba terminada de Pitxiku:

Consulta1
N1 N2 N3 N4 N5 N6 N7 N8 N9 id_sudoku id Qdificultad Ptos Expr1 EXPR2 Expr3 Expr4 Expr5 Expr6 Expr7 Expr8 PdPon
4






2 24 208 4 42 12356789 12356789 12356789 12356789 12356789 12356789 12356789 12356789 1356789






7 1 8 24 209 4 718 123456789 123456789 123456789 123456789 123456789 123456789 12345689 2345689 234569



7 8 2


24 210 4 782 123456789 123456789 123456789 12345689 1234569 134569 134569 134569 134569
3
9 4




24 211 4 394 12456789 12456789 1245678 125678 125678 125678 125678 125678 125678

8 2 1


9
24 212 4 8219 123456789 12345679 1345679 345679 345679 345679 345679 34567 34567

6 4

8
2
24 213 4 6482 123456789 12345789 1235789 1235789 1235789 123579 123579 13579 13579

1

3


5 24 214 4 135 123456789 23456789 23456789 23456789 2456789 2456789 2456789 2456789 246789
8

5 4 1 6

24 215 4 85416 12345679 12345679 12345679 1234679 123679 23679 2379 2379 2379
6
5 2




24 216 4 652 12345789 12345789 1234789 134789 134789 134789 134789 134789 134789

No necesita el IIf:

SELECT sudokuCOPIADO.N1, sudokuCOPIADO.N2, sudokuCOPIADO.N3, sudokuCOPIADO.N4, sudokuCOPIADO.N5, sudokuCOPIADO.N6, sudokuCOPIADO.N7, sudokuCOPIADO.N8, sudokuCOPIADO.N9, sudokuCOPIADO.id_sudoku, sudokuCOPIADO.id, sudokuCOPIADO.Qdificultad, [n1] & [n2] & [n3] & [n4] & [n5] & [n6] & [n7] & [n8] & [n9] AS Ptos, Replace("123456789",nz([n1]),"") AS Expr1, Replace(NZ([EXPR1]),nz([n2]),"") AS EXPR2, Replace([EXPR2],nz([n3]),"") AS Expr3, Replace([EXPR3],nz([n4]),"") AS Expr4, Replace([EXPR4],nz([n5]),"") AS Expr5, Replace([EXPR5],nz([n6]),"") AS Expr6, Replace([EXPR6],nz([n7]),"") AS Expr7, Replace([EXPR7],nz([n8]),"") AS Expr8, Replace([EXPR8],nz([n9]),"") AS PdPon
FROM sudokuCOPIADO;

Y lo que he hecho, puesto que no me permite desmarcar para que no se vean los Expr1... Expr8, es hacer otra consulta, sobre esta misma consulta, sin elegir los Expr1. Al final queda así:

CsudokuCOPIADO
N1 N2 N3 N4 N5 N6 N7 N8 N9 Ptos PdPon
4






2 42 1356789






7 1 8 718 234569



7 8 2


782 134569
3
9 4




394 125678

8 2 1


9
8219 34567

6 4

8
2
6482 13579

1

3


5 135 246789
8

5 4 1 6

85416 2379
6
5 2




652 134789

SELECT Consulta1.N1, Consulta1.N2, Consulta1.N3, Consulta1.N4, Consulta1.N5, Consulta1.N6, Consulta1.N7, Consulta1.N8, Consulta1.N9, Consulta1.Ptos, Consulta1.PdPon
FROM Consulta1;

Por mi, satisfactorio. Gracias Pitxiku, por algo dicen que ven cuatro ojos más que dos.

De todas formas lo voy a dejar abierto, un poco de tiempo, por si alguien tuviera alguna idea más.

Saludos.
Gracias
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 02/Abril/2020 a las 17:34
Un Saludo.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Enviado: 02/Abril/2020 a las 22:00
Buenas noches.

Gracias Mounir.... para los que no saben como/porque/con que comerse la cabeza, como.... yo, por ejemplo.

Una página Web a tener en cuenta.

Saludos.
Gracias
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 03/Abril/2020 a las 14:25
Pues yo hice un sudoku en su día, pero en lugar de tantas complicaciones, me definí una matriz en memoria de 9x9 y lo hice todo ahí, en la pantalla solo capturaba/mostraba datos.

Creo que esa forma es mucho más fácil.

Si lo encuentro lo publico.
El Búho es un pajarraco
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Enviado: 03/Abril/2020 a las 18:42
Hola Luis.

En realidad fue mi primera idea, de hecho en mi programa de búsquedas donde se presentan búsquedas probables a lo que se esté buscando (dentro de funciones favoritas lo tengo colgado), utilizo una matriz para comparar si la palabra tecleada tiene alguna otra palabra próxima (en un rango del al 0 al 1, -el resto hacia arriba, 2..., etc. son descartadas-), en la base de datos... y es así como consigo la proximidad para presentarlas.

No obstante, y este es mi punto débil (lo reconozco), me costó Dios y ayuda conseguir el programa para esas búsquedas por aproximación, pues no soy nada más que un simple aficionado y las cosas complejas (que por cierto, son por las que más me intereso), como digo, me cuestan y mucho.

Es por eso que empecé con, para los sudokus, con un formulario en blanco y le coloqué las 81 casillas (ni formulario continuo, ni nada de nada), a pelo y sobre la propia pantalla, viendo (número a número, fila a fila, etc.) como lo iba montando (Msgbox para cada duda, etc.) y donde tenía los errores lo iba desmenuzando, como digo, poco a poco.

Siguiente paso, ahora que ya mas/menos se como se hace, con registros.

Ten por seguro que el otro siguiente paso será con matriz.

Es por ello que te agradezco, Luis, que tengas a bien colocar aquí tu exposición, si la encuentras -como dices-.

De hecho no he pedido que cierren el hilo precisamente por esto, que exista alguien que considere oportuno exponer cualquier método, como es tu caso.

Nuevamente gracias.

Por último: ¿Y si tras ver lo que tu expongas, Luis, me salto el paso intermedio = los registros?

Saludos.
Gracias
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Enviado: 27/Abril/2020 a las 23:43
Bueno, yo doy por concluido el asunto.

Tan solo me queda agradecer a todos los intervinientes su atención. Gracias aquí mismo a todos ellos.

Por favor, pueden cerrar este hilo.

Saludos
Gracias
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable