Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: Jeronimo en Enero 23, 2013, 12:36:10 pm
-
Hola.
Tengo la tabla "posicionesmesas" (es un proyecto de restaurante) con los campos "mesa", "x", "y" y "tipo".
En el campo "mesa" guardo el número de la mesa; en los campos "x" e "y" guardo las coordenadas de las mesas (en realidad, de los botones que las representan) y en "tipo" guardo "p" si es el valor predeterminado o "a" si es la posición actual.
Entonces, en la tabla puedo tener lo siguiente:
mesa x y tipo
1 210 210 p
2 540 210 p
3 800 210 p
4 210 500 p
5 540 790 p
6 800 1020 p
1 210 210 a
2 360 210 a
3 800 210 a
4 210 500 a
5 540 790 a
6 800 1020 a
En este ejemplo tengo seis mesas dispuestas en tres columnas y tres filas. Los registros cuyo campo "tipo" tienen valor "p" son los que utilizo para que, luego de haber modificado la posición actual de las mesas (valor "a"), se puedan volver a poner en la posición predeterminada.
Ahora bien, lo que necesito es saber si hay forma de hacer el cambio en una sola consulta SQL (trabajo con MySQL).
Podría hacer lo siguiente:
Tabla.Open "SELECT mesa, x, y FROM posicionesmesas WHERE tipo = 'p'"
For i = 1 to 6
base.Execute "UPDATE posicionesmesas SET x = " & Tabla!x & ", y = " & Tabla!y & " WHERE mesa = " & Tabla!mesa & " AND tipo = 'a'"
Tabla.MoveNext
Next i
Pero no me gusta. Estoy seguro que debe haber una forma de hacer eso en una sola consulta. Probé poniendo lo siguiente pero no funcionó.
base.Execute "UPDATE posicionesmesas pm SET x = (SELECT x FROM posicionesmesas pm2 WHERE pm2.mesa = pm.mesa AND pm2.tipo = 'p') WHERE tipo = 'a'"¿Saben si se puede hacer lo que quiero?
Muchas gracias.
Jerónimo
-
Amigo, ¿lo que quieres es restaurar valores predeterminados? o sea, los valores de X e Y del tipo P se reemplacen en los del tipo A ¿es asi?
Podrías tener otra tabla (TablaP) con los valores X e Y, borras la tabla posicionesmesas e insertas todos los valores de la TablaP
Podrías tener dos campos mas "xp" e "yp" para copiar de esos campos a los campos "x" e' "y".
No se, quiza otro amigo te capte mejor, pero por el momento eso es lo que te entendi, espero haberte ayudado.
Saludos
-
¡Excelente, Yván!
No había pensado en lo de "xp" e "yp". Es una gran solución.
Igualmente, me quedo con la espina por saber hacer el otro procedimiento de una sola tirada.
Muchas gracias.
Saludos.
-
Esto no funciona??? Verifica nuevamente y avisame...
base.Execute "UPDATE posicionesmesas AS pm SET pm.x =
(SELECT pm2.x FROM posicionesmesas AS pm2 WHERE pm2.mesa = pm.mesa AND pm2.tipo = 'p') WHERE pm.tipo = 'a'"
Pero sino funciona, yo simplemente lo haría así...!
base.Execute "DELETE FROM posicionesmesas WHERE tipo = 'a'"
base.Execute "INSERT INTO posicionesmesas VALUES(MESA,X,Y,TIPO) SELECT MESA,X,Y,'A' AS TIPO FROM posicionesmesas WHERE tipo = 'P'"
Y ya... Me elimina las posiciones de las mesas, y luego le inserto las que tenía guardada...
Saludos ;D