Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Unhappy

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:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
type
  UnArray = array[0..100] of string;
var
  i,j,x:  integer;
  A:UnArray;
  B:TStringList;
const
  sqlElementos = ' Select * from elementos ';
begin
  x:=0;
  B:= TStringList.Create;
  ADOQuery1.Active:= False;
  ADOQuery1.Sql.text:= sqlElementos;
  ADOQuery1.Active:= True;
  with ADOQuery1 do
    begin
      first;
      while not eof do
        if (B.IndexOf(FieldByName('Tipo').AsString)=-1) then
           begin
              ComboBox2.Items.Add(FieldByName('Tipo').AsString);//Agregué un Combo
              A[x]:= FieldByName('Tipo').Value;
              inc(x);
              next;
           end;
    end;
end;

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:
Código Delphi [-]
if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then
NO TRABAJA IGUAL QUE:
Código Delphi [-]
if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)= -1) then
que con -1 suprime los valores repetidos???

Cita:
Empezado por eduarcol
Si lo que quieres es agregar el resultado de la consulta al arreglo con eso bastara no tienes necesdiad del stringlist
No sé cómo se podría realizar un tipo de consulta de manera que me filtre valores sin repetir, pues por ejemplo los códigos:
Código Delphi [-]
ADOQuery1.Sql.text := sqlElementos + ' where Tipo = "Metal"';
ó
Código Delphi [-]
ADOQuery1.Sql.text := sqlElementos + ' where Tipo = "Anfotero"';
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:
Código Delphi [-]
if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then

He decidido mejor adjuntar los ejemplos para que os puedas revisaros.
¿Alguna otra sugerencia, por favor?
Archivos Adjuntos
Tipo de Archivo: zip Elementos.zip (13,0 KB, 8 visitas)
Tipo de Archivo: zip No Funciona.zip (8,6 KB, 8 visitas)

Última edición por Deiv fecha: 26-08-2007 a las 00:53:53.
Responder Con Cita
  #2  
Antiguo 27-06-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 27-06-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Smile

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:
Empezado por eduarcol
A estas alturas crei que habias solucionado el problema
Vaya, ni mi Papá me llamó la atención así

Cita:
Empezado por eduarcol
cualquier duda comentalo, porq parece que has perdido el hilo
Lo dije en muchas ocasiones soy audodidacta, por eso me considero Novato en Delphi, no soy ni Informático ni estudié Programación, todo aprendo desde Internet y de los Foros, y practico con Delphi de vez en cuando, cuando es necesario programar algo que me parece interesante y ahí me vienen las dudas . Sobre SQL, para mi es todo nuevo, no parece difícil el lenguaje pero se requiere su tiempo para estudiarlo y conocer sus instrucciones.

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:
Empezado por Deiv
¿Por qué la línea:
if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then
NO TRABAJA IGUAL QUE:
if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)= -1) then

Última edición por Deiv fecha: 28-06-2007 a las 16:19:28.
Responder Con Cita
  #4  
Antiguo 27-06-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 01-08-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Bueno mas vale tarde que nunca dicen , me he respondido a mi mismo, por si a alguien le interesa:
Cita:
Empezado por Deiv
¿Por qué la línea:
Código Delphi [-]
if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then
NO TRABAJA IGUAL QUE:
Código Delphi [-]
if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)= -1) then
Código Delphi [-]
 
with ADOQuery1 do
  begin
    first;
    while not eof do
      begin
          if (B.IndexOf(FieldByName('Tipo').AsString)=-1) then
            begin
              B.Add(FieldByName('Tipo').AsString); 
              A[x]:=FieldByName('Tipo').AsString;
              inc(x);
            end;
        next;
      end;
  end;
THis is end.
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

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


La franja horaria es GMT +2. Ahora son las 14:50: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
Copyright 1996-2007 Club Delphi