Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-06-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.419
Poder: 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
  #2  
Antiguo 27-06-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
fjcg02 me quedo , esto yo quería algo en delphi, bromas a parte, me gustaría si puedes podrías poner una pequeña demo, veras, lo que quiero hacer es lo siguiente, tengo un programa que se llama autoabm, para la generación de Forms, de momento con un sólo tipo (modelo), tanto de form como de búsqueda, ahora estoy preparando un programa, que genera las bases de datos en firebird, por tipos grupos o bases preestablecidas, sólo crea no modifica, explico un poco los tipos para que me entendais tipos, son los diferentes campos por valores propios (integer, varchar, etc) o propios notas (Blob subtipo 0 creo), grupos si elegimos el grupo dirección sería Dirección, cp, población provincia y por bases preestablecidas, si elegimos clientes, los datos típicos de una base de datos clientes, cada campo tendrá las opciones normales, por supuesto podemos desechar si crearlo o no, etc pero además añadirá si pertenece a un grupo (nombre del Grupo)1, el hint del campo, el displaylabel, el mask, wl whith de su tamaño, etc.

una vez terminado se montaría con el auto abm creando el form con los campos de la base de datos, a falta de conectar el Datasource.


1 en el programa se montaría dentro de un Groupbox
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 27-06-2011 a las 09:49:18.
Responder Con Cita
  #3  
Antiguo 27-06-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
fjcg02, Esta tarde me he puesto de nuevo con el código que aportaste, y por fin entendí su funcionamiento (si ya sé que soy un tronco, pero que le vamos a hacer, puse 2 ibscript, en el primero metí el primer código que genera la base tabla para la base de datos, ok, en el segundo el código para la vista (eso es por lo menos lo que entiendo, aunque no vi el tema del View), pero este no me aparece en Ibexpert, luego puse un Ibquery, con su datasource y dbgrid, le doy al botón para ejecutar con el "select * from z_tablas", que me comentabas y funciono perfecto, falta como ya comentabas añadirle un where para ver la tabla que quiera, en vez de todas.

Muchas gracias funciona muy bien.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #4  
Antiguo 27-06-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.419
Poder: 24
fjcg02 Va camino a la fama
No te preocupes, aquí no eres el unico trontxo que hay

Somos varios ...

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como seleccionar campos de una tabla sin saber cuantos van a seleccionar david duarte SQL 7 05-04-2010 22:15:43
Saber Campos Con Clave Forana, Saber campos con clave FORANA vivamotos Firebird e Interbase 2 18-09-2007 14:09:41
como puedo saber la cantidad de campos que tiene una tabla CottonMouth OOP 1 27-06-2007 08:02:49
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 12:19:44
cómo saber el nombre de los campos en ejecucion? ramiretor Conexión con bases de datos 5 26-05-2003 18:20:47


La franja horaria es GMT +2. Ahora son las 20:41:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi