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 24-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
Pues de verdad que llevo todo este tiempo pensado que Era AI y No Al, te pido disculpas, y debo comfesar que no sabia si era una abreviatura ni nada por el Estilo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 24-06-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.618
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
No hay problema, José Luis. Un abrazo hasta aquellas Islas Afortunadas.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas.
Responder Con Cita
  #3  
Antiguo 25-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 a todos,
parece que mi código a alguno le ha parecido un poco fuerte.
Si os fijais, es casi igual al que Al publica. De hecho, lo saqué de una bbdd que tenía publicada en su antigua página.

Lo que ocurre, es que yo añadí una tabla ( que es la que se crea al principio), en la que guardo información mía propia de cada query, campo, ...

Estos son los campos que devuelve la procedure:
Código SQL [-]
    tabla varchar(20),
    posicion integer,
    campo varchar(20),
    tipo varchar(25),
    longitud integer,
    decimales integer,
    permite_nulos char(2),
    pk integer,
    fk_campo varchar(50) -> si es foreign key, indica el campo
    fk_tabla varchar(50), -> tabla de la fk
    descripcion varchar(500),
    label varchar(20), -> label queusaré en los formularios
    mascara varchar(20) -> máscara para editar si lo necesita
    tamanio varchar(20)-> tamaño en el formulario
    nombre_si_fk varchar(20)
    label_si_fk varchar(20),
    query_si_fk varchar(200)) -> si es fk la query asociada para buscar el valor
No sé si es suficientemente claro, pero a mi me simplifica mucho el trabajo. Tengo una tabla en la que defino todo lo que puedo de los campos, y en los formularios, éstos se van montando y configurando 'al vuelo' al crearlo. Al crear el formulario, le indico cual es la query pricipal, y el resto lo monta 'sólo'.

Espero que os sirva de ayuda. No tengo todo desarrollado por falta de tiempo, pero creo que por ahí hay que pegarle.

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

Última edición por Casimiro Noteví fecha: 25-06-2011 a las 16:39:47.
Responder Con Cita
  #4  
Antiguo 25-06-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.700
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por fjcg02 Ver Mensaje
Espero que os sirva de ayuda. No tengo todo desarrollado por falta de tiempo, pero creo que por ahí hay que pegarle.

Un saludo
Por supuesto que sirve, ya lo tengo también en mi "almacén"
Responder Con Cita
  #5  
Antiguo 25-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
Perdona, fjcg02, pero donde dices

Cita:
Para usarlo, utiliza "select * from z_tablas". Puedes filtrar por la tabla que quieras.
Donde tengo que ponerlo, estoy más perdido que un pulpo en el garaje, no veo la luz, estoy ciego, Bromas aparte, tu planteamiento me convence, he colocado tu primera parte de la coloque en un ibScript y perfecto, la segunda en otro y no vi nada, pero claro seguro que algo estoy haciendo mal y esa frase seguro que es la solución pero donde la pongo, como actuar, si puedes echarme una mano muchas gracias
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
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
  #7  
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 08:49:18.
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 21:15:43
Saber Campos Con Clave Forana, Saber campos con clave FORANA vivamotos Firebird e Interbase 2 18-09-2007 13:09:41
como puedo saber la cantidad de campos que tiene una tabla CottonMouth OOP 1 27-06-2007 07:02:49
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44
cómo saber el nombre de los campos en ejecucion? ramiretor Conexión con bases de datos 5 26-05-2003 17:20:47


La franja horaria es GMT +2. Ahora son las 14:11:46.


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