Fórum O ApplyUpdates fecha o CDS? #288131
14/07/2005
0
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
Curtir tópico
+ 0Posts
14/07/2005
Sergiomatos
Não fecha, mas coloca seu codigo ae pra gente poder ver o que esta acontecendo.
Gostei + 0
15/07/2005
Titanius
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
Gostei + 0
16/07/2005
Marco Salles
e isto ta errado :?: :?: :?: :?:
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;
Gostei + 0
17/07/2005
Titanius
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.
Gostei + 0
17/07/2005
Yallebr
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.
Gostei + 0
17/07/2005
Marco Salles
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...)
Gostei + 0
18/07/2005
Titanius
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
Gostei + 0
18/07/2005
Khundalini
[]s
Rubem Rocha
Manaus, AM
Gostei + 0
18/07/2005
Titanius
Desde já agradeço
[]s
Gostei + 0
19/07/2005
Titanius
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)