Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2004
dago_Ariza dago_Ariza is offline
Miembro
 
Registrado: may 2004
Ubicación: Cartagena-Colombia
Posts: 27
Poder: 0
dago_Ariza Va por buen camino
Como utilizar TSortOrder??

Este es mi caso, como ordeno desc o asc/

procedure TTIPO_SERVICIO_FRM.DefineOrden(str :string);
var i : integer;
M : TSortMarker;
begin
i := 0;
while str <> Campos[i] do inc(i);
DM1.TIPOS_SERVICIOS.Close;
If (str = Campos[i]) and (str <> 'ACTIVO') Then
begin
if Orden[i] = smNone then
begin
M := smDown;
DM1.TIPOS_SERVICIOS.IndexName := Campos[i];
end;
if Orden[i] = smNone then
begin
M := smUp;
DM1.TIPOS_SERVICIOS.IndexName := Campos[i];
end;
end;
orden[i] := M;
DM1.TIPOS_SERVICIOS.Open;
end;

Código Delphi [-]
procedure TTIPO_SERVICIO_FRM.DefineOrden(str :string);
var i : integer;
    M : TSortMarker;
begin
    i := 0;
    while str <> Campos[i] do inc(i);
      DM1.TIPOS_SERVICIOS.Close;
      If (str = Campos[i]) and (str <> 'ACTIVO') Then
         begin
           if Orden[i] = smNone then
              begin
                M := smDown;
                DM1.TIPOS_SERVICIOS.IndexName := Campos[i];
              end;
           if Orden[i] = smNone then
              begin
                M := smUp;
                DM1.TIPOS_SERVICIOS.IndexName := Campos[i];
              end;
         end;
     orden[i] := M;
     DM1.TIPOS_SERVICIOS.Open;
end;

Última edición por roman fecha: 26-05-2004 a las 04:47:14.
Responder Con Cita
  #2  
Antiguo 26-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
dago_Ariza

Me tomé la libertad de editar tu mensaje para mostrarte la diferencia al usar la etiqueta [ delphi ]. Como verás es mucho más claro y permite que los demás foristas puedan leerlo cómodamente. Al principio de cada foro hay un aviso donde se explica la forma de usar esta etiqueta.

// Saludos
Responder Con Cita
  #3  
Antiguo 26-05-2004
dago_Ariza dago_Ariza is offline
Miembro
 
Registrado: may 2004
Ubicación: Cartagena-Colombia
Posts: 27
Poder: 0
dago_Ariza Va por buen camino
Unhappy

Gracias Roman, por la observacion.
Puedes ayudarme??
Responder Con Cita
  #4  
Antiguo 26-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dago_Ariza
Puedes ayudarme??
El problema que veo es que estás tratando de adaptar el ejemplo de cadetill al pie de la letra en lugar de detenerte a estudiar los conceptos que él tan atinadamente explica.

Yo distinguiría tres conceptos básicos:
  1. Cómo ordenar los datos
  2. Cuándo ordenar
  3. Cómo dibujar la flechita

Cómo ordenar los datos

Ésto debe quedar claro independientemente de cómo muestras los datos o de si usa flechitas o no. Cómo lo hagas dependerá de cómo obtengas los datos de la base y eso lo tienes que determinar tú. Puede ser que uses una componente TTable e índices definidos en la tabla o un Query usando la cláusula ORDER, por dar dos ejemplos.

En un caso simplificado, para ordenar los datos necesitas cómo mínimo dos datos: el nombre del campo por el cuál quieres ordenar y si la ordenación es ascendente o descendente. En este contexto comiezas entonces definiendo un método:

Código Delphi [-]
procedure TForm1.Ordenar(Campo: String; Ascendente: Boolean);
begin
  { Aquí el código para ordenar }
end;

Por ejemplo, si usas un Query, el método podría quedar así:

Código Delphi [-]
procedure TForm1.Ordenar(Campo: String; Ascendente: Boolean);
begin
  Query.SQL.Text := 'select * from tabla order by ' + Campo;
  if not Ascendente then
    Query.SQL.Text := Query.SQL.Text + ' desc';

  Query.Open;
end;

Pero insisto, éste es sólo un ejemplo y tú mejor que nadie puede saber cuál será la implementación final.


Cuándo ordenar

Una vez que tengas bien claro cómo ordenar los datos te darás cuenta que la ordenación la puedes ejecutar de muchas maneras. Puedes hacerlo, siguiendo el ejemplo de cadetill, seleccionando el campo desde un combo o conforme el usuario presione un título de la rejilla.

Lo importante aquí es que al tener ya aislado del resto el método de ordenación, éste se puede ejecutar de cualquier forma que se te ocurra.

En tu caso específico, una de estas formas es mediante los títulos de la rejilla. Por tanto necesitas poder actuar cuando el usuario presione uno. Ésta es la labor del evento OnTitleBtnClick.
La estrategia que sigas aquí también depende de lo que desees hacer exactamente. Una forma usual de proceder es:
  • Se ordena sólo por una columna a la vez
  • Si se presiona la columna por la que actualmente están ordenados los datos el orden se invierte (ascendente<-->descendente).
  • En caso contrario se ordena según la nueva columna manteniendo la dirección de ordenamiento que ya se tiene.

Para esta estrategia requieres entonces mantener en todo momento la información de la columna o campo actual de ordenamiento así como la dirección, por ejemplo, con sendas variables privadas:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    Campo: String;
    Ascendente: Boolean;
  end;

de manera que la implementación del evento podría verse similar a:

Código Delphi [-]
procedure TForm1.RxDBGrid1TitleBtnClick(...);
begin
  if SameText(Field.FieldName, Campo)
    then Ascendente := not Ascendente // mismo campo, invertir orden
    else Campo := Field.FieldName; // campo distinto, guardar valor

  Ordenar(Campo, Ascendente);
end;


Cómo dibujar la flechita

Al llegar a este punto, una vez entendidos los dos anteriores a plenitud, te darás cuenta de que se trata de la parte más sencilla.

El punto importante aquí es cómo hace el RXDBGrid para dibujar la mentada flechita. El evento OnGetBtnParams se dispara cada vez que la componente necesite dibujar un título y mediante el parámetro SortMarker le indicamos qué flechita queremos que dibuje. Observa que no podemos saber en qué momento preciso se va a generar el evento y por ello el evento también pasa el campo Field que corresponde. Tendrás entonces que determinar si corresponde al campo actual de ordenamiento y en tal caso usar el valor de la variable Ascendente para saber la dirección de ordenamiento, por ejemplo:

Código Delphi [-]
procedure TForm1.RxDBGrid1GetBtnParams(...);
begin
  if SameText(Field.FieldName, Campo) then
    SortMarker := TSortMarker(Byte(Ascendente) + 1);
end;

-------------------

Ésta es sólo otra explicación. Tu labor ahora es estudiar los conceptos involucrados, releer con detenimiento la explicación de cadetill- mucho más completa que ésta y, entonces sí, aplicar lo aprendido a tu caso particular.

// Saludos
Responder Con Cita
  #5  
Antiguo 26-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
uffff!!!!!!

Creo que mejor si comenzaré a ir a las clases de adivinación... me has sorprendido. Vi una vez el hilo, y como no tenia la menor idea de que estabamos hablando, y como no andaba de humor para enviar a dago_Ariza a leer el hilo de la calidad de las preguntas, pues simplemente lo he dejado pasar, creyendo que nadie mas sabria de que se habla....

Es que ya decia yo que TSortOrder y TSortMaker no los habia visto en mi vida...
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 26-05-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Y despues de lo que ha dicho Román, ya puestos.... por qué no dar la posibilidad de hacer la ordenacion multicolumna... es decir, que pueda ordenar por fecha, dentro de esa ordenación, ordenar por totales, etc. y que el usuario lo elija

Si lo piensas, no es tan dificil, si tienes dudas, aqui andaremos. Yo lo tengo implementado así y la verdad, es muy muy util.

Saludos.
Responder Con Cita
  #7  
Antiguo 26-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por Lepe
Y despues de lo que ha dicho Román, ya puestos.... por qué no dar la posibilidad de hacer la ordenacion multicolumna...
Bueno, de hecho es como está implementado (o ideado o preparado) en la demo de mi web

Pero para empezar a asimilar los conceptos, la explicación de Román es.... sencillamente genial
Responder Con Cita
  #8  
Antiguo 26-05-2004
dago_Ariza dago_Ariza is offline
Miembro
 
Registrado: may 2004
Ubicación: Cartagena-Colombia
Posts: 27
Poder: 0
dago_Ariza Va por buen camino
Unhappy

Roman, Gracias por la ayuda y perdona tanta "Brutalidad e Ignorancia"....pero

He entendido lo que me quieres decir y entiendo mu mensaje, pero con un TQUERY tu ordenas DESC o ASC colocandole la palabra DESC al final de la sentencia SQL, pero yo que utilizo TTable que parametro le indico a mi codigo para que IndexName sepa si es Ascendente o Descendente:

Código Delphi [-]
TABLE1.IndexName := myCampoName;
end;

Gracias.
Responder Con Cita
  #9  
Antiguo 26-05-2004
dago_Ariza dago_Ariza is offline
Miembro
 
Registrado: may 2004
Ubicación: Cartagena-Colombia
Posts: 27
Poder: 0
dago_Ariza Va por buen camino
Angry Como ordenar RxDBGrid (Ttable) Asc o Descendentemente!

Por favor necesito ayuda con esto..

Solo necesito saber como ordeno Ascendente o Descendentemente un RxDBGrid que tiene un Ttable como origen de Datos.

Garcias
Responder Con Cita
  #10  
Antiguo 26-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Si usas TTables ten en cuenta lo siguiente:

1.- Los índices sólo tienen un "sentido", ascendente o descendente, por lo que tendías que crear un índice ascendente y otro descendente

2.- Si quieres poder ordenar por todas las columnas del grid, tendrás que repetir el paso 1 por cada campo que visualices al grid

3.- Si quieres poder ordenar por más de una columna, casi se te hará imposible implementar índices (a no ser que sean muuuy pocos campos los visualizados).
Responder Con Cita
  #11  
Antiguo 26-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por dago_Ariza
Como ordenar RxDBGrid (Ttable) Asc o Descendentemente!

Por favor necesito ayuda con esto..

Solo necesito saber como ordeno Ascendente o Descendentemente un RxDBGrid que tiene un Ttable como origen de Datos.

Garcias
Pero xico!!! tranquilizate hombre!!!! No ha pasado ni media hora!!!

Mira, sólo decirte que esto no es un servicio técnico y que la gente que participa en este foro lo hace de forma gratuita y altruista. La próxima vez tómatelo con un poquito más de calma, no me ha parecido correcta tu forma de expresarme (y hablo particularmente)
Responder Con Cita
  #12  
Antiguo 26-05-2004
dago_Ariza dago_Ariza is offline
Miembro
 
Registrado: may 2004
Ubicación: Cartagena-Colombia
Posts: 27
Poder: 0
dago_Ariza Va por buen camino
Hermanito...que pena contigo.
Tranquilo...no vuelvo a molestar...LA TOLERANCIA ES MUY IMPORTANTE EN MI PAIS.
A TODOS GRACIAS++
Responder Con Cita
  #13  
Antiguo 26-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por dago_Ariza
Hermanito...que pena contigo.
Tranquilo...no vuelvo a molestar...LA TOLERANCIA ES MUY IMPORTANTE EN MI PAIS.
A TODOS GRACIAS++
y en mi país la paciencia es una virtud

Por mi haz lo que quieras, no seré yo el que te retenga (ni el que te vuelva a responder, claro)
Responder Con Cita
  #14  
Antiguo 26-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dago_Ariza
perdona tanta "Brutalidad e Ignorancia"
Disculpa pero creo que no y te voy a explicar por qué.

Si te fijas, entre tu mensaje anterior a mi explicación y ésta hay aproximadamente tres horas y media de diferencia. Yo ví tu mensaje casi inmediatamente después de que lo publicaste y desde entoces me puse a pensar en él.

Para comenzar tuve que hacer memoria para saber a qué te estabas refiriendo. Como puedes observar del mensaje de jachguate la única razón por la que supe de qué hablabas es que casualmente había leído tus otros mensajes en los que ya cadetill te había contestado.

Como soy consciente de que a veces los conceptos se dificultan a quienes están empezando consideré adecuado dar una explicación alternativa para que tuvieras distintos puntos de vista y pudieras compararlos para un mejor entendimiento.

Así pues, durante las mencionadas tres horas y media siguientes me dediqué a lo siguiente:

1. Ir a la página de cadetill para bajar su excelente archivo pdf donde explica el funcionamiento de la componente.

2. Darle una leída porque, ¿sabes?, yo jamás había usado las flechitas en el RXDBGrid.

3. Meditar un poco acerca de los conceptos que él expone tanto en el pdf como en los comentarios que te hizo en el otro hilo para tener en claro el funcionamiento.

4. Hacerme de mi propia idea y armar una explicación alternativa.

5. Probar todo lo que estaba pensando en Delphi para asegurarme que funcionaba correctamente.

6. Publicar el mensaje.

y ¿qué es lo que veo hoy apenas llego a mi lugar de trabajo?

Que el destinatario de tanto esfuerzo (no sólo el mío sino desde luego también el de cadetill) no está dispuesto a poner de su parte. Dices que entiendes lo que te quiero decir pero creo que no es así. El hecho de que vuelvas a preguntar cómo ordenar, en el mismo hilo, es un indicador de que no has entendido la separación de conceptos y, desde luego, que no te has puesto a estudiar lo más mínimo de componentes de bases de datos ya que la realidad es que independientemente de las flechitas, tú no sabes cómo ordenar los registros de una tabla. Esto por sí sólo no es un pecado, todos empezamos alguna vez, pero el hecho de que quieras abarcar todo en un sólo hilo da a entender que tu intención es realmente la de obtener ya todo hecho. Esto puede ser válido pero entonces te remito a págnas como Torry donde muy probablemente encontrarás componentes que ya hagan todo por tí sin necesidad de ponerte a programar.

Quizá te suene esto muy fuerte, pero cuando gente como cadetill y muchos otros son capaces de dar explicaciones tan excelsas como la de su artículo es porque hay detrás muchas horas de trabajo, muchos deseos de ayudar, mucha paciencia y, sí, mucha tolerancia, de manera que es natural que nos decepcione tanta ingratitud. Porque la gratitud no sólo consiste en decir "gracias" sino en demostrar al que ayuda que su esfuerzo valió la pena.

Esto no ha sido así.

Última edición por roman fecha: 26-05-2004 a las 17:15:27.
Responder Con Cita
  #15  
Antiguo 26-05-2004
dago_Ariza dago_Ariza is offline
Miembro
 
Registrado: may 2004
Ubicación: Cartagena-Colombia
Posts: 27
Poder: 0
dago_Ariza Va por buen camino
Roman, Eres muy acertado y Entiendo lo que me quieres decir, y tienes razon..aveces me acelero mucho y quiero abarcar mucho pero aprieto poco, es mi error y lo acepto.

Vale tu observacion y a ti no te puedo discutir...haz sido muy acertado en lo que me acabas de decir, tratare de evitar eso y estudiar un poco mas antes de mandarme a escribir.....eres un buen modulador.

A mi viejo amigo de palabras "ironicas" CADETILL, tomo la iniciativa...tal vez yo fui un poco altanero, al responderte...entiendo que no vuelvas a responder ninguna de mis preguntas...pero no estoy en este foro para ganar enemigos, solo para hacerlos y aprender...sin recentimientos!...

Dag++
Responder Con Cita
  #16  
Antiguo 26-05-2004
santana santana is offline
No confirmado
 
Registrado: nov 2003
Posts: 1.030
Poder: 0
santana cantidad desconocida en este momento
Cita:
Empezado por dago_Ariza
...pero no estoy en este foro para ganar enemigos, solo para hacerlos y aprender...sin recentimientos!...

Dag++
Ves, Cadetill? No te preocupes que Dag no te guarda rencor

Que nadie saque mi broma de contexto, vale?
Venga, buen rollito !!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:43:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi