Ir al contenido


Foto

[RESUELTO] Del indicador a las palabras. (TDbGrid con campos memo)


  • Por favor identifícate para responder
32 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 30 junio 2010 - 03:57

Buenas tardes, compañerit@s del foro:

Como siempre, presentando un problemilla que me aqueja. Resulta que tengo los datos de una tabla de SQLServer, y uno de ésos campos es un campo Text. Deseo mostrarlos en una rejilla (TDbGrid) pero sin el molesto y suscinto indicador que todos conocemos ("(memo)" en la celda correspondiente), sino un extracto de algunas palabras o una cantidad finita de caracteres (digamos, unos 50) para que el usuario tenga una idea del contenido del campo.

¿Alguna idea que me pudiesen aportar? Agradecido de antemano.
  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 junio 2010 - 03:59

Lo quieres hacer dentro de la misma consulta ?... es decir, que el campo ya venga "trunco" por decirlo de alguna manera ?

Saludox ! :)
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 30 junio 2010 - 04:00

Lo quieres hacer dentro de la misma consulta ?... es decir, que el campo ya venga "trunco" por decirlo de alguna manera ?

Saludox ! :)


No..., de hecho, la idea sería hacer todo el movimiento DENTRO del TDbGrid, ya que la consulta es bastante compleja y no desearía complejizarla más...
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 30 junio 2010 - 04:01

Dale una leída a esta página

http://delphi.about....y/aa030105a.htm

Salud OS
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 junio 2010 - 04:06

Pues no se si ando perdida pero creo que directamente en el campo en el DataSet puedes decirle cómo quieres que se muestre ese campo (una máscara, o su longitud) nunca lo he  probado con un campo Memo pero supongo que puede hacerse algo similar....

Haré la prueba y te comento...

Saludox ! :)

P.D. El enlace de Egostar es interesante  ^o|
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 30 junio 2010 - 04:06

Dale una leída a esta página

http://delphi.about....y/aa030105a.htm

Salud OS


De máxima utilidad. Gracias.
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 30 junio 2010 - 04:13

Pequeño detalle, la página que me da Egostar requiere necesariamente que conecte la tabla directamente dentro de la forma...

Yo pensabe en algo así que dentro de un evento del DbGrid poder "recortar" o mostrar un campo Text de SQLServer, no utilizar una sentencia SQL o una conexión extra a la forma...
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 30 junio 2010 - 04:17

Pequeño detalle, la página que me da Egostar requiere necesariamente que conecte la tabla directamente dentro de la forma...

Yo pensabe en algo así que dentro de un evento del DbGrid poder "recortar" o mostrar un campo Text de SQLServer, no utilizar una sentencia SQL o una conexión extra a la forma...


A ver, no entendi, barajeamela mas despacio, si quieres mostrar solo un texto en un grid porque no usar un TStringGrid.

Salud OS
  • 0

#9 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 30 junio 2010 - 04:19

A ver, no entendi, barajeamela mas despacio, si quieres mostrar solo un texto en un grid porque no usar un TStringGrid.

Salud OS

Por que sólo UNO o DOS de los datos resultantes de la consulta a la tabla son de tipo Text. Vienen alrededor de 15 campos, casi todos son Int y VarChar.
  • 0

#10 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 junio 2010 - 04:22


A ver, no entendi, barajeamela mas despacio, si quieres mostrar solo un texto en un grid porque no usar un TStringGrid.

Salud OS

Por que sólo UNO o DOS de los datos resultantes de la consulta a la tabla son de tipo Text. Vienen alrededor de 15 campos, casi todos son Int y VarChar.


Y no podrías utilizar campos calculados para esos uno o dos campos ?... para que puedas recibir y recortar el texto antes de mostrarlo en el TDBGrid ?

Saludox ! :)
  • 0

#11 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 30 junio 2010 - 04:25

Y no podrías utilizar campos calculados para esos uno o dos campos ?... para que puedas recibir y recortar el texto antes de mostrarlo en el TDBGrid ?

Saludox ! :)


No puedo usarlos, por que la consulta de SQL es bastante compleja. Es casi un cubo de decisiones. Meterle una funcionalidad más posiblemente la haría lenta e imprecisa.
  • 0

#12 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 30 junio 2010 - 05:52

Saludos.

No he tenido la oportunidad de realizar tal tarea, pero puedes echar un vistazo al Grid de los JEDI, a ver si te da esa funcionalidad, lo bueno de las JEDI es que son gratuitas.
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 30 junio 2010 - 06:24

Yo sigo sin entender bien lo que quiere nuestro amigo Felipe.mx, pero hice esto a ver si se acerca a lo que desea.

Utilice el evento que está en la página que les mostré.



delphi
  1. procedure TForm1.Table1NotesGetText(Sender: TField; var Text: string;
  2.   DisplayText: Boolean);
  3. begin
  4.   Text := Copy(Table1Notes.AsString, 1, 250); // le asigne 250, pero puede ser el tamaño que se considere adecuado
  5. end;



Y en el evento OnCellClick del DBGrid use lo siguiente:



delphi
  1. procedure TForm1.DBGrid1CellClick(Column: TColumn);
  2. begin
  3.   DBGrid1.Hint := Table1Notes.AsString;
  4. end;
  5.  
  6. //Por supuesto la propiedad ShowHint debe estar en true.



Y me hizo lo que se muestra en la imagen adjunta.

Salud OS

Archivos adjuntos


  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 30 junio 2010 - 07:12

Otra opción digamos más elaborada puede ser ésta



delphi
  1. procedure TForm1.DBGrid1CellClick(Column: TColumn);
  2. begin
  3.   form2.Memo1.Text := Table1Notes.AsString;
  4.   form2.Caption := Table1Common_Name.AsString;
  5.   form2.ShowModal;
  6. end;



Salud OS

Archivos adjuntos


  • 0

#15 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 758 mensajes
  • LocationPinar del Río, Cuba

Escrito 01 julio 2010 - 08:07

Que curioso, yo tambien tuve ese mismo problema, pero opté por no declarar el campo como Memo, para que el DBGris no me mostrara [Memo]
y para la descripcion ampliada use algo parecido al ultimo ejemplo de egostar, pero me gustó mas la primera opcion con el Hint  (y)
  • 0

#16 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 01 julio 2010 - 08:37

Otra opción digamos más elaborada puede ser ésta



delphi
  1. procedure TForm1.DBGrid1CellClick(Column: TColumn);
  2. begin
  3.   form2.Memo1.Text := Table1Notes.AsString;
  4.   form2.Caption := Table1Common_Name.AsString;
  5.   form2.ShowModal;
  6. end;



Salud OS


Es muy buena. Solamente que no se requiere la intervención del usuario; tal vez, repintando la celda o algo así...
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 01 julio 2010 - 08:41


Otra opción digamos más elaborada puede ser ésta



delphi
  1. procedure TForm1.DBGrid1CellClick(Column: TColumn);
  2. begin
  3.   form2.Memo1.Text := Table1Notes.AsString;
  4.   form2.Caption := Table1Common_Name.AsString;
  5.   form2.ShowModal;
  6. end;



Salud OS


Es muy buena. Solamente que no se requiere la intervención del usuario; tal vez, repintando la celda o algo así...


Perdón, ¿a que te refieres con "no se requiere de la intervención del usuario"?.

Salud OS
  • 0

#18 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 01 julio 2010 - 09:02

Simple, en ésto que estás presentando se requiere que el usuario haga click en la celda. Pero lo más que hará el usuario (o lo que se espera de él) es que solamente pase de uno a otro registro, sin hacer click en ninguna celda.
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 01 julio 2010 - 09:13

Simple, en ésto que estás presentando se requiere que el usuario haga click en la celda. Pero lo más que hará el usuario (o lo que se espera de él) es que solamente pase de uno a otro registro, sin hacer click en ninguna celda.


:undecided:

¿ Eso quiere decir que si pasa de un registro a otro le muestre el TEXTO completo "siempre" ?

¿ Y si no cambia de registro debe seguir mostrandose hasta que cambie de registro o por cuanto tiempo ? considerando que no todos los usuarios leen a la misma velocidad.

¿ Como obtener el TEXTO de un registro si es un usuario mas inteligente y en lugar de pasar de registro en registro, utiliza el ScrollBar ? digo porque no quieres utilizar otra sentencia SQL para obtener el TEXTO completo.


Es que a veces no entiendo mucho cuando se dicen "al cliente lo que pida" no está de más asesorarlos un poco.

Salud OS
  • 0

#20 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 01 julio 2010 - 09:27

¿ Eso quiere decir que si pasa de un registro a otro le muestre el TEXTO completo "siempre" ?

De ése registro (o de los que siguen), siempre se mostrará el texto, no completo sino más bien un extracto de 'n' caracteres que le den una idea de qué contiene el campo.

¿ Y si no cambia de registro debe seguir  mostrandose hasta que cambie de registro o por cuanto tiempo ?  considerando que no todos los usuarios leen a la misma velocidad.

Mismo caso complementario. Imaginemos que el usuario tiene visible la columna que contiene 4 registros. De ésos cuatro registros, se muestran 'n' caracteres DE CADA UNO DE LOS MEMOS, si cambia al registro #5, se oculta el primero y se muestra el contenido de ése memo.

¿  Como obtener el TEXTO de un registro si es un usuario mas inteligente y  en lugar de pasar de registro en registro, utiliza el ScrollBar ? digo  porque no quieres utilizar otra sentencia SQL para obtener el TEXTO  completo.

Por eso hablaba yo de un evento de la celda o del TDbGrid. Y como le mencionaba a Fenareth, no es posible hacer más complicada la sentencia SQL que recupera los datos, puesto que le lleva cierta cantidad de tiempo presentarlos y no queremos que tarde más de lo que debe.

Es que a veces no entiendo mucho cuando se  dicen "al cliente lo que pida" no está de más asesorarlos un poco.

En éste y otros casos, querido amigo, "el que paga, manda", como en el póker.
  • 0