Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Crear vista en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=52037)

Caral 08-01-2008 19:45:36

Crear vista en Firebird
 
Hola
Como sabéis estoy haciendo algunas pruebas con firebird respecto a Access.
Ahora tengo una consulta relacionada con lo que dicen se llaman Vistas.
Me explico:
En Access se puede crear una consulta con el creador de consultas que trae el mismo.
Una vez hecha esta consulta se puede utilizar en el programa como una tabla mas, osea se puede usar un table para enlazarla incluso hacer un master detail con la misma.
Bueno, a la hora de pasar las tablas de access a Firebird estas consultas pueden quedar como tablas pero no se actualizan como consultas.
Pues bien, la pregunta es esa:
Como se puede hacer lo mismo en Firebird, crear una consulta y usarla como una tabla.?
Es posible, hacerlo en IbExpert.?
Gracias.
Saludos

maeyanes 08-01-2008 20:02:45

Hola...

Si es posible...

Ahora, mediante DDL se usa la sentencia CREATE VIEW...

Más o menos así...

Código SQL [-]
create view NombreVista (
lista de campos
)
as
select campos from tabla

Ya luego esta vista la puedes usar en un select de forma normal...

Código SQL [-]
select campo1, campo2 from NombreVista where campo2 = x

Saludos...

Héctor Randolph 08-01-2008 20:47:27

Solamente agregar que una vista se comporta como una tabla, aunque en realidad lo único que hace es tomar datos de una o más tablas y mostrarlos en una consulta. Este mecanismo puede servir para ocultar el contenido real de una tabla o bien para mostrar únicamente los campos que nos interesan a un determinado usuario. Por ejemplo, si yo no deseo que un usuario conozca la forma en que se almacenan los datos internamente, puedo crear una vista y darle solamente permisos de consulta sobre la vista y no sobre las tablas reales.

Las vistas por default son solamente de lectura, aunque pueden definirse también de tal manera que nos permitan insertar, modificar y eliminar registros a través de ellas. Para hacer una vista modificable (lectura/escritura) es necesario definir triggers en la propia vista BEFORE INSERT, BEFORE UPDATE, BEFORE DELETE, según sea el caso. por medio de los triggers debemos indicar de qué manera serán almacenados los datos en sus correspondientes tablas de origen. Esto es necesario porque la información en principio puede tomarse y almacenarse en diferentes tablas.

Saludos

Caral 08-01-2008 20:59:34

Hola
Muchas gracias por la explicacion.
Una consulta mas.
Ya se como crear las vistas, ahora en vez de usar un query para llamarlas quiero usar un table, como una tabla mas, esto por que me permite el uso de master detail, se puede?.
Saludos

maeyanes 08-01-2008 21:07:23

Hola...

Con los queries (usando los IBX) también puedes hacer MasterDetail...

La técnica es...

Pones dos TIBQuery en una forma o módulo de datos, con sus respectivos TDataSource. Los configuras como ya sabes...

En el TIBQuery que va a servir de detalle, la consulta debe ser del tipo:

Código SQL [-]
select campos from tabla where id_padre = :id_padre

Ahora, en la propiedad DataSource, seleccionas el TDataSource asociado al TIBQuery Master...

Solo debes procurar que el campo que vas a usar para hacer el enlace se llame igual al que usas como parámetro en la consulta del TIBQuery padre:

Código SQL [-]
select id_padre, campo1 from TablaPadre


Saludos...

Héctor Randolph 08-01-2008 21:12:57

Por medio de un Query también puedes establecer una relación maestro/detalle. Por lo regular los componentes Query tienen una propiedad llamada DataSource que funciona como el MasterSource.

En el query detalle coloca la propiedad DataSource apuntando al query Maestro, después establece la relación en la sentencia SQL del detalle haciendo referencia al campo llave que los une. Por ejemplo:

Código SQL [-]
 SELECT * FROM tabla_detalle WHERE campo_llave_detalle=:campo_llave_maestro;

No importa si los campos llave maestro y detalle se llaman igual, por ejemplo:
Código SQL [-]
 SELECT * FROM tabla_detalle WHERE campo_llave=:campo_llave;

De esta forma, los campos del query detalle se irán filtrando según el registro seleccionado en el query maestro.

Saludos

Héctor Randolph 08-01-2008 21:18:54

Parece que hoy estoy muy lento para responder :o

Caral 08-01-2008 21:20:25

Hola
Muchas gracias, sois muy amables los dos.
Voy a intentarlo.
Saludos


La franja horaria es GMT +2. Ahora son las 23:09:07.

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