FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Buscar bloques de registros consecutivos bajo ciertas condiciones individuales.
Hola!! experimentando con el uso de tablas y búsquedas de datos en ellas, estoy tratando de realizar la siguiente tarea:
.- Dispongo de una tabla de 20 campos y un nº x de registros. .- La idea es, buscando registro a registro (en toda la tabla) para que se cumplan 2 condiciones: .- Condición 1) - Encontrar aquellos registros en los que se cumplan al menos 2 de los siguientes 3 requisitos: a) - Que el valor almacenado en el campo A sea <= x b) - Que el valor almacenado en el campo B sea <= y c ) - Que el valor almacenado en el campo A sea >= z (Sólo me interesan los datos registrados en 3 de los 20 campos de la tabla) .- Condición 2) - Que la condición 1 se cumpla en al menos 10 registros consecutivos. Es decir, la idea general es obtener bloques de al menos 10 registros consecutivos en los que se cumplen 2 de los 3 requisitos enumerados, para luego poner en un TMemo el nº de bloques de registros consecutivos encontrados que cumplen con eso y si es posible, pintar en el TDBGrid las líneas para identificar dichos bloques visualmente. Si tenéis alguna idea sobre como llevarlo a cabo os lo agradecería. |
#2
|
||||
|
||||
Un prototipo en Delphi, ya lo pasaras/afinaras para c++
Con eso obtendrias la lista de filas que cumplen con la condicion1. Despues deberias procesar esa lista y ver si hay 10 consecutivas. Con esa misma lista podrias pintar el DBGrid tranquilamente Última edición por AgustinOrtu fecha: 19-11-2015 a las 04:24:32. |
#3
|
|||
|
|||
Gracias AgustinOrtu!!
Yo estoy probando usando un componente TQuery para hacer una búsqueda tal que así: Código:
qBusqueda->DatabaseName = "dbBaseDatos"; qBusqueda->Close(); qBusqueda->SQL->Add("SELECT ID, CAMPO2, CAMPO3, CAMPO4"); qBusqueda->SQL->Add("FROM Tabla"); qBusqueda->SQL->Add("WHERE ( (CAMPO2 <= 10 AND CAMPO3 >= 6 AND CAMPO4 >= 30) OR"); qBusqueda->SQL->Add("(CAMPO2 <= 10 AND CAMPO3 >= 6) OR"); qBusqueda->SQL->Add("CAMPO2 <= 10 AND CAMPO4 >= 30) OR"); qBusqueda->SQL->Add("(CAMPO3 >= 6 AND CAMPO4 >= 30) ) ORDER BY ID"); qBusqueda->Open(); qBusqueda->Active = true; Sin embargo, tengo el problema de que la tabla almacena datos de tipo String, por lo que se requiere una conversión a tipo Int para realizar la comparación y yo no sé como hacerlo. He intentado con StrToInt(CAMPOx), pero me da error. |
#4
|
||||
|
||||
Con una consulta SQL a veces se puede volver complicado
Yo creo que lo mejor en ese caso es hacerlo desde un Stored Procedure (siempre que la bd que estes usando lo soporte) Sino es traerte todo y recien ahi operar desde C++ como propuse mas arriba |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
oracle bloques anonimos que devuelvan registros | fjcg02 | Conexión con bases de datos | 2 | 21-01-2015 09:51:33 |
Distinguir registros no consecutivos para alternar colores en dbgrid. | amadis | OOP | 15 | 19-07-2014 15:17:51 |
Registros en en bloques de 100 o mas... | Jose Roman | Conexión con bases de datos | 18 | 25-06-2010 17:42:13 |
Bloques De Numeros Consecutivos | dany2006 | C++ Builder | 5 | 15-11-2006 21:06:16 |
buscar registros | brandolin | Firebird e Interbase | 1 | 19-01-2004 20:59:11 |
|