Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Consulta SQL para varios campos (https://www.clubdelphi.com/foros/showthread.php?t=53155)

Raynel 12-02-2008 15:59:52

Consulta SQL para varios campos
 
Saludos amigos, tengo una duda y no encuentro como resolverlo.
Cómo hago para ejecutar un Query donde necesito hacer un select a varios campos, es decir, tengo los campos: campo1,campo2,campo3,campo4,etc; y necesito hacer la consulta al campo1 y campo2, campo1 y campo3, campo1 y campo 4, etc; he leído desde varios SELECT hasta el help de Delphi donde habla de WHERE CONTAINS, pero que va, estoy trasnochao. jejejeje gracias.;)

Delphius 12-02-2008 16:03:23

Cita:

Empezado por Raynel (Mensaje 265211)
Saludos amigos, tengo una duda y no encuentro como resolverlo.
Cómo hago para ejecutar un Query donde necesito hacer un select a varios campos, es decir, tengo los campos: campo1,campo2,campo3,campo4,etc; y necesito hacer la consulta al campo1 y campo2, campo1 y campo3, campo1 y campo 4, etc; he leído desde varios SELECT hasta el help de Delphi donde habla de WHERE CONTAINS, pero que va, estoy trasnochao. jejejeje gracias.;)

:confused::confused::confused:
Y yo me pregunto ¿Donde está el problema? Tu mismo te das la solucion.

Código SQL [-]
select campo1, campo2, ... campoN
from tu_tabla
where (listado_de_condiciones)

Recomiendo la lectura de algún manual SQL.

Saludos,

Raynel 12-02-2008 16:06:13

Gracias Delphius, debe ser que estoy ya un poco agotado, lo probare más tarde. Thankyou!!!!!:p:D

AzidRain 12-02-2008 22:18:13

Código SQL [-]
select campo1, campo2...campon 
from tabla
where (campo1=condicion1) and (campo2=condicion2) and ...(campon=condicionn)

Raynel 12-02-2008 22:32:27

casi casi
 
Más bien, mi consulta sería:



Código SQL [-]
SELECT * FROM Tabla WHERE (Campo1=dato1 AND Campo2=dato2) OR (Campo1=dato1 AND Campo3=dato2) OR (Campo1=dato1 AND Campo4=dato2) etc.





Me imagino que sería así ¿no?

Delphius 12-02-2008 23:48:31

Sólo tu nos podrías decir si lo que deseas es una consulta así.

¿Porqué nos preguntas?
No tenemos la información adecuada para afirmar o negar si tu consulta está bien o mal.

Tal vez pueda simplificarse esa serie de condiciones. Armando una tabla de verdad se podría saber si se puede resumir.

¿Cúantos campos tienes? ¿Es necesario que compares con todos los campos?
Como dije... no sabría decirte si está bien o mal porque desconozco lo que deseas hacer.

EDITO:
Si sólo fueran esos lo campos en el where, dichas condiciones se pueden resumir a esta equivalente:

Código SQL [-]
where (campo1 = dato1) AND ((campo2 = dato2) OR (campo3 = dato2) OR (campo4 = dato2))

Saludos,

Raynel 13-02-2008 02:54:15

Ya solucionado pero....
 
Bueno la consulta se realizó con éxito, pero sería interesante conocer un método para muchos campos (lo admito lo desconozco), aunque no soy muy diestro en Delphi y sé solo lo básico de SQL, estoy aprendiendo; en el programa que estoy haciendo lo hago con tablas planas, en concreto Paradox. Gracias por el empujoncito jejejeje. Hoy si me acuesto temprano, no quiero pernoctarme y acostumbrarme al huso horario chino jejejejeje. Buenas noches a todos y suerte!!!!!.

Delphius 13-02-2008 03:15:13

Cita:

Empezado por Raynel (Mensaje 265432)
Bueno la consulta se realizó con éxito, pero sería interesante conocer un método para muchos campos (lo admito lo desconozco), aunque no soy muy diestro en Delphi y sé solo lo básico de SQL, estoy aprendiendo;

:confused:¿Que haz querido decir con eso?
:confused:¿Muchos campos? ¿Cúanto es mucho?
Realizar un SQL que en su parte where tiene demasiadas condiciones no es tan productivo. Más si se trata de Paradox. Cuanto más condiciones tengas, si bien filtrarás lo que no desees, el motor necesita de más tiempo para procesar.

Una SQL que incluya muchos campos... ¿a que quieres llegar? Eso me pregunto yo... De forma genérica se tiene:

Código SQL [-]
select tabla1.campo1, ... tabla2.campoN, ... tablaN.campoN
from tabla1, ... tablaN
where...

Si la consulta debe devolver 30, 40, 100 campos... (no registros) que los devuelva. Pero también una buena consulta SQL en su parte WHERE no debería tener más del 30 0 40% de los campos que intervienen en su parte SELECT.

Por lo general, no tiene sentido y significado alguno una consulta que:
1. Este formada por muchos campos, O bien.
2. Que implemente demasiados "filtros".

Esto es debido a que:
1. Los informes o consultas deben ser breves, resumidos. Un resumen no es algo que te muestra 30 campos.
2. Muchos filtros pueden hacer que se pierda de vista otros registros que si podrían ser considerados en la consulta.

En estos casos, sería recomendable partir la consulta en varias consultas parciales.

Considero que si explicas tu problema (la raiz de todo) vas a encontrar una respuesta más exacta.
Estoy adivinando... ¡Que deseas!

Saludos,

Raynel 13-02-2008 03:34:53

Cita:

Empezado por Delphius (Mensaje 265435)

Esto es debido a que:
1. Los informes o consultas deben ser breves, resumidos. Un resumen no es algo que te muestra 30 campos.
2. Muchos filtros pueden hacer que se pierda de vista otros registros que si podrían ser considerados en la consulta.

Tienes razón Delphius, para lograr una consulta eficiente se debe seguir lo anterior aunado a una buena interpretación de lo que quieres conseguir (obvio!!); solo imaginaba para una tabla que no contuviera no mas de 40 campos, aunque es mejor manejarlos por array y no una tabla; te explico, el programa que estoy haciendo toma ciertos números y hace un conteo que a su vez vuelve a hacer otro conteo de este último conteo (para resumirte un poco), y por ahí me largo con ecuaciones estadísticas y demás especias. Antes lo hice pero archivando estos números en un .dat, y ahora lo quiero hacer con tablas planas. Te comento que mi tabla no pasa de 12 campos. Y están ordenados por fechas (ya de ahí lo de ordenar será después). Espero que me ayuden en este proyecto, ya que incluirá exportar a un archivo Excel (he tomado unos tips del foro, los estudiaré más adelante). Este foro es una tremenda biblioteca de recursos.

Raynel 13-02-2008 03:37:49

Cita:

Empezado por Delphius (Mensaje 265435)

Esto es debido a que:
1. Los informes o consultas deben ser breves, resumidos. Un resumen no es algo que te muestra 30 campos.
2. Muchos filtros pueden hacer que se pierda de vista otros registros que si podrían ser considerados en la consulta.

Tienes razón Delphius, para lograr una consulta eficiente se debe seguir lo anterior aunado a una buena interpretación de lo que quieres conseguir (obvio!!); solo imaginaba para una tabla que no contuviera no mas de 40 campos, aunque es mejor manejarlos por array y no una tabla; te explico, el programa que estoy haciendo toma ciertos números y hace un conteo que a su vez vuelve a hacer otro conteo de este último conteo (para resumirte un poco), y por ahí me largo con ecuaciones estadísticas y demás especias. Antes lo hice pero archivando estos números en un .dat, y ahora lo quiero hacer con tablas planas. Te comento que mi tabla no pasa de 12 campos. Y están ordenados por fechas (ya de ahí lo de ordenar será después). Espero que me ayuden en este proyecto, ya que incluirá exportar a un archivo Excel (he tomado unos tips del foro, los estudiaré más adelante). Este foro es una tremenda biblioteca de recursos. Gracias a todos.


Delphius 13-02-2008 03:47:14

Cita:

Empezado por Raynel (Mensaje 265439)
Tienes razón Delphius, para lograr una consulta eficiente se debe seguir lo anterior aunado a una buena interpretación de lo que quieres conseguir (obvio!!); solo imaginaba para una tabla que no contuviera no mas de 40 campos, aunque es mejor manejarlos por array y no una tabla; te explico, el programa que estoy haciendo toma ciertos números y hace un conteo que a su vez vuelve a hacer otro conteo de este último conteo (para resumirte un poco), y por ahí me largo con ecuaciones estadísticas y demás especias. Antes lo hice pero archivando estos números en un .dat, y ahora lo quiero hacer con tablas planas. Te comento que mi tabla no pasa de 12 campos. Y están ordenados por fechas (ya de ahí lo de ordenar será después). Espero que me ayuden en este proyecto, ya que incluirá exportar a un archivo Excel (he tomado unos tips del foro, los estudiaré más adelante). Este foro es una tremenda biblioteca de recursos. Gracias a todos.

La mayoría de los motores cuentan con funciones estadísticas simples como ser media, varianza, además de las sumas, conteo, máximos, mínimos.

Los manuales SQL explican estos temas. Lee Raynel, lee... no importa la cantidad de los campos (12 es un valor aceptable).

por ejemplo:

Código SQL [-]
select AVG(campoA)
from tabla
where (algo)
devolverá el promedio del contenido de campoA que cumplan la condición Algo.

Necesitarías revisas que "especias" son las que realizas y corroborar que estén soportadas por Paradox, aunque yo no creo que disponga de mucho:(. Para cosas más elaboradas habrá que traer el conjunto de registros, almacenarlos en un array talvez, y pasarlo a una funcion hecha en Delphi.

Más no puedo decirte. Solo LEE.

Saludos,

Raynel 13-02-2008 03:49:42

Gracias. eso haré.


La franja horaria es GMT +2. Ahora son las 05:22:53.

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