Jump to content
Fórum Script Brasil

LockSpy

Membros
  • Posts

    11
  • Joined

  • Last visited

About LockSpy

LockSpy's Achievements

0

Reputation

  1. Imaginamos uma tabela cliente com os seguintes dados Tabela Cliente código 1 nome João código 2 nome Marcos código 3 nome Lauro código 4 nome Joyce código 5 nome Jéssica E uma tabela Pessoas com os seguintes dados Tabela Pessoas - Dados já existentes código 6 nome Marcela código 7 nome Luidi Agora irei percorrer e copiar os dados da tabela Cliente para a tabela Pessoas, porém irá "acontecer uma falha" e por conta disso em vez de copiar os 5 dados da tabela cliente, irá copiar somente até o Lauro, faltando a Joyce e a Jéssica. Tabela Pessoas - Dados já existentes código 6 nome Marcela código 7 nome Luidi código 1 nome João código 2 nome Marcos código 3 nome Lauro Devido a esse erro preciso desfazer o que foi copiado sem apagar os registros que já existiam. Ou seja, deve ficar assim novamente: Tabela Pessoas - Dados já existentes código 6 nome Marcela código 7 nome Luidi Para isso preciso saber até onde a tabela Cliente foi percorrida, e percorrer a mesma coisa e ir deletando os dados que foram copiados na tabela pessoas. Tabela Cliente código 1 nome João código 2 nome Marcos código 3 nome Lauro - Foi percorrido até aqui, então o loop e o delete tem que ser até aqui. Simulando um rollback
  2. Então na verdade seria mais ou menos isso aqui: Tenho um ClientDataSet com 10 registros. Utilizando um RecNo o que eu quero fazer é este código: VAR I, countRecNo : Integer; I := 0; ClientDataSet.First; //Irá percorrer o ClientDataSet com 10 registros While not ClientDataSet.Eof do begin Inc(I); if I = 5 then //No 5 registro ele irá parar begin countRecNo := ClientDataSet.RecNo; break; end; ClientDataSet.Next; end; ClientDataSet.First; //Irá percorrer o ClientDataSet novamente desde o primeiro até onde parou que seria o 5, //para efetuar operações de rollback apagar alguns dados etc. While ClientDataSet.RecNo <> countRecNo do begin ClientDataSet.Delete; //Ira apagar da primeira linha até onde parou. ClientDataSet.Next; end; Nesse caso com RecNo Eu vejo funcionando mais ou menos dessa forma, a minha idéia a principio era usar o BookMark, porém ai que está a questão que eu não sei como fazer isso em vez de utilizar o RecNo utilizar o BookMark para percorrer. Ex: VAR I : Integer; bookmark: TBookMark; I := 0; ClientDataSet.First; //Irá percorrer o ClientDataSet com 10 registros While not ClientDataSet.Eof do begin Inc(I); if I = 5 then //No 5 registro ele irá parar begin bookmark := ClientDataSet.GetBookmark; break; end; ClientDataSet.Next; end; ClientDataSet.First; //Irá percorrer o ClientDataSet novamente desde o primeiro até onde parou que seria o 5, para efetuar operações de rollback apagar alguns dados etc. While ClientDataSet.RecNo <> bookmark.RecNo do //Eu sei que não é assim, pois é isso que eu não sei fazer e nem sei se é possível. begin ClientDataSet.Delete; //Ira apagar da primeira linha até onde parou. ClientDataSet.Next; end;
  3. Já havia feito bastante busca a respeito mas não encontrei nada sobre como fazer um ClientDataSet percorrer até o ponteiro salvo no bookmark. Mas acho melhor então utilizar o RecNo mesmo, assim eu gravo o número da linha que parou e depois percorro até ela. Obrigado Jhonas!
  4. Olá tenho a seguinte situação: Tenho um ClientDataSet onde ele está sendo percorrido e irá parar em um ponto aleatório onde o bookmark vai salvar o ponteiro. Após isso eu gostaria de recomeçar a percorrer o ClientDataSet desde o first, porém agora até onde o bookmark salvou o ponteiro. Algo do tipo "o código é só um exemplo" ClientDataSet.First; while ClientDataSet.ponteiro <> bookmark.ponteiro do begin //codigo ClientDataSet.Next; end;
  5. Eu pensei nessa questão de compactar, mas mesmo compactando ainda fica com um valor muito grande para a operação. A forma que eu resolvi foi armazenar uma quantidade pequena e ir salvando quantidade que armazenei e depois eu limpo o ClientDataSet, e repito isso até salvar todos os arquivos. Mas obrigado Jhonas!
  6. É um ClientDataSet virtual, Eu só estou carregando o mesmo PDF várias vezes no TBlobField do ClientDataSet for i := 0 to 100 do begin cdsTemp.Append; TBlobField(cdsTemp.FieldByName('arq')).LoadFromFile(String(C:\PROJBLOB\arquivopdf.pdf)); cdsTemp.Post; end; e depois percorro o ClientDataSet e salvo o pdf novamente dentro de uma pasta igual o numero de vezes que existe no dentro do ClientDataSet
  7. Olá pessoal, Eu estou estudando o TBlobField com ClientDataSet, peguei um modelo da internet e eu estou tentando carregar um arquivo grande de em torno 35mb várias vezes, porém conforme eu vou dando o loop depois de carregar algumas vezes o ClientDataSet da erro de 'Insufficient memory for this operation.', eu já consegui verificar que é porque o arquivo é muito grande e provavelmente chega no limite do ClientDataSet. Mas gostaria de saber como posso contornar essas situações em vez de simplesmente trocar um arquivo por um pequeno, porque em cliente nem sempre vão ser arquivos pequenos. Existe alguma forma que eu possa fazer com que verifique o limite e pare o loop e emita uma mensagem? Ou melhor ainda existe alguma forma de carregar todos os arquivos e não dar erro de memória? De repente compactar o arquivo antes? Qual seria a melhor solução para esse caso? Poderiam me ajudar com alguma solução? procedure TEstudo.btnTesteClick(Sender: TObject); var cdsTemp: TClientDataset; i: Integer; begin cdsTemp:= TClientDataset.Create(nil); cdsTemp.FieldDefs.Add('arq', ftBlob); cdsTemp.CreateDataSet; try for i := 0 to 100 do begin cdsTemp.Append; TBlobField(cdsTemp.FieldByName('arq')).LoadFromFile(String(C:\PROJBLOB\arquivopdf.pdf)); cdsTemp.Post; end; finally FreeAndNil(cdsTemp); end; end;
  8. Então obrigado pelas dicas Jhonas, consegui verificar que isso seria a criação de um componente e ele fica com a extensão .dpk
  9. Olá Pessoal, Gostaria de saber como que eu faço ao instalar um pacote DesignTime ele instalar um pacote Runtime que possui um componente que é necessário ir na paleta de ferramentas da IDE. Ex: Tenho um pacote em RunTime com um componente criado do tipo TEdit. Tenho outro pacote em DesignTime que deverá registrar esse componente em RunTime na Paleta de Ferramentas. Poderiam me ajudar?
  10. Na verdade eu estou estudando pacotes e entrei no conceito sobre a extensão .dpk e eu não entendo muito a respeito. Eu vi que se eu criar um Package no Delphi 5 por exemplo ele cria com uma extensão .dpk, mas no XE10 ele já cria com extensão .bpl. Eu to tentando criar mesmo um pacote com essa extensão .dpk no XE10, não é instalação de componente não. Teria alguma certa diferença na extensão .dpk com a .bpl? Teria como eu criar um pacote no XE10 com a extensão .dpk?
  11. Olá pessoal, Estou na dúvida tentando criar um pacote em delphi com a extensão .dpk, porém quando eu crio um novo Package ele sempre cria com extensão .bpl. Poderiam me ajudar?
×
×
  • Create New...