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)
-   -   Fieldbyname ADOTable (https://www.clubdelphi.com/foros/showthread.php?t=68298)

leian1306 07-06-2010 00:21:27

Fieldbyname ADOTable
 
Buenas tardes!
Tengo una aplicación con un Data Module (DM) que tiene varias tablas y una que se llama "tabla_ejercicios" con varios campos.

Yo tengo esta función:

Function CantEjerciciosPublicados():integer;
var
total,POS:integer;
begin
total:=0;
POS:=DM.tabla_ejercicios.Fieldbyname('idejercicio').AsInteger;
DM.tabla_ejercicios.First;
while NOT(DM.tabla_ejercicios.Eof) do begin
if(DM.tabla_ejerciciospublicadoenpractica.Value=TRUE)then
Inc(total);
DM.tabla_ejercicios.Next;
end;
DM.tabla_ejercicios.Locate('idejercicio',POS,[]);
RESULT:=total;
end;


La tabla_ejercicios tiene un campo "publicadoenpractica" con valores TRUE o FALSE, y en la línea esta: if(DM.tabla_ejerciciospublicadoenpractica.Value=TRUE)then
... por alguna razón no entra nunca en el IF,siempre lo saltea,tengo abierta la base de Access y efectivamente tiene valores en TRUE,de manera q tendria q entrar en ciertos momentos.
El campo de la tabla tiene la propiedad "DisplayValues=Si;No",para que muestre Si en lugar de TRUE y No en lugar de FALSE. Intente incluso haciendo lo siguiente: if(DM.tabla_ejercicios.Fieldbyname('publicadoenpractica').AsString='Si')then
...pero tampoco funciona.

Si alguien me pudiera decir que puede llegar a estar andando mal se lo agradecería muchísimo. Saludos!

Caral 07-06-2010 00:35:06

Hola
Aveces el (true, false) en access hace lo que quiere, es mejor un (N, Y) o (1, 2).
Puede ser que salte por la falta de un begin, intentalo asi:
Código Delphi [-]
Function CantEjerciciosPublicados():integer;
var
total,POS:integer;
begin
total:=0;
POS:=DM.tabla_ejercicios.Fieldbyname('idejercicio').AsInteger;
DM.tabla_ejercicios.First;
while NOT(DM.tabla_ejercicios.Eof) do begin
if DM.tabla_ejerciciospublicadoenpractica.Value = TRUE then
begin
Inc(total);
DM.tabla_ejercicios.Next;
end;
end;
DM.tabla_ejercicios.Locate('idejercicio',POS,[]);
RESULT:=total;
end;
Saludos

defcon1_es 07-06-2010 18:36:23

Prueba con esto:
Código Delphi [-]
Function CantEjerciciosPublicados():integer;
var total,POS:integer;
begin
  total:=0;
  POS:=DM.tabla_ejercicios.Fieldbyname('idejercicio').AsInteger;
  DM.tabla_ejercicios.First;
  while NOT(DM.tabla_ejercicios.Eof) do 
  begin
    if DM.tabla_ejercicios.FieldByName('publicadoenpractica').AsInteger = 1 then
    begin
      Inc(total);
      DM.tabla_ejercicios.Next;
    end;
  end;
  DM.tabla_ejercicios.Locate('idejercicio',POS,[]);
  RESULT:=total;
end;


La franja horaria es GMT +2. Ahora son las 05:35:59.

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