Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-07-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
¿Como se utilizan las Vistas en Delphi?

Disculpen señores...

Estoy buscando la manera de realizar vistas en delphi 7,,, segun tengo entendido y por lo que ya lei en la red.. puedo utilizar vistas desde delphi 7 utilizando lo benditos componentes TIBquery o IBSQL... y TIBTable... porque una vista es una tabla virtual,,, entonces para que yo `pueda modificar datos mediante una consulta lo pretendo realizar mediante vistas Actualizables... pero el problema es.. como las abro en Delphi es decir,, realizo el codigo de la vista con el componente TIBquery.... y luego lo conecto a un Datasource y los DbEdits en su propiedad Datasource les pongo el nombre del datasource que hace referencia a mi vista ... pero al momento de ejecutarla no me aparecen los resultados de la busqueda... los edits se quedan vacios....

alguien me puede decir que pasa??? o como se utilizan las vistas desde delphi????
Responder Con Cita
  #2  
Antiguo 11-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Una vista se debe crear primero en el motor:

Por ejemplo:
Código SQL [-]
Create view EmpleadosActivos (EmpleadoID, Apellidos, Nombres)
AS
Select EmpleadoID, Apellidos, Nombres
  from Empleado
 where estado = 'activo';

luego, en delphi, como es usual, lanzas una consulta contra la vista:

Código Delphi [-]
  IBQuery1.SQL.Text := 'Select * from EmpleadosActivos';
  IBQuery1.Open;
Si este ibquery es actualizable dependerá de si la vista es actualizable, que básicamente es una vista que obtiene datos de una sola tabla sin agrupar y sin campos calculados.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 11-07-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
ok Jachguate.. voy a probar ... entonces ya me di cuenta de mi error... yo acia esto

primero creaba la vista con el Ibquery y luego ejecutaba este ibquery esperando que me mostrara la informacion.. pero con el ejemplo ya me quedo claro... entonces voy a necesitar 2 querys... uno para la vista y otro para hacer referencia a la vista cierto???
Responder Con Cita
  #4  
Antiguo 11-07-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Cita:
Empezado por jachguate
Una vista se debe crear primero en el motor:

Por ejemplo:
Código SQL [-]
 Create view EmpleadosActivos (EmpleadoID, Apellidos, Nombres)
 AS
 Select EmpleadoID, Apellidos, Nombres
   from Empleado
  where estado = 'activo';

luego, en delphi, como es usual, lanzas una consulta contra la vista:

Código Delphi [-]
   IBQuery1.SQL.Text := 'Select * from EmpleadosActivos';
   IBQuery1.Open;
Si este ibquery es actualizable dependerá de si la vista es actualizable, que básicamente es una vista que obtiene datos de una sola tabla sin agrupar y sin campos calculados.

Hasta luego.

pero si la vista que yo quiero crear contiene parametros... como le paso estos parametros a mi vista???

Es decir quiero crear una vista para modificar informacion de alumnos... y el parametro que le quiero pasar es la matricula del alumno. y en base a esta matricula mi vista se debe generar... pero como le paso el parametro antes de abrirla???
Responder Con Cita
  #5  
Antiguo 11-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
No existen tal cosa como vístas con parámetros.

Podes filtrar el resultado via predicados, al igual que con las tablas. De hecho, en términos prácticos, para las consultas una vista se maneja igual que una tabla.

Código SQL [-]
Select *
  from VistaAlumnos
 where Matricula = 15;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 12-07-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
lo que podes hacer, es generar una procidimiento almacenado para que te genere consulta recibiendo parámetros.

Esta exiplicado muy bien en el libro "la cara oculta de Delphi 4" de Ian Marteen.
__________________
[Crandel]
Responder Con Cita
  #7  
Antiguo 12-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por Crandel
lo que podes hacer, es generar una procidimiento almacenado para que te genere consulta recibiendo parámetros.
¿A que te referis exactamente?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 12-07-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Puedes crear consultas asi, la idea de esta consulta es devolver todas las personas que nacieron entre dos fechas (puede haber algun error de sintaxis, la estoy inventando, válido FB/IB).

Código SQL [-]
CREATE PROCEDURE CONSULTA_CON_PARAMETROS (FechaDesde TIMESTAMP, FechaHasta TIMESTAMP)
RETURNS (ID_PERSONA INTEGER, NOMBRE VARCHAR(40))
AS
BEGIN
  FOR SELECT ID_PERSONA, NOMBRE
     FROM PERSONAS
       WHERE  FECHA_NAC BETWEEN :FechaDesde AND :FechaHasta
  DO BEGIN
    SUSPEND;
  END
END^

NO es una vista, claro, es solo una consulta con parámetros que se ejecuta en el servidor y devuelve un listado, pero puede ser muy útil.
__________________
[Crandel]
Responder Con Cita
  #9  
Antiguo 13-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola CRandel.

El código que has publicado funcionará en interbase/firebird, pero no es "general". Dado que estamos en el foro de Conexión, pues no quise publicar algo tan específico para un motor.

Por otro lado, dentro del procedimiento no te queda de otra que "filtrar" usando predicados... así que no veo la ventaja sobre el uso de una vista normal filtrada también por esa vía.

Me parece que la verdadera ventaja de los procedimientos almacenados que retornan cursores de ib/fb radica en la capacidad de realizar cálculos, manipulaciones y filtros complejos sobre los datos en el propio servidor, cosa que es muy dificil en una vista (a menos que se trate de oracle, donde estoy convenciendome que poco es lo que no se puede hacer.. )

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 13-07-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cita:
Empezado por jachguate
dentro del procedimiento no te queda de otra que "filtrar" usando predicados... así que no veo la ventaja sobre el uso de una vista normal filtrada también por esa vía.
no se cual es la definición de preficados.

LA ventaja radica en la posibilidad de ejecutar consultas filtradas desde el mismo servidor. Mientras con las vistas no podes filtrarlas dinámicamente.

Este es sólo un ejemplo sencillo, para comprender el uso.

Obviamente el uso conviene mas cuando uno hace cálculos y otras comprobaciones, asi justamente lo uso yo.

Un caso que comunmente uso, es los valores NULL que te devuelve un campo con SUM, por el valor cero.

y asi hay un monton de cosas que se pueden lograr.

No es la unica forma de hacerlo tampoco, sólo queria introducir una alternativa de solución y que cada uno elija la que le parezca más apropiada.
__________________
[Crandel]
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 20:34:35.


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
Copyright 1996-2007 Club Delphi