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)
-   -   Saber que componente apunta a cada campo de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=73015)

jzginez 25-03-2011 17:56:42

Saber que componente apunta a cada campo de una tabla
 
Hola amigos estoy ampliando la funcionalidad de una aplicación y entre las cosas que le estoy agregando quiero que para los campos que estan marcados como requeridos el componente asignado (dbedit, dbcheckbox, dbmemo, etc) aparescan en otro color, me podrian decir si hay una forma para desde ni componente tabla (pFIBDataSet ya que uso las FIBPlus) y el DataSource puedo llegar al DBEdit, DBCheckBox o al componente correspondiente segun sea el caso

Gracias

Casimiro Notevi 25-03-2011 18:01:39

¿Cómo indicas que es un campo requerido?

gatosoft 25-03-2011 19:44:51

Amigo jzginez,

Dentro del dataset, cuando utilizas campos persitentes, estos traen las proiedades de los campos definidos físicamente en la BD... Tamaño, tipo y por supuesto si es requerido o no... algo como:

Código Delphi [-]
Table1NOMBRE_CAMPO: TStringField

if Table1NOMBRE_CAMPO.Required = true then

Espero que te sirva

roman 25-03-2011 20:50:29

Cita:

Empezado por jzginez (Mensaje 394666)
me podrian decir si hay una forma para desde ni componente tabla (pFIBDataSet ya que uso las FIBPlus) y el DataSource puedo llegar al DBEdit, DBCheckBox o al componente correspondiente segun sea el caso

Creo que estás enfocando el problema alrevés. Porque recuerda que a un mismo campo puede estar conectado más de un control. Así que, en realidad, tendrías que partir de cada control y examinar la propiedad Required del campo asociado:

Código Delphi [-]
if DBControl.Field.Required then
  ...

// Saludos

ecfisa 25-03-2011 21:08:16

Hola.

Opino igual a lo dicho por román.

Podrías hacer algo como:
Código Delphi [-]
procedure TForm1.RequeridosEnRojo;
var
  i: Integer;
begin
  for i:= 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TDBEdit)and TDBEdit(Components[i]).Field.Required then
        TDBEdit(Components[i]).Font.Color:= clRed;
    if (Components[i] is TDBMemo)and  TDBMemo(Components[i]).Field.Required then
        TDBMemo(Components[i]).Font.Color:= clRed;
    ...
    ...
  end;
end;

Estuve intentando algo con RTTI, pero no salió tan rápido como esperaba :( ,luego probaré nuevamente...

Un saludo.

jzginez 28-03-2011 18:25:17

Hola a todos gracias por su respuesta

Cita:

Casimiro
¿Cómo indicas que es un campo requerido?
presisamente como comenta gatosoft es como llevo el control de los campos requeridos, adicionalmente como quiero que el usuario pueda decir que otros campos son obligatorios (p/e: ahorita en México por lo de la faturación electronica el campo de correo electronico en la tabla de clientes) cree una tabla donde guardo el nombre del campo requerido y la tabla a la que pertenece y así antes de abir la tabla de clientes le cambio la propiedad al campo correspondiente

Cita:

roman y ecfisa
Creo que estás enfocando el problema alrevés. Porque recuerda que a un mismo campo puede estar conectado más de un control. Así que, en realidad, tendrías que partir de cada control y examinar la propiedad Required del campo asociado
Presisamente es lo que intentaba hacerlo al reves ya que según yo seria mas facil sabiendo que campo es requerido de alguna forma me listara todos los componentes que esten ligaos a este campo sin importar el tipo

Gracias por el código ecfisa el que yo estaba metiendo lo tenia mas complicado que el que tu tienes, usare el tuyo gracias


La franja horaria es GMT +2. Ahora son las 11:01:37.

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