none
Ordenar empezando por RRS feed

  • Pregunta

  • Hola:

    Tengo la siguiente tabla, por ejemplo:

    ID |	DIA
    1 LUNES
    2 MARTES
    3 MIERCOLES
    4 JUEVES
    5 VIERNES
    6 SABADO
    7 DOMINGO

    Me gustaria saber ocmo puedo ordenarlo pero no como se hace normalmente (ORDER BY ID ASC) sino que por ejemplo me lo ordene de forma ascendente pero empezando por un determinado numero, por ejemplo el del martes. Por ejemplo si oy estamos a martes (dia de la semana 2 si empieza en lunes -> id=2) que me lo ordene de la siguiente manera:

    2,3,4,5,6,7,1

    Si fuese jueves: 4,5,6,7,1,2,3

    Se que hay mas formas de tratar los dias de la semana, pero lo quiero para mas utilidades tb.

    Graciass.

     

    martes, 20 de abril de 2010 15:37

Respuestas

  • En ese caso me voy por arreglos, insertando al arreglo los registros con el algoritmo planteado.

    Atte

    cj

    martes, 20 de abril de 2010 23:03
  • Microsoft Access tiene una relación entre tablas donde puedes indicar si se aplica o no la 'Integridad Referencial'. Además puedes indicar en la int.ref. si los registros se actualizan y/o eliminan en cascada; es decir, al actualizar un registro de la ppal, actualizar los registros relacionados; IDEM para eliminar, de manera automática.

    Pero puedes actualizar registros de tablas diferentes en una sola instrucción SQL, bien utilizando INNER JOIN o haciendo referencia a las tablas y campos comunes:

    atte CJ

     

     

    miércoles, 21 de abril de 2010 0:14

Todas las respuestas

  • Hola Alvaro.Se me ocurre una solución. Me hubiese ido por arreglos, pero creo que hay otra(s) vía(s).

    Habría que crear otra columna en la tabla, que llamaré aux.

    Una variable Hoy, tomará el día tomando como base que el primer día de la semana es el lunes.

    Dim hoy as integer,aux as integer

    hoy=weekday(date(),2)

    'crea un recordset para recorrer la tabla de dias(recuerda el nuevo campo aux)

    do until rst.eof

    if hoy>rst!id then

    aux=8-(hoy-id)

    elseif hoy<rst!id then

    aux=id-hoy+1

    else

    aux=1

    end if

    rst!aux=aux

    rst.update

    rst.movenext

    loop

    'cierras y destruyes objetos

    Luego puedes ordenar por el campo aux. Este proceso se podría disparar al abrir la aplicación; hay que tomar en cuenta si el equipo no se apaga.

    Cordialmente,

    cj

    pd: no probado

    martes, 20 de abril de 2010 22:25
  • La idea que propones es ordenar por codigo guardandolo en aux y despues llamar con ORDER BY de forma normal, no?

    Es una solución, aunque en mi caso no me sirve, ya que no puedo modificar las tablas.

    Se me ha ocurrido una idea, que como los datos que necesito ordenar no necesitan un recordset editable, podría ser de la siguiente manera:

    Guardar en un recordset rst1 lo siguiente:

    SELECT ID, DIA FROM TABLAXXX WHERE ID>1 ORDER BY ID ASC

    Despues en otro recordset rst2 :

    SELECT ID, DIA FROM TABLAXXX WHERE ID<2 ORDER BY ID ASC

    Y ya para rematar juntar ambos recordset, primero rst1 y despues rst2

    En WHERE ID > 1 en vez de 1 iria el dia de la semana o lo que corresponda, claro está.

     

    martes, 20 de abril de 2010 22:39
  • En ese caso me voy por arreglos, insertando al arreglo los registros con el algoritmo planteado.

    Atte

    cj

    martes, 20 de abril de 2010 23:03
  •  

    BienOtra pregunta, ya que estoy. Se pueden guardar tres tablas relacionadas de una vez con una sentencia o varias SQL, sin ir haciendolo por código?

    Lo pregunto porque tengo tres tablas relacionadas, en las cuales cuando quiero eliminar unos registros, en vez de eliminarlos pongo un campos Bool llamado Activo a false (los desactivo) Para simplificar, las tablas serían tal que asi:

     

    tabla1 tabla2 tabla3
    IdTabla1 Nombre Activo IdTabla2 IdTabla1 Campoxx Activo IdTabla3 IdTabla2 Campoyyy Activo
    1 AAA si 1 1 QWER si 1 1 345676 si
    2 BBB si 2 1 QWTY si 2 1 554555 si
    3 CCC si 3 1 EDFR si 3 2 5567878 si
    4 2 FR si 4 2 665544 si
    5 2 FT si 5 4 5677 si
    6 3 FR si 6 4 4456 si

     

    Bien, si quiero desactivar el registro 1 de la tabla 1 tendría que eliminar los correspondientes de las tablas 2 y tres. Podría hacerlo con varios SELECT para obtener los IdTabla3 que se correspondan con el campo IDTabla1=1 y poner con un bucle Activo =false primero en Tabla3, despues en Tabla2 y finalmente en Tabla1.

    Se podría hacer con un UPDATE y INNER JOIN?

    martes, 20 de abril de 2010 23:45
  • Microsoft Access tiene una relación entre tablas donde puedes indicar si se aplica o no la 'Integridad Referencial'. Además puedes indicar en la int.ref. si los registros se actualizan y/o eliminan en cascada; es decir, al actualizar un registro de la ppal, actualizar los registros relacionados; IDEM para eliminar, de manera automática.

    Pero puedes actualizar registros de tablas diferentes en una sola instrucción SQL, bien utilizando INNER JOIN o haciendo referencia a las tablas y campos comunes:

    atte CJ

     

     

    miércoles, 21 de abril de 2010 0:14