Fórum problema ao retornar o numero de registro em uma tabela com o delphi #558972
06/07/2016
0
Bom dia, estou realizando a importação dos dados da tabela antiga para uma nova, preciso mostrar o número de registros de cada tabela e para isso eu implementei o seguinte código
LbGrupos.Caption:= inttostr(cont)+'. Grupos Ok!, Total '+inttostr(DtMdl.FDGruposNovo.RecordCount);
Na primeira iteração quando o banco está sendo migrado o código em questão realiza a contagem e me retorna o número correto, o problema ocorre na segunda iteração quando o banco já está migrado e o código me retorna apenas os 50 isso para todas as tabelas com mais de 50 registros (eu tenho batelas com mais de 500 mil registros), já nas tabelas com menos de 50 registro como é o caso de USUÁRIOS ele me retorna o valor correto.
segue o código de migração, é igual para todas as tabelas
try
lblStatus.Caption := 'Iniciando processo de sincronia... Aguarde....' ;
Application.ProcessMessages;
Sleep(0);
lblStatus.Caption := 'Sincronizando tabela Grupos...';
Application.ProcessMessages;
DtMdl.FDGruposVelho.Active := False; //BD ANTIGO QUE ENVIARÁ OS DADOS PARA O NOVO
DtMdl.FDGruposVelho.Active := True;
DtMdl.FDGruposVelho.First;
DtMdl.FDGruposNovo.Active := False;
DtMdl.FDGruposNovo.Active := True;
status := Ler_chave_reg('Tabelas','grupos', '', verifica_ini);
if status = 'OK' then
next
else
while not DtMdl.FDGruposVelho.Eof do
begin
DtMdl.FDGruposNovo.Insert;
DtMdl.FDGruposNovoGR_NUMERO.Value := DtMdl.FDGruposVelhoCODIGO.Value;
DtMdl.FDGruposNovoGR_GRUPO.Value := DtMdl.FDGruposVelhoNOME_GRUPO.Value;
DtMdl.FDGruposNovo.Post;
Grava_Chave_Reg('tabelas','grupos', 'OK', verifica_ini);
DtMdl.FDGruposVelho.Next;
end;
DtMdl.FB_DataBaseNew.CommitRetaining;
Sleep(0);
lblStatus.Caption := 'Sincronização tabela Grupos concluída.';
Inc(cont);
>> > LbGrupos.Caption:= inttostr(cont)+'. Grupos Ok!, Total '+inttostr(DtMdl.FDGruposNovo.RecordCount);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Application.ProcessMessages;
pbStatus.Position := pbStatus.Position + 1;
except
on E : Exception do
begin
DtMdl.FB_DataBaseNew.RollbackRetaining;
application.MessageBox(pchar('Problemas durante a migração dos dados' +#13+#13+ 'Descrição do erro: '+#13+#13+E.Message+#13+#13+'Tentativa de sincronização cancelada'), 'AVISO', mb_OK + MB_ICONERROR);
if DtMdl.FDGruposNovo.State = dsInsert then
DtMdl.FDGruposNovo.Cancel;
end;
end;
LbGrupos.Caption:= inttostr(cont)+'. Grupos Ok!, Total '+inttostr(DtMdl.FDGruposNovo.RecordCount);
Na primeira iteração quando o banco está sendo migrado o código em questão realiza a contagem e me retorna o número correto, o problema ocorre na segunda iteração quando o banco já está migrado e o código me retorna apenas os 50 isso para todas as tabelas com mais de 50 registros (eu tenho batelas com mais de 500 mil registros), já nas tabelas com menos de 50 registro como é o caso de USUÁRIOS ele me retorna o valor correto.
segue o código de migração, é igual para todas as tabelas
try
lblStatus.Caption := 'Iniciando processo de sincronia... Aguarde....' ;
Application.ProcessMessages;
Sleep(0);
lblStatus.Caption := 'Sincronizando tabela Grupos...';
Application.ProcessMessages;
DtMdl.FDGruposVelho.Active := False; //BD ANTIGO QUE ENVIARÁ OS DADOS PARA O NOVO
DtMdl.FDGruposVelho.Active := True;
DtMdl.FDGruposVelho.First;
DtMdl.FDGruposNovo.Active := False;
DtMdl.FDGruposNovo.Active := True;
status := Ler_chave_reg('Tabelas','grupos', '', verifica_ini);
if status = 'OK' then
next
else
while not DtMdl.FDGruposVelho.Eof do
begin
DtMdl.FDGruposNovo.Insert;
DtMdl.FDGruposNovoGR_NUMERO.Value := DtMdl.FDGruposVelhoCODIGO.Value;
DtMdl.FDGruposNovoGR_GRUPO.Value := DtMdl.FDGruposVelhoNOME_GRUPO.Value;
DtMdl.FDGruposNovo.Post;
Grava_Chave_Reg('tabelas','grupos', 'OK', verifica_ini);
DtMdl.FDGruposVelho.Next;
end;
DtMdl.FB_DataBaseNew.CommitRetaining;
Sleep(0);
lblStatus.Caption := 'Sincronização tabela Grupos concluída.';
Inc(cont);
>> > LbGrupos.Caption:= inttostr(cont)+'. Grupos Ok!, Total '+inttostr(DtMdl.FDGruposNovo.RecordCount);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Application.ProcessMessages;
pbStatus.Position := pbStatus.Position + 1;
except
on E : Exception do
begin
DtMdl.FB_DataBaseNew.RollbackRetaining;
application.MessageBox(pchar('Problemas durante a migração dos dados' +#13+#13+ 'Descrição do erro: '+#13+#13+E.Message+#13+#13+'Tentativa de sincronização cancelada'), 'AVISO', mb_OK + MB_ICONERROR);
if DtMdl.FDGruposNovo.State = dsInsert then
DtMdl.FDGruposNovo.Cancel;
end;
end;
Emanuel Gonçalves
Curtir tópico
+ 0
Responder
Post mais votado
06/07/2016
Para retornar todos os dados, você precisa alterar a propriedade FetchOptions da FDQuery. Lá tem a propriedade RowsetSize indicando a quantidade retornada, que por default está como 50 retornado os 50 primeiros registros. Caso deseje que sempre seja retornado todos os dados altere a propriedade Mode para fmAll.
Maiores informações, acesse o link abaixo:
[url:descricao=Fetching and Populating Questions (FireDAC)]http://docwiki.embarcadero.com/RADStudio/Seattle/en/Fetching_and_Populating_Questions_(FireDAC)[/url]
[sds]
Eduardo Belo
e-mail: beloelogica@gmail.com
Maiores informações, acesse o link abaixo:
[url:descricao=Fetching and Populating Questions (FireDAC)]http://docwiki.embarcadero.com/RADStudio/Seattle/en/Fetching_and_Populating_Questions_(FireDAC)[/url]
[sds]
Eduardo Belo
e-mail: beloelogica@gmail.com
Eduardo Silva.
Responder
Gostei + 3
Mais Posts
06/07/2016
Emanuel Gonçalves
Para retornar todos os dados, você precisa alterar a propriedade FetchOptions da FDQuery. Lá tem a propriedade RowsetSize indicando a quantidade retornada, que por default está como 50 retornado os 50 primeiros registros. Caso deseje que sempre seja retornado todos os dados altere a propriedade Mode para fmAll.
Maiores informações, acesse o link abaixo:
[url:descricao=Fetching and Populating Questions (FireDAC)]http://docwiki.embarcadero.com/RADStudio/Seattle/en/Fetching_and_Populating_Questions_(FireDAC)[/url]
[sds]
Eduardo Belo
e-mail: beloelogica@gmail.com
Maiores informações, acesse o link abaixo:
[url:descricao=Fetching and Populating Questions (FireDAC)]http://docwiki.embarcadero.com/RADStudio/Seattle/en/Fetching_and_Populating_Questions_(FireDAC)[/url]
[sds]
Eduardo Belo
e-mail: beloelogica@gmail.com
Obrigado Eduardo, resolvido
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)