Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Resultado del count(*) en label (https://www.clubdelphi.com/foros/showthread.php?t=82729)

giantonti 07-04-2013 18:06:11

Resultado del count(*) en label
 
buen dia foro
Estoy tratando de hacer un evento desde un timer, y lo que quiero que cuentes los registros de una tabla que cumplan con la condicion que yo le índigo y que estos resultados se muestren en un label.
lo estoy haciendo de esta forma pero me da error.
Código SQL [-]
     adoQuery1.Close;
      adoQuery1.Sql.Clear;
      LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus = '+'Abierto');
      adoQuery1.Open;

si alguien ya ha pasado por eso agradeceria su ayuda.

ecfisa 07-04-2013 18:40:01

Hola giantonti.

En principio a tu sentencia SQL le falta especificar la tabla de la cuál se obtendrá la información.
Código SQL [-]
SELECT (columna o funcion)
FROM  TABLA  /* falta */
WHERE (condicion)

Saludos.

beginner01 07-04-2013 19:11:11

Cita:

Empezado por giantonti (Mensaje 458212)
buen dia foro
Estoy tratando de hacer un evento desde un timer, y lo que quiero que cuentes los registros de una tabla que cumplan con la condicion que yo le índigo y que estos resultados se muestren en un label.
lo estoy haciendo de esta forma pero me da error.
Código SQL [-]
     adoQuery1.Close;
      adoQuery1.Sql.Clear;
      LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus = '+'Abierto');
      adoQuery1.Open;

si alguien ya ha pasado por eso agradeceria su ayuda.

Hola.

Ademas de faltarte el nombre de la tabla como comenta ecfisa también en tu condición pareces estar evaluando una cadena la cual debería de estar entre comillas (''), pero como lo estas haciendo te saldrá sin ellas
y daría error.

Código Delphi [-]
      LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus = '+'Abierto');

en la parte en rojo estas según lo que veo debería ser.

Código Delphi [-]
      LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus= '+'''Abierto''');

Te quedaría algo así
Código SQL [-]
SELECT COUNT(*) AS Expr1 [from [TuTabla]]  where estatus= 'Abierto'

En la parte en azul estas asignando un entero a una propiedad de tipo string lo que te dará error y no queda claro que persigues con esa parte.

giantonti 07-04-2013 19:14:12

Cita:

Empezado por ecfisa (Mensaje 458214)
Hola giantonti.

En principio a tu sentencia SQL le falta especificar la tabla de la cuál se obtendrá la información.
Código SQL [-]
SELECT (columna o funcion)
FROM  TABLA  /* falta */
WHERE (condicion)

Saludos.

la sentencia ya posee la tabla que esta dentro del adoquery1, para entender mejor te envio la sentencia modificada talves con eso podra ayudarme.

Código Delphi [-]
TABLA.Close;
      TABLA.Sql.Clear;
      LabelSol.Text := TABLA.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus = '+'Abierto');
      TABLA.Open;

giantonti 07-04-2013 19:28:36

Cita:

Empezado por beginner01 (Mensaje 458215)
Hola.

Ademas de faltarte el nombre de la tabla como comenta ecfisa también en tu condición pareces estar evaluando una cadena la cual debería de estar entre comillas (''), pero como lo estas haciendo te saldrá sin ellas
y daría error.

Código Delphi [-]
      LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus = '+'Abierto');

en la parte en rojo estas según lo que veo debería ser.

Código Delphi [-]
      LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
                        'where estatus= '+'''Abierto''');

Te quedaría algo así
Código SQL [-]
SELECT COUNT(*) AS Expr1 [from [TuTabla]]  where estatus= 'Abierto'

En la parte en azul estas asignando un entero a una propiedad de tipo string lo que te dará error y no queda claro que persigues con esa parte.

Copio esta sentencia talcual como la pasaste y no funciona, talvez aun le faltara algun punto o parentesis en algun lado. Ha! no mencione al principio que soy novato en la materia.

giantonti 07-04-2013 19:35:27

lo probe de esta forma y cuando lo ejecuto me da un error 'Sintaxis incorecta cerca de '.'

Código Delphi [-]
adoQuery1.Close;
      adoQuery1.Sql.Clear;
      adoQuery1.Sql.Add('SELECT COUNT(*) AS '+'laLabel1.text+' +
                         'from incidencia' +
                         'where estatus= '+'''Abierto''');
      adoQuery1.Open;

y colocandola asi me da un error que dice: [dcc32 Error] fromPrincipal.pas(105): E2010 Incompatible types: 'string' and 'Integer'

[delphi] adoQuery1.Close;
adoQuery1.Sql.Clear;
LabelSol.Text := adoQuery1.Sql.Add('SELECT COUNT(*) AS Expr1' +
'from incidencia' +
'where estatus= '+'''Abierto''');
adoQuery1.Open;[delphi]

beginner01 07-04-2013 19:43:31

Cita:

Empezado por giantonti (Mensaje 458218)
lo probe de esta forma y cuando lo ejecuto me da un error 'Sintaxis incorecta cerca de '.'

Código Delphi [-]
adoQuery1.Close;
      adoQuery1.Sql.Clear;
      adoQuery1.Sql.Add('SELECT COUNT(*) AS '+'laLabel1.text+' +
                         'from incidencia' +
                         'where estatus= '+'''Abierto''');
      adoQuery1.Open;

Prueba así.

Código Delphi [-]
adoQuery1.Close;
      adoQuery1.Sql.Clear;
      adoQuery1.Sql.Add('SELECT COUNT(*) AS '+laLabel1.Caption +
                           ' from incidencia' +
                           ' where estatus= '+'''Abierto''');
      adoQuery1.Open;
{
Para ver la cantidad de registro puedes poner.
  Label1.Caption := adoQuery1.Fields[0].AsString;
}


Si te da un error escríbelo en el mensaje.

ecfisa 07-04-2013 20:16:59

Cita:

Empezado por giantonti (Mensaje 458216)
la sentencia ya posee la tabla que esta dentro del adoquery1, para entender mejor te envio la sentencia modificada talves con eso podra ayudarme.

Hola.

Eso no tiene ninguna implicancia ya que al asignarle un nuevo valor a la propiedad Text, la sentencia anterior es sobreescrita.

Basándome en el código de tu primer mensaje, proba de este modo:
Código Delphi [-]
 with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT COUNT(*)');
    SQL.Add('FROM NOMBRE_DE_TU_TABLA AS EXPR1'); // (*)
    SQL.Add('WHERE ESTATUS = ''Abierto''');
    Open;
  end;
(*) Reemplaza "NOMBRE_DE_TU_TABLA" por el nombre de tu tabla


Saludos.

giantonti 07-04-2013 20:37:49

gracias por tu pronta respuesta coloque tu sugerencia y me da el siguiente error : AdoQuery1:field 'id' Not Faund. esta haciendo referencia a una columna de la tabla. El valor que arroje este resultado del count debe ir en un label y no tengo idea de como hacerlo.

ecfisa 07-04-2013 20:45:21

Cita:

Empezado por giantonti (Mensaje 458221)
El valor que arroje este resultado del count debe ir en un label y no tengo idea de como hacerlo.

Así tiene que mostrar el resultado en el TLabel:
Código Delphi [-]
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT COUNT(*) AS EXPR1');// (*)
    SQL.Add('FROM NOMBRE_DE_TU_TABLA'); 
    SQL.Add('WHERE ESTATUS = ''Abierto''');
    Open;
    Label1.Caption := FieldByName('EXPR1').AsString;
 end;
(*) Aprovecho a rectificar un error del código que te puse en el mensaje #8 (lo hice al vuelo, disculpas :o)

Saludos.

giantonti 07-04-2013 20:51:34

no hay nada que disculpar amigo, agradezco tu apoyo. Aun sigue dandome el mismo error 'id'

ecfisa 07-04-2013 20:53:19

Cita:

Empezado por giantonti (Mensaje 458223)
no hay nada que disculpar amigo, agradezco tu apoyo. Aun sigue dandome el mismo error 'id'

Pero no existe 'ID' en la sentencia que te puse...

¿ Podrías poner textualmente la sentencia SQL que estas usando y lo mismo con el mensaje de error ?

Saludos.

Casimiro Notevi 07-04-2013 22:46:53

Cita:

Empezado por giantonti (Mensaje 458221)
gracias por tu pronta respuesta coloque tu sugerencia y me da el siguiente error : AdoQuery1:field 'id' Not Faund. esta haciendo referencia a una columna de la tabla. El valor que arroje este resultado del count debe ir en un label y no tengo idea de como hacerlo.

No tenemos bola mágica para adivinar. Copia y pega tu consulta y también el mensaje de error.


La franja horaria es GMT +2. Ahora son las 11:47:22.

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