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 16-07-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 16-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 16-07-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 16-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si haces Combo.FieldValue := ''; ???
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 16-07-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 16-07-2003
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
Una forma de hacerlo:

Código:
Combo.DataSource.DataSet.Edit;
Combo.DataSource.DataSet.FieldByName(Combo.DataField).Clear;
Combo.DataSource.DataSet.Post;
Para lo de interceptar la tecla usa el evento OnKeyDown.

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
Responder Con Cita
  #7  
Antiguo 16-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 16-07-2003
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:
Posteado originalmente por delphi.com.ar
Prueba esto:
Código:
procedure TForm1.DBLookupComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 Then
    DBLookupComboBox1.KeyValue := Null;
end;
Mmm.. Yo probé esto y aunque pone en blanco el Combo no borra el campo correspondiente en la tabla.

// Saludos
Responder Con Cita
  #9  
Antiguo 16-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por roman
Yo probé esto y aunque pone en blanco el Combo no borra el campo correspondiente en la tabla.
Para mi es una novedad, lo utilizo habitualmente pero lo que no hago es utilizar la propiedad DataSet del LookUp para que me actualice automáticamente los valores en la tabla, por consiguiente nunca lo he probado.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 16-07-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
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 me dice undeclared identifier FieldbyName.
__________________
- ¿Y cuando dejaré de aprender maestro?.

- El día que te mueras pequeño saltamontes.
Responder Con Cita
  #11  
Antiguo 16-07-2003
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
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
Responder Con Cita
  #12  
Antiguo 16-07-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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).
Responder Con Cita
  #13  
Antiguo 16-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por guillotmarc
¿ Los TDbLookupComboBox de Delphi 5 no tienen la propiedad NullValueKey ?.
¡¡Os lo aseguro!!.. Por eso he recomendado lo que he recomendado, de todas maneras prefiero la solución que proponen las RxLib, creo que queda mas claro para el usuario.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #14  
Antiguo 16-07-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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).
Responder Con Cita
  #15  
Antiguo 16-07-2003
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
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
Responder Con Cita
  #16  
Antiguo 16-07-2003
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 22
ramiretor Va por buen camino
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.
Responder Con Cita
  #17  
Antiguo 16-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #18  
Antiguo 17-07-2003
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
Thumbs up

// Saludos
Responder Con Cita
  #19  
Antiguo 17-07-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
Thumbs up

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.
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 06:00:47.


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