FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Crear un hueco en blanco en el DBLookupcombobox
Hola a todos:
Trabajo con WXP y D5. he hecho una aplicación en la que se dan citas a los distintos clientes de una tabla (TablaClientes), estas citas se almacenan en una tabla (TablaCitas), para ello utilizo un DBLookupCombobox. El problema surge cuando quiero cancelar una cita, en el combobox no me aparece ningún hueco en blanco ni me permite borrar el contenido que hay ya asignado ¿como lo puedo solucionar?. Espero que se entienda lo que pregunto y gracias de antemano por vuestra atención. |
#2
|
||||
|
||||
Puedes utilizar el de las RxLibs (TRxDBLookupCombo), que tiene una propiedad DisplayEmpty que hace lo que tu quieres, o puedes cargar tu combo desde un query que sea un union con un query de un registro sin datos, o puedes hacer que cuando el foco está en el combo y presionan Escape se limpie.....
Espero que algo de todo esto te sirva. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Hola Gracias por la respuesta:
Lo que yo había pensado hacer es en el evento onKeypress comprobar si esa tecla era la tecla de supr (o delete), primer problema (no se como identificar esa tecla por código). Si era esa tecla borrar el registro. Segundo problema tampoco tengo muy claro como hacerlo. ¿Me podríais indicar un poco? Gracias por adelantado.
__________________
- ¿Y cuando dejaré de aprender maestro?. - El día que te mueras pequeño saltamontes. |
#4
|
||||
|
||||
Si haces Combo.FieldValue := ''; ???
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
He hecho la prueba con la letra 'b' (de borrar), con fieldvalue no me servía (me decía que fieldvalue era un undefined identificador), he tratado de hacer lo siguiente:
dblookupcita.datafield := ''; y aunque en un principio parece que funciona, resulta que realmente no lo ha borrado de la tabla, solamente me ha dejado ese control en blanco permanentemente.
__________________
- ¿Y cuando dejaré de aprender maestro?. - El día que te mueras pequeño saltamontes. |
#6
|
||||
|
||||
Una forma de hacerlo:
Código:
Combo.DataSource.DataSet.Edit; Combo.DataSource.DataSet.FieldByName(Combo.DataField).Clear; Combo.DataSource.DataSet.Post; Por otra parte, no sé desde que versión de Delphi viene pero en la 7 el dblookupcombobox tiene la propiedad NullValueKey a la que le asignas la tecla que deseas de manera que al oprimirla hace exactamente lo que deseas sin necesidad de más código. // Saludos |
#7
|
||||
|
||||
Disculpa pero lo he escrito de memoria, y a veces me equivoco !!
Lo que comenta Román no existe en Delphi 5, que es la versión en que yo trabajo. Prueba esto: Código:
procedure TForm1.DBLookupComboBox1KeyPress(Sender: TObject; var Key: Char); begin if Key = #27 Then DBLookupComboBox1.KeyValue := Null; end; Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#8
|
||||
|
||||
Cita:
// Saludos |
#9
|
||||
|
||||
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#10
|
|||
|
|||
Creo que me estoy volviendo loco:
Con respecto a la solución de delphi.com.arg me ha pasado lo mismo que a Roman. Con la de Roman me ha pasado lo siguiente: He puesto Código:
procedure TFormularioPrincipal.DBLookupCita04KeyPress(Sender: TObject; var Key: Char); begin if key = #27 then Begin modulodedatos.DataSourceClientes.Edit; modulodedatos.DataSourceClientes.FieldbyName(dblookupcita04).clear; modulodedatos.DataSourceClientes.Post; end; End;
__________________
- ¿Y cuando dejaré de aprender maestro?. - El día que te mueras pequeño saltamontes. |
#11
|
||||
|
||||
Es que estás confundiendo componentes. Un TDBLookupComboBox tiene una propiedad DataSource que a su vez tiene la propiedad DataSet que sí tiene el método FieldByName. Yo lo puse así de largo porque no sé que componentes estás usando además del combo. Si tienes un dataset (TTable por ejemplo) con la tabla de clientes entonces simplemente usa los métodos Edit, Post, FieldByName de ese dataset.
// Saludos |
#12
|
||||
|
||||
Hola
¿ Los TDbLookupComboBox de Delphi 5 no tienen la propiedad NullValueKey ?. Esa es la propiedad en Delphi 6 para indicar la combinación de teclado que asigna un Null a Value. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#13
|
||||
|
||||
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#14
|
||||
|
||||
Hola.
A mi también me gusta más la combo de las Rx, y es la que utilizo normalmente. Aunque citaba esa propiedad porqué en caso de existir también en Delphi 5 le hubiese solucionado el problema más rapidamente. Un saludo.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#15
|
||||
|
||||
Personalmente lo que yo haría ya en la práctica sería agregar un registro 'blanco' en la tabla citas con clave, digamos, cero. De esta manera aparecería el renglón en blanco en el combo o bien lo que nosostro quisiéramos poner en ese registro 'blanco', por ejemplo, 'NO TIENE CITA'.
En la tabla Clientes, los registros con el campo cita=0 serán aquellos que no tengan cita. Lo haría así porque prefiero en la medida de lo posible evitar el uso de valores null en las tablas. // Saludos |
#16
|
|||
|
|||
Hola:
Yo digamos tenía un problema similar. Lo que hice fue seguir algo similar a lo que te dice Roman, inmediatamente despues abrir la consulta del DBLookupComboBox, la poniamos en insercion y luego insertamos un registro en donde el keyvalue era un valor que no existia en la tabla. Ojala te pueda servir Salu2 foro
__________________
Ernesto R. |
#17
|
||||
|
||||
Me parece que lo que tu dices no es lo que propone Román, a mi entender Román quiere que siempre se cumpla la Entidad-Relación y evitar campos con valores nulos. Esto lo logra agregando en las entidades un registro con el texto "No Aplica" o "Blanco" como el dice.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#18
|
||||
|
||||
// Saludos
|
#19
|
|||
|
|||
Bueno, por fin:
Tenías razón Román, estaba liando los componentes, ahora funciona, estoy pensando seriamente hacer lo que decías insertar un registro en blanco en la tabla de clientes y cuando no quiera eliminar una cita se la asigno a ese registro. Otra pregunta, ¿porque son mejores los rxdblookupcombo que los dblookupcombo?, si es algo convincente aun estoy a tiempo de volver atrás y cambiarlo. Un saludo y muchas gracias por vuestra atención.
__________________
- ¿Y cuando dejaré de aprender maestro?. - El día que te mueras pequeño saltamontes. |
|
|
|