Ver Mensaje Individual
  #16  
Antiguo 26-06-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Reputación: 24
fjcg02 Va camino a la fama
Hola Jose Luis,
te comento por encima cómo me gustaría hacer el tema, ya que como te he comentado, no lo tengo casi ni empezado.

En este caso, tengo el procedimiento almacenado, y dos tablas llamadas Z_Tablas y Z_Definicion_Campos. Lo puedes ver en la imagen del ibexpert que te incluyo.

En la tabla Z_Tablas tengo simplemente la lista de tablas y vistas.
En la tabla Z_Definicion _campos, los campos de cada tabla ovista, y todas sus propiedades.
IDCAMPO INTEGER NOT NULL,
IDTABLA INTEGER,
TABLA VARCHAR(20) NOT NULL,
CAMPO VARCHAR(20) NOT NULL,
TIPOCAMPO Tipos definidos por mi
LABEL Etiqueta del campo tal y como la quiero visualizar
MASCARA Mascara para editar
MASCARADISPLAY Mascara para displayar
TAMANIO tamaño para la visualizacion
NOMBRE_SI_FK Que nombre tiene si es FK ( ejemplo, si el campo es ID_ARTICULO, y es fk, pondré ARTICULO
LABEL_SI_FK igual
QUERY_SI_FK Query de dondeviene el dato
CAMPOSACTUALIZA qué campos actualiza si el usuario lo edita. Ejemplo articulo, cambia el idartivulo y el precio
NEWVALUE valor del campo cuando se da de alta un registro nuevo ( ejemplo 0 para los enteros o flotantes) o funcion que devuelve un valor calculado
ONVALIDATE funcion que valida el dato si es necesario
LISTA si es una lista de valores, que lita es para recuperarla de una tabla donde las tengo definidas.

En este caso el procedimiento almacenado lo utilizo para dar de alta automáticamente los campos cuando soy de alta una tabla o query. Pones un Dataset con la query select * from z_tablas where tabla='nombretabla' y al abrirlo, ya tienes todos los datos de los campos de la tabla que quieras. Si sólo quieres un campo, añade un filtro para que lo localice.

Luego, en el programa, lo que hago es montar 'al vuelo' los datasets y los grids, dándoles las propiedades 'al vuelo'.

Esto es lo que se ejecuta en la creación de la ventana del dibujo que adjunto. ( Nota: no puedo adjuntar más archivos, y paso de esas páginas de almacenar imágenes que hay por ahí )

Código Delphi [-]
procedure TForm2.FormCreate(Sender: TObject);
begin
  Frame1:=CrearFrameGrid( 'Maestro',Form2, Panel1, DMP.BBDD,
                         'SELECT * FROM PACIENTE', 'PACIENTE' );
  PrepararDS(Form2,DMP.BBDD,Frame1.SQLDataSet1,'PACIENTE','');
  PrepararDS(Form2,DMP.BBDD,Frame1.ClientDataSet1,'PACIENTE','');
  PrepararGrid( DMP.BBDD, Frame1.cxGrid1DBTableView1, Frame1.DataSource1, 'PACIENTE');
  Frame1.ClientDataSet1.AfterDelete:= DMP.CDSTablaAfterDelete;
  Frame1.ClientDataSet1.AfterPost:= DMP.CDSTablaAfterPost;
  Frame1.ClientDataSet1.BeforePost:= DMP.CDSTablaBeforePost;
  Frame1.ClientDataSet1.OnNewRecord:= DMP.CDSNewRecord;
  Frame1.ClientDataSet1.OnReconcileError:= DMP.CDSReconcileError;

  Frame2:=CrearFrameGrid( 'Detalle', Form2, TabSheet1, DMP.BBDD,
                         'SELECT CITA.* FROM CITA', 'CITA'); // WHERE IDPACIENTE=:IDPACIENTE';

  Frame3:=CrearFrameGrid( 'Patologia', Form2, TabSheet2, DMP.BBDD,
                         'SELECT * FROM PATOLOGIA', 'PATOLOGIA'); // WHERE IDPACIENTE=:IDPACIENTE';

  Frame4:=CrearFrameGrid( 'V_CITAS', Form2, TabSheet3, DMP.BBDD,
                         'SELECT * FROM V_CITAS', 'CITA'); // WHERE IDPACIENTE=:IDPACIENTE';

//  PrepararDS(Form2,DMP.BBDD,Frame2.SQLDataSet1,'CITA','');
  PrepararDS(Form2,DMP.BBDD,Frame2.ClientDataset1,'CITA','');
  PrepararGrid( DMP.BBDD, Frame2.cxGrid1DBTableView1, Frame2.DataSource1, 'CITA');
  Frame2.ClientDataSet1.AfterDelete:= DMP.CDSTablaAfterDelete;
  Frame2.ClientDataSet1.AfterPost:= DMP.CDSTablaAfterPost;
  Frame2.ClientDataSet1.BeforePost:= DMP.CDSTablaBeforePost;
  Frame2.ClientDataSet1.OnNewRecord:= DMP.CDSNewRecord;
  Frame2.ClientDataSet1.OnReconcileError:= DMP.CDSReconcileError;

  Frame2.ClientDataSet1.MasterSource:= Frame1.DataSource1;

...

No sé si ha sido suficientemente aclaratorio. Si alguien está interesado, le puedo dar más información si me quiere ayudar a terminarlo o a estudiarlo.

Con media docena de ventanas 'maestras' y sobre todo, resolver bien cómo enlazar procesos desde una ventana con los datos de la misma, se puede hacer una cosa interesante.

He estado mirando frameworks varios, y en cuanto se ponen a hablar de objetos, instanciar, ... me mareo.
Si además puedo encajar todo esto con herencia, ... pues sería ideal. Pero mi tiempo y conociemientos son limitados.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita