GARANTIR DESCONTO

Fórum O ApplyUpdates fecha o CDS? #288131

14/07/2005

0

Olá, tenho um CDS, que vou dando um Append nele por meio de um while,

a minha pergunta é a seguinte: se eu der o ApplyUpdates, ele fecha o CDS? Porque eu preciso dos dados que foram gravados, e se eu der um Open, depois, ele me traz todos os registros, mas eu preciso eh dos registros que eu acabei de incluir...


Desde já agradeço.


Titanius

Titanius

Responder

Posts

14/07/2005

Sergiomatos

Não.

Não fecha, mas coloca seu codigo ae pra gente poder ver o que esta acontecendo.


Responder

Gostei + 0

15/07/2005

Titanius

Amigo, o meu CDS fechou sim, segue o codigo:

cdsBoleta <-- é esta que eu nao quero que feche



cdsBoleta.Open;
TbConsCliente.First;
while not TbConsCliente.EOF do
begin
   cdsBoleta.Append;
   cdsBoleta.FieldByName(´NOME´).AsString := TbconsCliente.FieldByName(´nome´);
   cdsBoleta.FieldByName(´MENSALIDADE´).AsString := TbconsCliente.FieldByName(´MENSALIDADE´);
   cdsBoleta.Post;
  TbconsCliente.Next;
end;
cdsBoleta.ApplyUpdates(0);

cdsBoleta.First;
while not cdsBoleta.EOF do
begin
>>>    FUNCAO DE IMPRIMIR <<<
  cdsBoleta.NExt;
end;


o que esta acontecendo?, quando dou o First, ele volta ao inicio da tabela e pega TODOS os registros... mas eu queria soh trazer os que eu acabei de inserir, entendeu?

Desde já agradeço

[]s


Responder

Gostei + 0

16/07/2005

Marco Salles

quando dou o First, ele volta ao inicio da tabela e pega TODOS os registros...


e isto ta errado :?: :?: :?: :?:

mas eu queria soh trazer os que eu acabei de inserir, entendeu?


Marque o inicio do processo com uma variável BookMark e depois não de First , e sim retorne com o valor da variável BookMark.. Não seria isto :?: :?:

var
Bookmark:TBookMarkStr; 
begin
cdsBoleta.Open; 
Bookmark:=cdsBoleta.Bookmark;
cdsBoleta.DisableControls;

TbConsCliente.First; 

while not TbConsCliente.EOF do 
begin 
   cdsBoleta.Append; 
   cdsBoleta.FieldByName(´NOME´).AsString := TbconsCliente.FieldByName(´nome´); 
   cdsBoleta.FieldByName(´MENSALIDADE´).AsString := TbconsCliente.FieldByName(´MENSALIDADE´); 
   cdsBoleta.Post; 
  TbconsCliente.Next; 
end; 
cdsBoleta.ApplyUpdates(0); 

//cdsBoleta.First; 
cdsBoleta.EnableControls;
ClientDataSet1.Bookmark:=Bookmark;

while not cdsBoleta.EOF do 
begin 
>>>    FUNCAO DE IMPRIMIR <<< 
  cdsBoleta.NExt; 
end; 



Responder

Gostei + 0

17/07/2005

Titanius

Amigo, só uma perguntinha...

Se eu fizer isso, ele me trará todos os registros da tabela? pra depois posicionar ele no local?

Se for assim não daria, pois tem uma média de 1000 boletas por mês, e depois vai ficar muito lento :d


Desde já agradeço

[]s
Fellipe H.


Responder

Gostei + 0

17/07/2005

Yallebr

Se for assim não daria, pois tem uma média de 1000 boletas por mês, e depois vai ficar muito lento :d


Amigo lento isso vai ficar mesmo. Para uma quantidade de 1000 registros não é nunca recomendado vc utilizar While EOF. Use um SQL para otimizar isso ou outra alternativa que achar melhor (sem While).

Primeiro q vc deverá trazer 1000 registro para a memoria, trafegar toda rede, e o processo de While EOF é muito lento.


Responder

Gostei + 0

17/07/2005

Marco Salles

Amigo, só uma perguntinha... Se eu fizer isso, ele me trará todos os registros da tabela? pra depois posicionar ele no local?


O Mecanismo que se usa para posicionar usando a String Opaca BookMark , eu confesso que não sei... Mas posso garantir que isto esta devidamente Registrado Nos livros de Delphi , quando o assunto é Posicionar o Registro..

Note que estamos desabilitando temporariamente a interface como o Usuário... Muito do tempo Consumido é devido a esta atualização com a interface do que com o Processamento Em si...

Da mesma forma , que dar Um cdsBoleta.First; Voce também corre Este inconveniente ... Sugiro que voce teste o mecansimo e se pronuncie depois ....(Pelo que tudo indica voce não testou o código...)


Responder

Gostei + 0

18/07/2005

Titanius

Amigos, acabei de tentar o código, e nada, voltou ao inicio da tabela, segue o código:

 cdsBoleta.Open;
 Bookmark := cdsBoleta.Bookmark;
 cdsBoleta.DisableControls;
 while not cdsCliente.EOF do
 begin
     cdsBoleta.Append; 
   cdsBoleta.FieldByName(´NOME´).AsString := TbconsCliente.FieldByName(´nome´); 
   cdsBoleta.FieldByName(´MENSALIDADE´).AsString := TbconsCliente.FieldByName(´MENSALIDADE´); 
   cdsBoleta.Post; 
  TbconsCliente.Next;  
 end;

 cdsBoleta.EnableControls;
 cdsBoleta.Bookmark := Bookmark;

 while not cdsBoleta.EOF do
 begin
   <<funcao de imprimir >>
   cds.Boleta.Next;
 end;


o Codigo SQL do meu cdsBoleta, está:
select cl.cliente, cl.razaosocial, cl.endereco, cl.complemento, cl.bairro, cl.cidade, cl.cep, cl.cnpjcpf, cl.enderecocob,
cl.complementocob, cl.bairrocob, cl.cidadecob, cl.cepcob, cl.mensalidade, cl.datavencimentoboleta, cl.imprimirnf, cl.situacao, cl.desconto,
cl.valordesconto, cl.boletabb, cl.saldoconta, c.nome NomeCidade, c.uf UFCidade, c.cep CEPCidade, c2.nome NomeCidadeCob, c2.uf UFCidadeCob, c2.cep CEPCidadeCob from cliente cl
left join cidade c on (c.cidade = cl.cidade)
left join cidade c2 on (c2.cidade = cl.cidadecob)


eu crio o WHERE, mediante escolha do usuário...



[]s


Responder

Gostei + 0

18/07/2005

Khundalini

Eu acho muito mais fácil, rápido e prático filtrar os registros que apenas foram incluídos ou alterados através da propriedade UpdateStatus. Faça o seu laço normal, mas apenas escolha os registros que possuem o UpdateStatus com a condição do registro que vc quer trabalhar (apenas incluídos, apenas alterados, etc.). É uma sugestão.

[]s
Rubem Rocha
Manaus, AM


Responder

Gostei + 0

18/07/2005

Titanius

Khundalini, poderia me dar um exemplo? Pois nunca usei isso :d


Desde já agradeço


[]s


Responder

Gostei + 0

19/07/2005

Titanius

Pessoal, resolvi da seguinte maneira:

1- No meu while onde eu dou um Append na minha cdsBoleta, eu gravo os codigos de cada boleta.
2- No final eu abro um outro CDS, somente com os codigos, dou um select nos codigo que eu selecionei acima.

Prontinho... infelizmente tive que ir 2 vezes ao banco de dados, mas foi o jeito que eu achei....

Muito obrigado a todos que participaram dessa discussão...


[]s


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar