Saber se a tabela está vazia

Delphi

29/04/2005

Alguém sabe como verificar, via código, se uma tabela Paradox, criada pelo Database Desktop está vazia?

VLW


Sérgio Gobbo

Sérgio Gobbo

Curtidas 0

Respostas

Raserafim

Raserafim

29/04/2005

você pode utilizar a função RecordCount da query ou da table, e se retornar o valor zero é pq está vazia.
if Query.RecordCount = 0 then
  showmessage(´tabela vazia´);



GOSTEI 0
Otto

Otto

29/04/2005

você pode utilizar a função RecordCount da query ou da table, e se retornar o valor zero é pq está vazia.
if Query.RecordCount = 0 then
  showmessage(´tabela vazia´);


pra saber se esta vazia, eu napo uso mais recordcount, pq em alguns casos(bde+firebird), mesmo tendo registro o resultado é = -1

é bom usar o isEmpty

if Query.isempty then
vazia


:wink:


GOSTEI 0
Lorde_morte.

Lorde_morte.

29/04/2005

Esta função sempre retorna true.

Como resolver este problema?

function TBuscaFrame.AchouAlgo(Tabela:TDataSet): Boolean;
begin
  RESULT:= NOT TABELA.IsEmpty;
end;


A falha do IsEmpty esta matando meu FrameWork. :cry:


GOSTEI 0
Otto

Otto

29/04/2005

Esta função sempre retorna true. Como resolver este problema?
function TBuscaFrame.AchouAlgo(Tabela:TDataSet): Boolean;
begin
  RESULT:= NOT TABELA.IsEmpty;
end;
A falha do IsEmpty esta matando meu FrameWork. :cry:



ja tentou assim:

function TBuscaFrame.AchouAlgo(Tabela:TDataSet): Boolean;
begin
  Tabela.FetchAll; // linha incluida
  RESULT:= NOT TABELA.IsEmpty;
end;


:?:


GOSTEI 0
Martins

Martins

29/04/2005

Alguém sabe como verificar, via código, se uma tabela Paradox, criada pelo Database Desktop está vazia? VLW


Tente assim:

  Tabela.Close;
  If Tabela.IsEmpty then
     ShowMessage(´Tabela vazia...´)
  else
     ShowMessage(´Contem registros...´);
...


Boa sorte


GOSTEI 0
Nerdex

Nerdex

29/04/2005

Inclua o camando Table.First antes do teste com Table.IsEmpty, pq se você tiver uma tabela que contenha registros e estiver apontando para o último registro; Table.IsEmprty retornará true - por isso : [b:d51cd7b2a2]Table.First antes de chamar Table.IsEmpty[/b:d51cd7b2a2]

:wink:


GOSTEI 0
Martins

Martins

29/04/2005

Inclua o camando Table.First antes do teste com Table.IsEmpty, pq se você tiver uma tabela que contenha registros e estiver apontando para o último registro; Table.IsEmprty retornará true - por isso : [b:06737e3e3b]Table.First antes de chamar Table.IsEmpty[/b:06737e3e3b] :wink:


Valew complemento [b:06737e3e3b]Nexdex[/b:06737e3e3b], quanto tempo meu nobre colega, um prazer tê-lo participando desse tópico.

Fica assim então.

Tabela.Close; 
Tabela.First;
  If Tabela.IsEmpty then 
     ShowMessage(´Tabela vazia...´) 
  else 
     ShowMessage(´Contem registros...´); 
... 



Boa sorte!!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

29/04/2005

Inclua o camando Table.First antes do teste com Table.IsEmpty, pq se você tiver uma tabela que contenha registros e estiver apontando para o último registro; Table.IsEmprty retornará true - por isso : [b:6a1429e8d0]Table.First antes de chamar Table.IsEmpty[/b:6a1429e8d0] :wink:


desculpe, mas essa informação não procede. o IsEmpty funciona estando o ponteiro no primeiro ou no último registro. Talvez tenha sido feita confusão com o Eof. Este sim necessita de estar no primeiro registro para não retornar true (a menos, é claro, que haja apenas 1 registro).

Por que [b:6a1429e8d0]não[/b:6a1429e8d0] usar RecordCount nesse caso?
Porque Recordcount irá te retornar o número de registros. Obviamente se retornar um número maior que 0 (zero) é porque há registros, porém há um custo: ele varre toda a tabela para contar o número de registros abertos. Se a tabela tiver 2000 registros, ele irá do primeiro ao último, somando até retornar 2000. isso seria necessário se você quisesse saber quantos registros há na tabela, para montar um gauge ou uma barra de progresso.
no caso de apenas querer saber se há algum registro, use IsEmpty, porque se houver ao menos um registro (seja o primeiro, ou último, ou um intermediário) a função retorna imediatamente, não precisando varrer o dataset.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

29/04/2005

[quote:fe28410c8f=´NerdeX´]Inclua o camando Table.First antes do teste com Table.IsEmpty, pq se você tiver uma tabela que contenha registros e estiver apontando para o último registro; Table.IsEmprty retornará true - por isso : [b:fe28410c8f]Table.First antes de chamar Table.IsEmpty[/b:fe28410c8f] :wink:


Valew complemento [b:fe28410c8f]Nexdex[/b:fe28410c8f], quanto tempo meu nobre colega, um prazer tê-lo participando desse tópico.

Fica assim então.

Tabela.Close; 
Tabela.First;
  If Tabela.IsEmpty then 
     ShowMessage(´Tabela vazia...´) 
  else 
     ShowMessage(´Contem registros...´); 
... 



Boa sorte!![/quote:fe28410c8f]

Só uma correção no código do nosso colega Martins: você não conseguirá saber nada sobre uma tabela fechada. na verdade você deveria verificar se a tabela está aberta, e não fechá-la.
function TBuscaFrame.AchouAlgo(Tabela:TDataSet): Boolean; 
begin
  if not Tabela.Active then
    try
      Tabela.Open;
    except
    end;

  try
    result := not Tabela.IsEmpty; 
  except
    result := false;
  end;
end;



GOSTEI 0
Martins

Martins

29/04/2005

[quote:69cbe29d0e=´Martins´][quote:69cbe29d0e=´NerdeX´]Inclua o camando Table.First antes do teste com Table.IsEmpty, pq se você tiver uma tabela que contenha registros e estiver apontando para o último registro; Table.IsEmprty retornará true - por isso : [b:69cbe29d0e]Table.First antes de chamar Table.IsEmpty[/b:69cbe29d0e] :wink:


Valew complemento [b:69cbe29d0e]Nexdex[/b:69cbe29d0e], quanto tempo meu nobre colega, um prazer tê-lo participando desse tópico.

Fica assim então.

Tabela.Close; 
Tabela.First;
  If Tabela.IsEmpty then 
     ShowMessage(´Tabela vazia...´) 
  else 
     ShowMessage(´Contem registros...´); 
... 



Boa sorte!![/quote:69cbe29d0e]

Só uma correção no código do nosso colega Martins: você não conseguirá saber nada sobre uma tabela fechada. na verdade você deveria verificar se a tabela está aberta, e não fechá-la.
function TBuscaFrame.AchouAlgo(Tabela:TDataSet): Boolean; 
begin
  if not Tabela.Active then
    try
      Tabela.Open;
    except
    end;

  try
    result := not Tabela.IsEmpty; 
  except
    result := false;
  end;
end;
[/quote:69cbe29d0e]

Valew pelo observação e correção [b:69cbe29d0e]emerson.en[/b:69cbe29d0e], foi falta de atenção, não posso saber o q tem em um armário se ele estiver fechado :wink:
[b:69cbe29d0e]
Corrigindo: [/b:69cbe29d0e][b:69cbe29d0e][color=red:69cbe29d0e]Nexdex[/color:69cbe29d0e][/b:69cbe29d0e] para [b:69cbe29d0e][color=blue:69cbe29d0e]Nerdex[/color:69cbe29d0e][/b:69cbe29d0e]

valew galera!! :D


GOSTEI 0
Nerdex

Nerdex

29/04/2005

[quote:a7a16b7038=´emerson.en ligado´]...Talvez tenha sido feita confusão com o Eof...[/quote:a7a16b7038]

Concordo em gênero, número e grau - Desculpa a falha ... aí ...: 8)


GOSTEI 0
Facc

Facc

29/04/2005

[quote:dfbba0c5f3=´emerson.en ligado´]...Talvez tenha sido feita confusão com o Eof...


Concordo em gênero, número e grau - Desculpa a falha ... aí ...: 8)[/quote:dfbba0c5f3]


Revivendo o tópico...

Estou tendo problemas com [b:dfbba0c5f3]DMDados.TControleReceber.IsEmpty[/b:dfbba0c5f3]
pois minha tabela possui registros, e mesmo assim ele esta trazendo que está vazia, tentei com [b:dfbba0c5f3]DMDados.TControleReceber.RecordCount = 0[/b:dfbba0c5f3], porém tbm está trazendo valor 0 (zero). Já coloquei o [i:dfbba0c5f3][b:dfbba0c5f3]First, Refresh, Open, Close[/b:dfbba0c5f3][/i:dfbba0c5f3], mas sem resultado. O que posso fazer pra resolver?


GOSTEI 0
Paullsoftware

Paullsoftware

29/04/2005

[quote:d8fd1fd047=´NerdeX´][quote:d8fd1fd047=´emerson.en ligado´]...Talvez tenha sido feita confusão com o Eof...


Concordo em gênero, número e grau - Desculpa a falha ... aí ...: 8)[/quote:d8fd1fd047]


Revivendo o tópico...

Estou tendo problemas com [b:d8fd1fd047]DMDados.TControleReceber.IsEmpty[/b:d8fd1fd047]
pois minha tabela possui registros, e mesmo assim ele esta trazendo que está vazia, tentei com [b:d8fd1fd047]DMDados.TControleReceber.RecordCount = 0[/b:d8fd1fd047], porém tbm está trazendo valor 0 (zero). Já coloquei o [i:d8fd1fd047][b:d8fd1fd047]First, Refresh, Open, Close[/b:d8fd1fd047][/i:d8fd1fd047], mas sem resultado. O que posso fazer pra resolver?[/quote:d8fd1fd047]
desculpe a iginorância, mais vc já tentou contar os registros olhando pra eles???
tipo coloque um dbgrid abra a tabela, dê um last depois pessa pra ver os o total de registros...

no botão faça:
tabela.open;
tabela.last;
if tabela.isempty then caption := ´Tabela Vazia´
else 
caption := inttostr(tabela.recordcount);

é fazendo testes que vamos descobrir onde estão realmente os problemas... será que vc vai ta vendo os dados e mesmo assim vai está retornando ´0´ zero!! :wink:


GOSTEI 0
Facc

Facc

29/04/2005

[quote:e9dde374b4=´Facc´][quote:e9dde374b4=´NerdeX´][quote:e9dde374b4=´emerson.en ligado´]...Talvez tenha sido feita confusão com o Eof...


Concordo em gênero, número e grau - Desculpa a falha ... aí ...: 8)[/quote:e9dde374b4]


Revivendo o tópico...

Estou tendo problemas com [b:e9dde374b4]DMDados.TControleReceber.IsEmpty[/b:e9dde374b4]
pois minha tabela possui registros, e mesmo assim ele esta trazendo que está vazia, tentei com [b:e9dde374b4]DMDados.TControleReceber.RecordCount = 0[/b:e9dde374b4], porém tbm está trazendo valor 0 (zero). Já coloquei o [i:e9dde374b4][b:e9dde374b4]First, Refresh, Open, Close[/b:e9dde374b4][/i:e9dde374b4], mas sem resultado. O que posso fazer pra resolver?[/quote:e9dde374b4]
desculpe a iginorância, mais vc já tentou contar os registros olhando pra eles???
tipo coloque um dbgrid abra a tabela, dê um last depois pessa pra ver os o total de registros...

no botão faça:
tabela.open;
tabela.last;
if tabela.isempty then caption := ´Tabela Vazia´
else 
caption := inttostr(tabela.recordcount);

é fazendo testes que vamos descobrir onde estão realmente os problemas... será que vc vai ta vendo os dados e mesmo assim vai está retornando ´0´ zero!! :wink:[/quote:e9dde374b4]

já contei, com o mesmo componente inclusive (em questão), tem 879 registros, porém mesmo assim está trazendo [b:e9dde374b4]recordcount = 0[/b:e9dde374b4]


GOSTEI 0
Facc

Facc

29/04/2005

[quote:168d90d82d=´paullsoftware´][quote:168d90d82d=´Facc´][quote:168d90d82d=´NerdeX´][quote:168d90d82d=´emerson.en ligado´]...Talvez tenha sido feita confusão com o Eof...


Concordo em gênero, número e grau - Desculpa a falha ... aí ...: 8)[/quote:168d90d82d]


Revivendo o tópico...

Estou tendo problemas com [b:168d90d82d]DMDados.TControleReceber.IsEmpty[/b:168d90d82d]
pois minha tabela possui registros, e mesmo assim ele esta trazendo que está vazia, tentei com [b:168d90d82d]DMDados.TControleReceber.RecordCount = 0[/b:168d90d82d], porém tbm está trazendo valor 0 (zero). Já coloquei o [i:168d90d82d][b:168d90d82d]First, Refresh, Open, Close[/b:168d90d82d][/i:168d90d82d], mas sem resultado. O que posso fazer pra resolver?[/quote:168d90d82d]
desculpe a iginorância, mais vc já tentou contar os registros olhando pra eles???
tipo coloque um dbgrid abra a tabela, dê um last depois pessa pra ver os o total de registros...

no botão faça:
tabela.open;
tabela.last;
if tabela.isempty then caption := ´Tabela Vazia´
else 
caption := inttostr(tabela.recordcount);

é fazendo testes que vamos descobrir onde estão realmente os problemas... será que vc vai ta vendo os dados e mesmo assim vai está retornando ´0´ zero!! :wink:[/quote:168d90d82d]

já contei, com o mesmo componente inclusive (em questão), tem 879 registros, porém mesmo assim está trazendo [b:168d90d82d]recordcount = 0[/b:168d90d82d][/quote:168d90d82d]



Resolvido. O programador que fez o sistema esqueceu de colocar as seguintes linhas antes da chamada...
       RefreshQuery( DMDados.TControleReceber, [´´], [´´] ); [b]function que dá refresh na query[/b]
        OrdenaQuery( DMDados.TControleReceber, [´DataVecto´] ); [b]function que ordena a query com o campo que se deseja[/b]
        DMDados.vfiltrocontasReceber:=´REC´;
        DMDados.TControleReceber.Filtered:=true;



GOSTEI 0
POSTAR