Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como se ejecutan las vistas ....? (https://www.clubdelphi.com/foros/showthread.php?t=57503)

Kenobi 17-06-2008 23:40:13

Como se ejecutan las vistas ....?
 
tengo una vista en mi bd ...algo asi

select * from clientes
order by nombre

ok esta es una vista digamos general de todos mis clientes, pues bien lo ocurre es que cada vez que la llamo filtrada desde mis programas sospecho que primero ejecuta toda la consulta para luego filtrarla, eso no es optimo lo ideal seria algo asi

select * from clientes
where id_cliente=Parametro_Id

asi a nivel de servidor solo se busca el cliente buscado con el parametro_id

el caso es que con las vistas segun parece no se puede usar variables o mejor dicho parametros con lo procedimientos almacenados si .... esa son las preguntas:

1. en efecto la primera consulta llama todos los registros de la tabla pero si la llamo desde un programa o por ejemplo crystal report restringiendo a un solo cliente, aun asi primero el servidor ejecuta la consulta general para luego filtrarla ...es esto cierto ...?

2. se pueden usar parametros a una vista ....?

Gracias a todos...

Neeruu 18-06-2008 01:57:42

Como se ejecutan las vistas ....?
 
Hola como estas??


Que yo sepa y por lo menos en interbase 7.1 no se puede pasar parametros a las vistas!!!!

Los que si puedes hacer y que lo he usado es recuperar los datos de un procedimiento almacenado con el componente IB_Cursor...

El unico inconveniente que el IB_Cursor te va devolviendo los datos a medida que recorres el dataset resultante, por lo tanto si quisieras mostrar el resultado en una dbgrid, despues de abrirlo tendrias que recorrer todo el dataset resultante para traer todos los registros....



Espero este claro....

Saluda Atte Neeruu!!!:)

pcicom 18-06-2008 06:01:17

Cuando creas una vista en la BD unicamente se graba la DEFINICION, por lo que cuando la mandas llamar es cuando se realiza la consulta.

EJEMPLO

Código SQL [-]

create view VENCIDOS
  SELECT CLIENTE,SALDO,ESTATUS 
        FROM CARTERA 
         WHERE ESTATUS='V'


Esto crea una Vista llamada VENCIDOS

De tal manera que cuando la quieras LLAMAR la podrias hacer como sigue

Código SQL [-]

SELECT * from VENCIDOS 
  WHERE SALDO BETWEEN 1000 AND 5000

Te devolveria todos los campos definidos en tu VISTA VENCIDOS pero unicamente te traeria a aquellos que el saldo este entre 1000 y 5000

Desde mi punto de Vista Las vistas te ayudan a evitar TENER un buen rollo en tus comandos SQL limitando unicamente a tus campos requeridos..

Las vistas las puedes considerar como si fuera una TABLA en tu BD, pero no son una TABLA ya que unicamente se graba la DEFINCION..

Otro ejemplo

Código SQL [-]

SELECT a.CLIENTE,a.SALDO,clientes.NOMBRE FROM VENCIDOS a 
    LEFT JOIN clientes ON a.CLIENTE=clientes.CLIENTE


Espero te haya aclarado un poco el concepto o puedes accessar este link..

http://www.ibphoenix.com/main.nfs?a=...qlref#RSf20247

Neftali [Germán.Estévez] 18-06-2008 08:53:25

Creo que tus conclusiones (1) y (2) son correctas.
¿Puedes utilizar Funciones y/o Stored Procedures?

Kenobi 18-06-2008 15:58:43

si puedo neftali
 
Si puedo usar funciones(aun no se como se usan) y procedimientos almacenados y eso es lo que quiero ver, cual es la alternativa optima en cuanto a recursos se refiere, en la actualidad la aplicacion que estoy en desarrollo tiene muy pocos terminales pero aun asi debo pensar en funcion de crecimiento futuro y mayor volumen de solicitudes de datos a tan fin pues lo que quiero es optimizar al maximo ...

por ejemplo la vista en cuestion a punta de joins enlaza 4 tablas (lo cual es bastante) si a esto añades el hecho de que segun parece la definicion de la vista cuando se ejecuta carga todos los datos para luego filtrarlos segun el criterio de mi solicitud .... pues ufff muchos datos imaginate 4 tablas enlazadas para n cantidad de registros repito ufff ....

Gracias .....

Neftali [Germán.Estévez] 18-06-2008 17:22:31

Yo creo que puedes usar cualquiera de los dos. A ambos les puedes pasar los parámetros necesarios para que el filtrado de datos se realice en el servidor.
Personalmente trabajando con SQL Server y ADO he acabado utilizando funciones, ya que se "llevaban" mejor con los diferentes tipos de cursores que maneja ADO.


La franja horaria es GMT +2. Ahora son las 02:08:48.

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