O ApplyUpdates fecha o CDS?
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.
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
Curtidas 0
Respostas
Sergiomatos
14/07/2005
Não.
Não fecha, mas coloca seu codigo ae pra gente poder ver o que esta acontecendo.
Não fecha, mas coloca seu codigo ae pra gente poder ver o que esta acontecendo.
GOSTEI 0
Titanius
14/07/2005
Amigo, o meu CDS fechou sim, segue o codigo:
cdsBoleta <-- é esta que eu nao quero que feche
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
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
Marco Salles
14/07/2005
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;
GOSTEI 0
Titanius
14/07/2005
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.
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
Yallebr
14/07/2005
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.
GOSTEI 0
Marco Salles
14/07/2005
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...)
GOSTEI 0
Titanius
14/07/2005
Amigos, acabei de tentar o código, e nada, voltou ao inicio da tabela, segue o código:
o Codigo SQL do meu cdsBoleta, está:
eu crio o WHERE, mediante escolha do usuário...
[]s
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
Khundalini
14/07/2005
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
[]s
Rubem Rocha
Manaus, AM
GOSTEI 0
Titanius
14/07/2005
Khundalini, poderia me dar um exemplo? Pois nunca usei isso :d
Desde já agradeço
[]s
Desde já agradeço
[]s
GOSTEI 0
Titanius
14/07/2005
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
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