Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Rellenar un ListBox con los registros de un campo de la BD (https://www.clubdelphi.com/foros/showthread.php?t=17223)

Nbull 29-12-2004 16:36:06

Rellenar un ListBox con los registros de un campo de la BD
 
Hola a todos y felices fiestas.

Tengo una aplicación que tabaja con adoquery y con una base de datos access, he puesto un ListBox y quiero que este se me rellene con los registros que halla el el campo poblacion y no se como hacerlo, por que no todos los registros tienen puesta la población y claro algunos de ellos la población es la misma y no quiero que se repitan.

¿Como puedo hacerlo?

Gracias de antemano y a pasar buenas fiestas.

Un Saludo;)

Neftali [Germán.Estévez] 29-12-2004 16:48:16

Cita:

Empezado por Nbull
...Tengo una aplicación que tabaja con adoquery y con una base de datos access, he puesto un ListBox y quiero que este se me rellene con los registros que halla el el campo poblacion y no se como hacerlo, por que no todos los registros tienen puesta la población y claro algunos de ellos la población es la misma y no quiero que se repitan.

(1) Ejecuta un consulta para obtener nombres únicos de las provincia; Para ello puedes utilizar el DISTINCT de SQL. Por ejemplo:

Código SQL [-]
 select distinct nombreProvincia from Provincia

Eso te debería devolver registros únicos (en todo caso 1 que te puede molestar con NULL).

(2) Haces un recorrido estandard por la consulta (WHILE not ADOQuery.EOF...) y los vas añadiendo al ListBox; En todo caso utiliza un IF para comprobar que no sean nulos... (prop. IsNull del Field)

Nbull 29-12-2004 17:11:15

Hola y gracias de nuevo Neftali por tu ayuda, tengo una duda, cuando tu pones:
Código SQL [-]
select distinct nombreProvincia from Provincia
En NombreProvincia que le paso, por que yo quiero crear esta funcion en el Oncreate del Form principal, y quiero que cuando se ejecute la aplicación ya salgan las poblaciones que hay en la BD en el ListBox.

No se si me he explicado bien, pero, espero que puedas aclararme la duda.

Neftali [Germán.Estévez] 29-12-2004 17:23:29

Cita:

Empezado por Nbull
...cuando tu pones:
Código SQL [-]
 select distinct nombreProvincia from Provincia
En NombreProvincia que le paso, por que yo quiero crear esta funcion en el Oncreate del Form principal, y quiero que cuando se ejecute la aplicación ya salgan las poblaciones que hay en la BD en el ListBox.

* Provincia es el nombre de la Tabla de provincias
* NombreProvincia es el nombre del campo de la tabla Provincia que quieres que aparezca en el ListBox

Nbull 30-12-2004 09:07:20

Neftali soy un pesao pero es que le he dado dos mil vueltas y no me deja ejecutar la aplicación, tengo el siguiente codigo:

Código Delphi [-]
procedure TForm7.FormCreate(Sender: TObject);
begin
 AdoQuery1.Active:=true;
 WHILE not AdoQuery1.EOF do
 begin
     AdoQuery1.SQL.Text:='SELECT distinct Poblacion FROM agenda';
     ListBox1.Items.Add(Dbaux.Field.Text);
 end;
end;

Hay veces que se me queda haciendo un bucle infinito con el While y no se me llega a ejecutar la aplicación y otras veces como es el caso del código que te he puesto más arriba me da un excepción.

Todo depende de como intente añadir al ListBox las poblaciones

DbAux es un DbEdit que lo he asociado al campo Poblacion del Adoquery1. Estoy atascado no se como seguir, a ver si lo consigo y dejo de molestar por que soy un pesao...:(

fjcg02 30-12-2004 11:28:46

Te falta el Next. Estás incluyendo en el Listbox siempre el mismo registro, por eso nunca termina el bucle.

procedure TForm7.FormCreate(Sender: TObject);
begin
AdoQuery1.Active:=true;
WHILE not AdoQuery1.EOF do
begin
AdoQuery1.SQL.Text:='SELECT distinct Poblacion FROM agenda';
ListBox1.Items.Add(Dbaux.Field.Text);
AdoQuery1.NEXT;

end;
end;

Espero que te sirva de ayuda.

Un saludo

Nbull 30-12-2004 11:55:11

Fjcg02 sigue sin funcionarme, me sigue saliendo la dichosa excepción, no se que podra ser pero lo tengo como me has dicho y nada que no se me ejecuta.


Gracias de todas formas por tu ayuda

fjcg02 30-12-2004 12:21:46

Código:

procedure TForm7.FormCreate(Sender: TObject);
begin
// Asigna la SQL y abre una sola vez, no cien ..
AdoQuery1.SQL.Add('SELECT distinct Poblacion FROM agenda');
AdoQuery1.Active:=true;
// recorre los registros
WHILE not AdoQuery1.EOF do
  begin
    // y asigna el valor de los campos de esa query que utilizas, y no otra
    ListBox1.Items.Add(AdoQuery1,Fields.FieldByName('Poblacion'.AsString);
    AdoQuery1.NEXT;
  end;
end;


Espero que te sirva de ayuda.

Un saludo

Nbull 30-12-2004 13:20:53

Fjcg02 muchas gracias ya lo he solucionado, tenia que sacar la consulta fuera del While.Pero, ahora como quito los registros que estan vacios, Neftalí me dijo que con la propiedad Isnull del Field pero como llamo a esa propiedad.

Muchisimas gracias a los dos por vuestra ayuda.

Un Saludo

Neftali [Germán.Estévez] 30-12-2004 13:25:45

Falta cerrar un paréntesis en:
Código Delphi [-]
 // y asigna el valor de los campos de esa query 
 // que utilizas, y no otra
 ListBox1.Items.Add(AdoQuery1,Fields.FieldByName('Poblacion').AsString);

y opcionalmente añadir el control para evitar un posible nulo, pero a ésto era a lo que yo me refería.


(Editado...)
NOTA: Veo que la aclaración llegó tarde... :D

Neftali [Germán.Estévez] 30-12-2004 13:28:59

Cita:

Empezado por Nbull
...Pero, ahora como quito los registros que estan vacios, Neftalí me dijo que con la propiedad Isnull del Field pero como llamo a esa propiedad.

Algo así debería funcionar.

Código Delphi [-]
  procedure TForm7.FormCreate(Sender: TObject);
 begin
 // Asigna la SQL y abre una sola vez, no cien ..
 AdoQuery1.SQL.Add('SELECT distinct Poblacion FROM agenda');
 AdoQuery1.Active:=true;
 // recorre los registros
 WHILE not AdoQuery1.EOF do
   begin
     // Si es vacío no lo añado
     if not (AdoQuery1,Fields.FieldByName('Poblacion').IsNull) then begin
       // y asigna el valor de los campos de esa query que utilizas, y no otra
       ListBox1.Items.Add(AdoQuery1,Fields.FieldByName('Poblacion').AsString);
     end;
     AdoQuery1.NEXT;
   end;
 end;

Nbull 30-12-2004 13:34:19

Neftalí muchisimas gracias ya he solucionado el problema pongo el código por si alguien que sea tan novato como yo lo necesita:

Código Delphi [-]
procedure TForm7.FormCreate(Sender: TObject);
begin
 AdoQuery1.SQL.Text:='SELECT distinct Poblacion FROM agenda';
 AdoQuery1.Active:=true;
 WHILE not AdoQuery1.EOF do
 begin
     If(Adoquery1.Fields.FieldByName('Poblacion').IsNull=false)Then
      begin
       ListBox1.Items.Add(Datasource3.DataSet.FieldByName('poblacion').AsString);
      end;
      AdoQuery1.Next;
 end;
end;
Un Saludo y muchas gracias:)


La franja horaria es GMT +2. Ahora son las 03:54:57.

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