Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ayuda con salida de indices (https://www.clubdelphi.com/foros/showthread.php?t=74675)

danielmj 04-07-2011 15:53:32

ayuda con salida de indices
 
hola, no se si es el sitio adecuando, asi que por si acaso, mis disculpas..


vereis estoy intentando llenar un tlistview con todos los registros de una base de datos, el codigo en concreto es este:

Código Delphi [-]
lista:= listview1.Items.Add;
campo:= form1.adoTabla.IndexFields[1].AsString;   
for i:= 0 to form1.adotabla.RecordCount -1 do     
lista.SubItems.Add (campo)


el problema es que me da error de index out of bound -1 o algo similar, y de otro modo cuando le quito el for, añade el item en la segunda columna no en la primera.
La bd esta habierta por supuesto, y para mas detalles, la primera columna seria para los apellidos de los clientes, la segunda para el nombre y la tercera para el tinte de pelo que usa (es para una peluqueria de una amiga)

a ver si me echais una mano.
saludos.

ecfisa 04-07-2011 17:49:36

Hola.

Un ejemplo de como podrías implementarlo:
Código Delphi [-]
...
var
  ListItem: TListItem;
  ListColumn: TListColumn;
  i: Integer;
begin 
  ListView1.ViewStyle:= vsReport;
  ListView1.Columns.Clear;
  ListColumn:= ListView1.Columns.Add;
  ListView1.Columns[0].Width:= 0;
  for i:= 0 to ADOTable.FieldCount -1 do
  begin
    ListColumn:= ListView1.Columns.Add;
    ListColumn.Caption:= ADOTable.Fields[i].FieldName;
  end;
  ADOTable.First;
  while not ADOTable.Eof do
  begin
    with ListView1.Items.Add do
      for i:= 0 to ADOTable.FieldCount -1 do
        SubItems.Add(ADOTable.Fields[i].AsString);
    ADOTable.Next;
  end;
end;

Saludos.

danielmj 04-07-2011 20:01:22

muchas gracias ecfisa,

esto era lo que necesitaba, aunque esto tiene que hacerlo cuando una consulta SQL de vuelva los resultados de una busqueda.

Por otra parte, pones esto:
Código Delphi [-]
listview1.columns[0].with:= 0;

Pero yo quiero que las columnas tengan el ancho exacto de 150, si cambio el 0 por el 150, lo que hace es crear una primera columna con ese ancho y a continuacion, 3 columnas mas con el ancho minimo marcado supongo por el .with:= 0

No se como arreglar esto.

un saludo y gracias.

ecfisa 04-07-2011 23:34:18

Hola.

Código Delphi [-]
var
  ListItem: TListItem;
  ListColumn: TListColumn;
  i: Integer;
begin
  ListView1.ViewStyle:= vsReport;
  ListView1.Columns.Clear;
  ListColumn:= ListView1.Columns.Add;
  ListView1.Columns[0].Width:= 0; //Ocultar columna 0
  for i:= 0 to ADOTable.FieldCount -1 do
  begin
    ListColumn:= ListView1.Columns.Add;
    ListColumn.Width:= 150; // <- Aqui le das el ancho de 150 a las columnas
    ListColumn.Caption:= ADOTable.Fields[i].FieldName;
  end;
  ADOTable.First;
  while not ADOTable.Eof do
  begin
    with ListView1.Items.Add do
      for i:= 0 to ADOTable.FieldCount -1 do
        SubItems.Add(ADOTable.Fields[i].AsString);
    ADOTable.Next;
  end;
end;

En cuanto a traerlo de una consulta, sólo debes cambiar el TADOTable por un TADOQuery. Yo usé una tabla por que en el código de tu primer mensaje:
Código Delphi [-]
campo:= form1.adoTabla.IndexFields[1].AsString;   
for i:= 0 to form1.adotabla.RecordCount -1 do
Estas usando una tabla y no una consulta.

Saludos.

danielmj 05-07-2011 10:07:11

hola ecfisa,

muchas gracias por la ayuda, la verdad es que hacia casi 2 años que no hacia nada de esto y ahora me salido este programita y claro, me veo en la situacion de aver olvidado muchas cosas, pero que a medida que se va desarrolando el codigo empiezo a recordar.

Por otra parte, la idea de la cosulta es por que se realizaran dos tipos de busquedas de clientes, todos aquellos cuyo apellidos empiecen por una letra determinada y contenida en un combobox o por el apellido completo.

Puede ser algo asi...
Código
Código SQL [-]
SELECT CLIENTE 
FROM TABLA1 
WHERE APELLIDO LIKE "S*"


mas o menos. ahora mirare como implementarlo en el codigo.

un saludo y muchisimas gracias.

danielmj 05-07-2011 11:09:08

hola, a ver si sabes por que me tira el error...


Código Delphi [-]
adoquery1.DataSource:= form1.dtSource;
  AdoQuery1.Close;
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Add ('Select Apellidos, Nombre, Tinte');
  AdoQuery1.SQL.Add ('FROM database.mdb');
  AdoQuery1.SQL.Add ('WHERE Apellido like ' + combobox1.text);
  AdoQuery1.Open;

  ListView1.ViewStyle:= vsReport;
  ListView1.Columns.Clear;
  ListColumn:= ListView1.Columns.Add;
  ListView1.Columns[0].Width:= 0;
  for i:= 1 to adoquery1.FieldCount -3 do
  begin
    ListColumn:= ListView1.Columns.Add;
    ListColumn.Width:= 160;
    ListColumn.Caption:= adoquery1.Fields[i].FieldName;
  end;
  adoquery1.First;
  while not adoquery1.Eof do
  begin
    with ListView1.Items.Add do
      for i:= 1 to adoquery1.FieldCount -3 do
        SubItems.Add(adoquery1.Fields[i].AsString);
        adoquery1.Next;
  end;

El error lo da en la linea del
Código SQL [-]
FROM database.mdb
dice que hay un error de sintaxis.

A ver si puedes ayudarme ecfisa por que creo que el from esta bien puesto. Y la base de datos se encuentra en el mismo directorio que la aplicacion.

saludos.

danielmj 05-07-2011 11:40:32

hola ahora el error lo da en la siguiente linea

Código SQL [-]
AdoQuery1.SQL.Add ('WHERE APELLIDOS LIKE '+combobox1.text+'*');

sigue dando da error de sintaxis, sin embargo en access, la sintaxis:

Código SQL [-]
SELECT Tabla1.[APELLIDOS], Tabla1.[NOMBRE], Tabla1.[Tinte] FROM Tabla1 WHERE TABLA1.APELLIDOS Like "S*";
da el resultado esperado.

saludos y echame el cable tio/a :)
gracias.

Lepe 05-07-2011 13:05:37

claro es que las comillas simples te están confundiendo.


Código Delphi [-]
AdoQuery1.SQL.Add ('WHERE APELLIDOS LIKE '+QuotedStr(combobox1.text+'*'));

danielmj 05-07-2011 15:02:55

hola, gracias por la ayuda, ahora si que si XDDD

de todos modos, ahora no me devuelve nada en el listview, lo deja en blanco y estoy seguro de que hay registros que empiezan por la letra "s" por ejemplo. Pero voy a comerme un poco el coco antes de gritar pidiendo auxilio xdd

saludos y gracias.

Lepe 05-07-2011 19:21:26

s minúscula o mayúscula...

danielmj 05-07-2011 19:26:35

hola lepe,

nada solucionado, ya va corriendo, faltan algunas cosillas como los mensajes de aviso en caso de borrar registros.
El problema ahora es otro, que no me lo han dicho hasta ahora cuando ya estaba todo acabado practimante, resulta que la aplicacion la quiere para un ordenador que le ha llegado, pero ese ordenador corre android, asi que ahora si que no tengo ni idea de como arreglar esto. He buscado algun emulador que corra aplicaciones windows en android pero no encuentro nada.

asi que ya ves.....

un saludo y gracias.

Casimiro Noteví 05-07-2011 19:46:21

:D:D:D no me río de tí, me río de las tonterías que hacen algunos jefes ignorantes.
En principio, no puedes ejecutar ese programa salvo con algún emulador, pero además la base de datos, los componentes, etc.
Resumiendo, en principio, simplemente, no se puede hacer.

danielmj 05-07-2011 20:00:04

hola, la cara que se me quedo fue de a cuadros, y me lo dicen ahora, las bases de datos era otra de las cosas que me tenian mosqueado por el tema android. Asi que na, trabajo y tiempo perdido.

Seguramente la acabe, pero ya por mi mismo, no me gusta dejar programas a medio terminar.
saludos.


La franja horaria es GMT +2. Ahora son las 13:01:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi