
[RESUELTO] Del indicador a las palabras. (TDbGrid con campos memo)
#1
Posted 30 June 2010 - 03:57 PM
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.
#2
Posted 30 June 2010 - 03:59 PM
Saludox !

#3
Posted 30 June 2010 - 04:00 PM
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...
#4
Posted 30 June 2010 - 04:01 PM
#5
Posted 30 June 2010 - 04:06 PM
Haré la prueba y te comento...
Saludox !

P.D. El enlace de Egostar es interesante

#6
Posted 30 June 2010 - 04:06 PM
Dale una leída a esta página
http://delphi.about....y/aa030105a.htm
Salud OS
De máxima utilidad. Gracias.
#7
Posted 30 June 2010 - 04:13 PM
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...
#8
Posted 30 June 2010 - 04:17 PM
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
#9
Posted 30 June 2010 - 04:19 PM
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.A ver, no entendi, barajeamela mas despacio, si quieres mostrar solo un texto en un grid porque no usar un TStringGrid.
Salud OS
#10
Posted 30 June 2010 - 04:22 PM
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.
A ver, no entendi, barajeamela mas despacio, si quieres mostrar solo un texto en un grid porque no usar un TStringGrid.
Salud OS
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 !

#11
Posted 30 June 2010 - 04:25 PM
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.
#12
Posted 30 June 2010 - 05:52 PM
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.
#13
Posted 30 June 2010 - 06:24 PM
Utilice el evento que está en la página que les mostré.
procedure TForm1.Table1NotesGetText(Sender: TField; var Text: string; DisplayText: Boolean); begin Text := Copy(Table1Notes.AsString, 1, 250); // le asigne 250, pero puede ser el tamaño que se considere adecuado end;
Y en el evento OnCellClick del DBGrid use lo siguiente:
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin DBGrid1.Hint := Table1Notes.AsString; end; //Por supuesto la propiedad ShowHint debe estar en true.
Y me hizo lo que se muestra en la imagen adjunta.
Salud OS
Attached Files
#14
Posted 30 June 2010 - 07:12 PM
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin form2.Memo1.Text := Table1Notes.AsString; form2.Caption := Table1Common_Name.AsString; form2.ShowModal; end;
Salud OS
Attached Files
#15
Posted 01 July 2010 - 08:07 AM
y para la descripcion ampliada use algo parecido al ultimo ejemplo de egostar, pero me gustó mas la primera opcion con el Hint

#16
Posted 01 July 2010 - 08:37 AM
Otra opción digamos más elaborada puede ser ésta
delphi
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin form2.Memo1.Text := Table1Notes.AsString; form2.Caption := Table1Common_Name.AsString; form2.ShowModal; end;
Salud OS
Es muy buena. Solamente que no se requiere la intervención del usuario; tal vez, repintando la celda o algo así...
#17
Posted 01 July 2010 - 08:41 AM
Otra opción digamos más elaborada puede ser ésta
delphi
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin form2.Memo1.Text := Table1Notes.AsString; form2.Caption := Table1Common_Name.AsString; form2.ShowModal; 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
#18
Posted 01 July 2010 - 09:02 AM
#19
Posted 01 July 2010 - 09:13 AM
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.

¿ 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
#20
Posted 01 July 2010 - 09:27 AM
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.¿ Eso quiere decir que si pasa de un registro a otro le muestre el TEXTO completo "siempre" ?
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.¿ 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.
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.¿ 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.
En éste y otros casos, querido amigo, "el que paga, manda", como en el póker.Es que a veces no entiendo mucho cuando se dicen "al cliente lo que pida" no está de más asesorarlos un poco.