Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Trabajando con DBComboBox (https://www.clubdelphi.com/foros/showthread.php?t=13011)

JFdez 03-08-2004 20:01:51

Trabajando con DBComboBox
 
Holaaaa...
Tengo una duda quizás usted pueda ayudarme. Les explico ...
Trabajo con delphi6 y tengo una base de datos en Acces 2000 conectándome con ADO. Tengo asociado a un campo (tipo String y 1 carácter de tamaño) de la tabla un DBComboBox, supongamos que con los los items (1 - Técnico)
(2 - Estudiante)
(3 - Obrero)
pero lo que me propongo es lo siguiente ...
Quisiera que al desplazarme por los registro de esa tabla a través de un DBNavigator lo que me apareciera en el DBComboBox no fuese solo el
primer carácter (es decir el carácter guardado en la tabla) sino que el texto del items ...

por ejemplo :
si lo que tengo guardado es un 1, quisiera que me apareciera en el DBComboBox ( 1 - Técnico ) Es que me exigen obligatoriamente que ese campo contenga un solo caracter de tamaño.

En espera de su ayuda un amigo ...
Gracias..

roman 03-08-2004 20:26:24

Una opción podría ser usar el evento OnGetText del campo que te permite alterar el valor que se muestra sin alterar el campo original.

// Saludos

Tino 03-08-2004 21:13:16

Mejor un TDBLookupComboBox
 
Pues hacerlo, sin escribir código, de esta manera:
  1. Crea una tabla maestra con mínimo dos campos: código y descripción. En el 1er. campo iría 1, 2, 3, ... en el 2o. campo Técnico, Estudiante, Obrero,...
  2. Usa el compo TDBLookupComboBox en vez del TDBComboBox. Modifica sus propiedades: DataSource y DataField igual que con el TDBComboBox. ListSource a una nueva fuente de datos de la tabla maestra. KeyField el campo de referencia. ListField el campo "descripción" de la tabla maestra.
Es mejor que uses una tabla maestra que codificarlos en el programa porque si tuvieras que añadir una nueva categoria solo tendrías que añadir un nuevo registro, sin tener que volver a compilar.

Saludos.

roman 03-08-2004 21:18:38

Desde luego la opción de Tino es la ideal pero bueno, pensé que si no te dejaban modificar un campo chiquitito mucho menos te permitirían agregar toda una tabla.

:D

// Saludos

JFdez 05-08-2004 15:38:45

Acerca del OnGetText
 
SI me pudieras explicar mejor como hacerlo ... (OnGetText)
Ese procedimiento consta de dos variables una es DisplayText: Boolean, y la otra Text: String, pero no se como jugar con ellas ...

Muchas grasias Tino por tu respuesta pero Roman tiene razón

En espera de sus respuesta un servidor ..
grasias

StartKill 05-08-2004 16:47:07

Holas,

Este es un pequeño ejemplo, en lo personal trabajo con query's pero debe ser lo mismo.

Código Delphi [-]
procedure TForm1.IBQuery1FCOD_PROFGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  //  text:=ibquery1FCOD_PROF.AsString+'-'+ibquery1FDES_PROF.AsString;
  text:=sender.asString+'-'+ibquery1FDES_PROF.AsString;
end;

Espero te sirva,

your Friend :cool:

StartKill
Lima-Perú

JFdez 05-08-2004 17:39:05

Ahora si que se puso feo esto
 
Lo siento amigo pero a desir verdad ahora entiendo menos por favor AYUDENMEEEEEEEEE ... :o

Espero por su respuesta ....


grasias

jachguate 05-08-2004 18:39:22

Hola.

No hace falta gritar tan alto.

Basta presionar F1 dentro del IDE. :mad:

Cita:

Empezado por delphi help
Occurs whenever the DisplayText or Text properties of the field are referenced.

type TFieldGetTextEvent = procedure(Sender: TField; var Text: string; DisplayText: Boolean) of object;
property OnGetText: TFieldGetTextEvent;

Description

Write an OnGetText handler to perform custom processing for the DisplayText and Text properties. Use OnGetText to format the Value of the field differently when it must be edited from the format used when simply displaying the value, or use OnGetText to display something other than the field’s value when it is displayed.

The Sender parameter is the field component. The Text parameter receives the formatted text that is used by the DisplayText or Text property. The DisplayText parameter indicates whether the text will be used for display purposes only, or whether the string will be used for editing purposes.

If there is no OnGetText handler, the value of the DisplayText and Text properties is simply the value of the AsString property.

Hasta luego.

roman 11-08-2004 19:11:54

JFdez:

Respecto de tu mensaje privado acerca del uso del evento OnGetText te comento que prefiero tratar los temas relacionados con los foros en los mismos foros a fin de que todos se beneficien de las preguntas y respuestas.

He releido el presente hilo y creo que la forma más elegante de resolver el problema es como atinadamente indicaba Tino :) .

Sin embargo, al parecer no puedes agregar tablas. Pero puedes entonces usar una tabla en memoria con un ClientDataSet.

El uso es muy sencillo. Durante el diseño abres el editor de definiciones de campos (propiedad FieldDefs del ClientDataSet) y añades dos, una para el campo código y otra para el campo descripción). Una vez hecho esto abres el menú contextual de la componente ClientDataSet y escoges la opción "Create DataSet".

Ahora simplemente tienes que llenar los registros, por ejemplo en el evento OnCreate del formulario o DataModule donde coloques la componente. Agregas registros igual que con otros DataSets, por ejemplo:

Código Delphi [-]
ClientDataSet.Append;
ClientDataSet['codigo'] := 1;
ClientDataSet['descripcion'] := 'Técnico';

ClientDataSet.Append;
ClientDataSet['codigo'] := 2;
ClientDataSet['descripcion'] := 'Estudiante';

ClientDataSet.Append;
ClientDataSet['codigo'] := 2;
ClientDataSet['descripcion'] := 'Obrero';

Ya con esto, utilizas la técnica que te indicó Tino.

Creo que esta es una mejor opción que la de manipular el evento OnGetText ya que tu sistema estará diseñado como si las tablas estuvieran bien diseñadas (no lo están porque justamente falta la tabla con las descripciones) y estará preparado para el momento en que se te permita agregar físicamente la tabla requerida.

// Saludos


La franja horaria es GMT +2. Ahora son las 22:13:16.

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