FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Filtrar registros y guardar en Array
Hola,
¿Cómo realizar una consulta filtrada para guardar en un ARRAY los campos de una Base de Datos hecha en Access donde se repiten muchos registros con el mismo nombre? Tengo los datos de una Tabla Periódica Química guardada en Access, donde existen registros que se repiten en los campos como ser: Metal, No Metal, Gas Noble y Anfótero por ejemplo. Código:
Nombre Tipo Litio Metal Oxígeno No Metal Sodio Metal Manganeso Anfótero Cloro No Metal Calcio Metal Molibdeno Anfótero Helio Gas Noble ...... etc, etc, etc, etc. Lo que deseo es filtrar con una consulta SQL "Tipo" de tal manera que LUEGO pueda guardarlo en un array [0..3] of string los elementos: Metal, No Metal, Anfótero y Gas Noble solo los 4. ¿Cómo realizo todo este proceso trabajando con ADOQuery? |
#2
|
||||
|
||||
Hola Deiv,
¿Estás guardando en una misma tabla estos dos campos: Nombre y Tipo? Porque no logro entender acabadamente lo que deseas hacer... Si la respuesta es afirmativa, te aconsejo que hagas este tipo de relación: Código:
Tabla_Tipos -< Tabla_Elementos Si lo que deseas es obtener unicamente los tipos simplemente haces:
Una vez que lanzas la consulta es cuestión de ir leyendo los registros devueltos e insertarlos en el array que tu tengas declarados. Por favor, si estoy equivocado y entendí mal avisame. Saludos, |
#3
|
|||
|
|||
Encontré este ejemplo en el Foro de Ruben_Cu:
Y Yo lo implemente algo parecido a lo siguiente (No tengo en estos momentos Delphi a mano): Pero el problemita de este ejemplo para mi aplicación es que no requiero de un ComboBox en mi Formulario, es decir para nada me hace falta ese ComboBox, Yo solo trato de guardar esos datos en un array, ¿Cómo se puede hacer? Última edición por Deiv fecha: 24-06-2007 a las 23:38:57. |
#4
|
||||
|
||||
Utiliza un TStringList para guardarlo, de hecho, la propiedad Items de un combo (TStrings) es el antecesor del TStringlist.
Busca en el foro o en la ayuda de delphi. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
|||
|
|||
El código:
Me lanza error en la línea: if (B.IndexOf(FieldByName('Tipo').AsString)=-1) then Project raised exception class EAccess Violation Imagino que es porque no está lleno el TStringList, es decir imagino que no use el método ADD, ¿alguna orientación, de cómo corregirlo? |
#6
|
||||
|
||||
Bueno yo no creo que es por lo lleno en caso de que no este lleno el error que te daria es index out of bound pero el acces violation es sobre un control que no esta creado en memoria, por los momentos no veo el error, seguro qe la copia es exacta del programa???
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#7
|
|||
|
|||
Si es copia exacta,
Solo que tiene otras cosas más (.......) ya que el objetivo es capturar aquellos 4 elementos (Metal, No Metal, Anfótero y Gas Noble) para los Títulos de una Barra OutLook de TMS, he ahí que me interesa filtrar SIN REPETICIÓN y guardarlo en un ARRAY, para luego recuperarlo por código en dicha barra a manera de títulos. Última edición por Deiv fecha: 26-06-2007 a las 15:13:51. |
#8
|
||||
|
||||
No entiendo porq tantas cosas en el programa, yo lo haria con esta modificacion
Si lo que quieres es agregar el resultado de la consulta al arreglo con eso bastara no tienes necesdiad del stringlist
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#9
|
|||
|
|||
Hola, gracias por la respuesta, pero
Cita:
A vista (tal vez este equivocado como novato) el codigo trabajará recuperando toda la columna y todos los registros de "Tipo", sin embargo mi objetivo era que filtre sin repetir los mismos para los títulos de la Barra OutLook, así como en un principio planteé, pues si te das cuenta en: Código:
Nombre Tipo Litio Metal Oxígeno No Metal Sodio Metal Manganeso Anfótero Cloro No Metal Calcio Metal Molibdeno Anfótero Helio Gas Noble ...... etc, etc, etc, etc. En "Tipo" existen muchos elementos que se repiten y Yo solo quiero rescatar aquellos 4; redundo: Metal, No Metal, Anfótero y Gas Noble. Por ello tomé el ejemplo del ComboBox que este con su IndexOf y el -1 capturaba elementos sin repetirlos: ¿Alguna sugerencia? Última edición por Deiv fecha: 26-06-2007 a las 18:43:54. |
#10
|
||||
|
||||
Me parece que el fallo es de filosofía....
Se quiere seleccionar solo 4 Tipos, pero conocidos de antemano . ¿qué sentido tiene buscar esos 4 tipos en la base de datos si ya son conocidos? Lo suyo creo es lo siguiente: En las preferencias del programa indicas: " Tipos que se verán en el Outlook" y muestras al usuario un CheckListBox con todos los tipos existentes en la base de datos. El usuario marca la casilla de verificación y esa selección se guarda en una tabla especial de tu programa llamada "Config". De esta forma permites al usuario que ponga las categorías que le venga en gana en el Outlook. Si ves que es mucho lío, usa solo la tabla "Config": Código:
codigo Valor OutlooksItems Gas Noble, Metal, No Metal Preferencia1 lo que sea... Preferencia2 lo dicho. Otra forma de grabarlo: Código:
codigo Valor OutlookItem1 Gas Noble OutlookItem2 Metal OutlookItem3 No Metal Preferencia1 lo que sea... Preferencia2 lo dicho. El tema de solicitar una lista sin repetidos, es tan fácil como un Query, con su propiedad SQL definida a :
Decide primero cómo quieres hacerlo y después vendrá el código fuente . Explicar detalladamente lo que quieres obtener, también nos sirve de ayuda. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#11
|
||||
|
||||
Estuve pensando ¿para que estar liandose tanto por una consulta o recorrido que SE SABE DE ANTEMANO QUE SIEMPRE ARROJARÁ LOS MISMOS RESULTADOS?
Si es realmente que sólo existen estas 4 condiciones y ninguna más. ¿Porque no simplemente se mantiene un array declarado en forma fija?
Si estoy confundido haganme saber. EDITO: acabo de ver que Lepe también se había dado cuenta. Saludos, Última edición por Delphius fecha: 26-06-2007 a las 19:26:53. |
#12
|
|||
|
|||
Gracias por las respuestas, estoy muy liado en esto
Encontré el error del post #5, y es que mi array tenía el tamaño [0..3]. Cuando le puse [0..100] arranca normal, pero para comprobar si llenaba bien el Array modifiqué un poquitín el código por:
Y desplegando el ComboBox2 NO me filtra nada de nuevo, me llena TODOS los Registros de esa columna, he ahi donde se explica el error que me lanzaba Delphi, pues dicha línea no me filtraba y sobrepasaba la capacidad del Array; Pregunta: ¿Por qué la línea: NO TRABAJA IGUAL QUE: que con -1 suprime los valores repetidos??? Cita:
ó Estas Consultas lo único que me muestran son varios campos "Metal" repetidos, contando todos los que existen en la BD o en el otro caso muchos "Anfótero" y obviamente al lado los otros campos que si son diferentes, pero a mi solo me interesa capturar TODOS LOS NO REPETIDOS de la Columna "Tipo". Di un ejemplo con 4 (solo fue un ejemplo) pero si fueran 300, ahí cambia la cosa verdad? Por ello estoy trancado en la línea:
He decidido mejor adjuntar los ejemplos para que os puedas revisaros. ¿Alguna otra sugerencia, por favor? Última edición por Deiv fecha: 26-08-2007 a las 00:53:53. |
#13
|
||||
|
||||
A estas alturas crei que habias solucionado el problema segun los post de Lepe y delphius ya debes tener los campos que necesitas, porq la clausula DISTINCT del sql te devuelve solo una vez los campos que no se repiten, entonces si la consulta la disparas con esa clausula y utilizas el codigo que te envie para cargar el array no deberias tener problemas, cualquier duda comentalo, porq parece que has perdido el hilo
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#14
|
|||
|
|||
Gracias a todos, era problema de SQL no más que no entendía.
Tenía razón eduarcol, la consulta de Lepe con Distinct me sirve y lo adecué a mi aplicación y funciona. Cita:
Cita:
Gracias a todos salí de las dudas, y mis disculpas por todo el bollo que cause en este hilo, de todas maneras muchas gracias por vuestra paciencia. Ya lo decían: "Dedique el mayor tiempo a su pregunta, si quiere realmente ser respondido", es un buen consejo y Yo creo que no me dejé entender. Pero este hilo está solucionado. Aunque me quedé con la duda de: Cita:
Última edición por Deiv fecha: 28-06-2007 a las 16:19:28. |
#15
|
||||
|
||||
Disculpa pero no fue un regaño fue un asombro de mi parte jejeje, pues yo tambien soy autodidacta, lo que no funcionan igual se me ocurre es porq no tienen el mismo contenido :S
Ahora lo que dices que -1 suprime los valores repetidos, pues me has puesto a pensar hasta donde sabia -1 es el indice que lo devuelve si no encuentra el elemento buscado Cualquier duda estamos a la orden y para autodidactas considero bueno la cara oculta de delphi
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#16
|
|||
|
|||
Bueno mas vale tarde que nunca dicen , me he respondido a mi mismo, por si a alguien le interesa:
Cita:
THis is end. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Guardar y Filtrar en una Tabla | Sr.Scorpion | Conexión con bases de datos | 19 | 23-03-2007 17:14:44 |
Guardar/Recuperar OLEVARIANT OF ARRAY (II) | Franz Argandoña | Tablas planas | 2 | 13-07-2006 20:42:59 |
Guardar array en tabla | StartKill | Firebird e Interbase | 4 | 13-07-2004 14:18:50 |
Guardar Olvariant of Array en Access | Franz Argandoña | Tablas planas | 1 | 01-05-2004 02:54:52 |
Como guardar una array en una base datos? | ciscu | Varios | 3 | 11-02-2004 09:27:49 |
|