Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   que tiene que ver? (https://www.clubdelphi.com/foros/showthread.php?t=75392)

danielmj 19-08-2011 11:00:57

que tiene que ver?
 
hola,

el siguiente codigo de un procedimiento completo, repite en un componente checklistbox, el ultimo registro dos veces, el caso es que en la base de datos, hay 2 clientes cuyo primer apellido empieza por la letra 'S', hasta ahi bien, el codigo muestra esos dos clientes, pero en la misma base de datos o en la misma tabla, existen 3 clientes cuya primera letra del apellido es 'G' y entonces me repite el ultimo registro dos veces quedando algo asi...

GUTIERREZ XXXX
GFULANITO XXXX
GONZALEZ XXXX
GONZALEZ XXXX

Código Delphi [-]
procedure Tformulario1.sButton1Click(Sender: TObject);
begin
  lista2.Clear;
  adoquery1.DataSource:= dtSource;
  AdoQuery1.Close;
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Add ('Select APELLIDOS, NOMBRE');
  AdoQuery1.SQL.Add ('FROM tabla1');
  AdoQuery1.SQL.Add ('WHERE APELLIDOS LIKE ' +  QuotedStr(comboeliminar.text +'%'));
  AdoQuery1.Open;
  adoquery1.First;
  while not adoquery1.Eof do
  begin
      for i:= 0 to adoquery1.FieldCount -1 do
        BEGIN
          lista2.Items.Add((adoQuery1.FieldByName('APELLIDOS').AsString)+
          ' '+(AdoQuery1.FieldByName('NOMBRE').AsString));
          adoquery1.Next;
        END;
  end;
end;

¿Por que si hay 3 registros cuya primera letra del apellido sea la misma, se repite el ultimo hasta devolver 4 registros cuando en realidad deberia devolver 3?

saludos y gracias.

danielmj 19-08-2011 11:13:34

buenas,

solucionado, cambie el -1 del FOR por -2 y ya va bien.

saludos.

duilioisola 19-08-2011 11:29:20

Creo que lo de adoquery1.FieldCount es incorrecto.
FieldCount, se refiere a la cantidad de campos que tiene la tabla y no la cantidad de registros.
En realidad deberías utilizar adoquery1.RecordCount

Código Delphi [-]
    
procedure Tformulario1.sButton1Click(Sender: TObject);
begin
  lista2.Clear;
  adoquery1.DataSource:= dtSource;
  AdoQuery1.Close;
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Add ('Select APELLIDOS, NOMBRE');
  AdoQuery1.SQL.Add ('FROM tabla1');
  AdoQuery1.SQL.Add ('WHERE APELLIDOS LIKE ' +  QuotedStr(comboeliminar.text +'%'));
  AdoQuery1.Open;
  adoquery1.First;
  while not adoquery1.Eof do
  begin
      for i:= 0 to adoquery1.RecordCount -1 do
        BEGIN
          lista2.Items.Add((adoQuery1.FieldByName('APELLIDOS').AsString)+
          ' '+(AdoQuery1.FieldByName('NOMBRE').AsString));
          adoquery1.Next;
        END;
  end;
end;

ecfisa 19-08-2011 11:33:53

Hola danielmj.

Me alegra mucho que hayas solucionado tu problema y agradezco que nos hacercaras la solución.

Pero te hago una observación: que tiene que ver? (el título), con el problema que tenias ? :)

Te ruego que leas la guía de estilo, punto 8

Un saludo.

danielmj 19-08-2011 15:34:54

hola ecfisa que pasa amigo?

perdona si el titulo no fue el mas indicado, simplemente me referia a "¿que tiene que ver el numero de registros que haya para que el codigo haga una u otra cosa?" por eso puse el titulo.
Lo siento.

Y sobre lo que dices duilioisola, ahora lo voy a probar a ver si corre bien, gracias.
...

Acabo de probar ese cambio de linea y funciona perfectamente, mi solucion tambien, pero por estetica en el codigo me quedo con tu solucion, me gusta mas que poner ".FieldCount -2"

Saludos.

saludos y gracias por todo.

ecfisa 19-08-2011 16:55:16

Cita:

perdona si el titulo no fue el mas indicado
No tenés por que pedir disculpas, llevas poco tiempo en los foros y es totalmente razonable que desconozcas alguna norma ;)

Te explico, la razón de que pidamos titulos significativos, es por que se hace más sencillo para todos localizar las soluciones o responder a las consultas, que si tienen títulos sin relación con el problema.

Un saludo.:)

oscarac 19-08-2011 17:17:03

no es por estetica, sino porque es lo correcto... usar recordcount en lugar de fieldcount, uno cuenta los registros y el otro cuenta los campos...
otra cosita... mejor publica otra respuesta en lugar de editar la respuesta anterior.... eso puede provocar que nos perdamos en la evolucion del hilo..

saludos...

danielmj 20-08-2011 13:35:49

hola,

vale, asi lo hare osrac ;) y perdon si no manejo muy bien el foro.

saludos.


La franja horaria es GMT +2. Ahora son las 18:07:55.

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