Duvidas com clientdataset e streams
Colegas, alguém poderia me dizer se tem alguma coisa errada no código abaixo?
procedure TfrmEnviaComando.Button2Click(Sender: TObject);
var Temp: TMemoryStream;
begin
Temp := TMemoryStream.Create;
temp.Clear;
temp.Size := ClientDataSet1.DataSize;
ClientDataSet1.Open;
ClientDataSet1.Savetostream(temp);
//temp.SaveToFile(´temp.xml´);
with frmretorno do
begin
//cdsRetorno.LoadFromFile(´temp.xml´);
//cdsRetorno.SaveToStream(temp);
cdsretorno.LoadFromStream(temp);
cdsretorno.Open;
ShowModal;
end;
end;
Meu objetivo: Salvar um stream com um clientdataSet usando savetostream, e dpois abrir com outro clientdataset usando loadfromstream.
Objetivo 2: tenho um clientdataset ligado a um provider que vai me mostrar o resultado de uma consulta de uma tabela qualquer. Preciso pegar esse resultado (do clientdataset) e salvar numa MemoryStream pra jogar num campo blob de uma tabela do interbase. Essa seria a minha tabela de log de consultas feitas. Depois preciso pegar um outro stream, carregar nele os dados da stream gravada no campo blob. Depois de carregada eu quero visualizar esses dados usando: OutroClientDataSetIndependente.loadFromStream(minhaStream)
fiz com arquivo xml e deu certíssimo, mas eu queria usar streams pr não ter que usar arquivos temporarios, o que eu faço?
procedure TfrmEnviaComando.Button2Click(Sender: TObject);
var Temp: TMemoryStream;
begin
Temp := TMemoryStream.Create;
temp.Clear;
temp.Size := ClientDataSet1.DataSize;
ClientDataSet1.Open;
ClientDataSet1.Savetostream(temp);
//temp.SaveToFile(´temp.xml´);
with frmretorno do
begin
//cdsRetorno.LoadFromFile(´temp.xml´);
//cdsRetorno.SaveToStream(temp);
cdsretorno.LoadFromStream(temp);
cdsretorno.Open;
ShowModal;
end;
end;
Meu objetivo: Salvar um stream com um clientdataSet usando savetostream, e dpois abrir com outro clientdataset usando loadfromstream.
Objetivo 2: tenho um clientdataset ligado a um provider que vai me mostrar o resultado de uma consulta de uma tabela qualquer. Preciso pegar esse resultado (do clientdataset) e salvar numa MemoryStream pra jogar num campo blob de uma tabela do interbase. Essa seria a minha tabela de log de consultas feitas. Depois preciso pegar um outro stream, carregar nele os dados da stream gravada no campo blob. Depois de carregada eu quero visualizar esses dados usando: OutroClientDataSetIndependente.loadFromStream(minhaStream)
fiz com arquivo xml e deu certíssimo, mas eu queria usar streams pr não ter que usar arquivos temporarios, o que eu faço?
Vitor Rubio
Curtidas 0
Melhor post
Bon Jovi
18/06/2005
Tenta copiando o pacote de dados, ex.:
function TForm1.ObtemCopiaClientDataSet(Original: TClientDataSet): TClientDataSet;
var
Copia: TClientDataSet;
begin
Copia := TClientDataSet.Create(Self);
[b:d1f6ecc31b] Copia.Data := Original.Data;[/b:d1f6ecc31b]
Result := Copia;
end;
Acho q tem outra maneira tb tipo isso q tentou ou via assign, mas nao lembro agora..
function TForm1.ObtemCopiaClientDataSet(Original: TClientDataSet): TClientDataSet;
var
Copia: TClientDataSet;
begin
Copia := TClientDataSet.Create(Self);
[b:d1f6ecc31b] Copia.Data := Original.Data;[/b:d1f6ecc31b]
Result := Copia;
end;
Acho q tem outra maneira tb tipo isso q tentou ou via assign, mas nao lembro agora..
GOSTEI 1
Mais Respostas
Vitor Rubio
13/06/2005
Oi Bon Jovi, eu agradeço a sua sugestão, é uma ótima idéia, mas eu não queria retornar um clientdataset, gostaria de retornar uma stream pra poder gravar num blob do interbase, na web, para outra pessoa ver, um segundo depois, em outro computador, em outro lugar, a consulta que foi feita.
Funciona assim: eu tenho um bd, fulano tem outro bd, ambos locais. Os dois também se conectam num mesmo banco na web. Fulano faz uma consulta no banco de dados dele, essa consulta vai pra um clientdataset ligado um providar ligado num ibdataset. O clientdataset salva essa consulta numa stream em formato xml, e grava essa stream num campo blob de um registro de uma tabela dakele bd na web, aí eu consulto o bd na web, pego essa stream e jogo num clientdataset ligado numa grid pra ver os dados. Eu não consigo carregar o meu clientdataset direto da stream que eu puxei do bd, eu tenho que salvar um arquivo xml primeiro e depois pegar o cds e puxar os dados desse arquivo.
Se fosse direto, não teria a necessidade de usar esse arquivo temporario, entendeu?
Funciona assim: eu tenho um bd, fulano tem outro bd, ambos locais. Os dois também se conectam num mesmo banco na web. Fulano faz uma consulta no banco de dados dele, essa consulta vai pra um clientdataset ligado um providar ligado num ibdataset. O clientdataset salva essa consulta numa stream em formato xml, e grava essa stream num campo blob de um registro de uma tabela dakele bd na web, aí eu consulto o bd na web, pego essa stream e jogo num clientdataset ligado numa grid pra ver os dados. Eu não consigo carregar o meu clientdataset direto da stream que eu puxei do bd, eu tenho que salvar um arquivo xml primeiro e depois pegar o cds e puxar os dados desse arquivo.
Se fosse direto, não teria a necessidade de usar esse arquivo temporario, entendeu?
GOSTEI 0
Vitor Rubio
13/06/2005
Oi Bon Jovi, eu agradeço a sua sugestão, é uma ótima idéia, mas eu não queria retornar um clientdataset, gostaria de retornar uma stream pra poder gravar num blob do interbase, na web, para outra pessoa ver, um segundo depois, em outro computador, em outro lugar, a consulta que foi feita.
Funciona assim: eu tenho um bd, fulano tem outro bd, ambos locais. Os dois também se conectam num mesmo banco na web. Fulano faz uma consulta no banco de dados dele, essa consulta vai pra um clientdataset ligado um providar ligado num ibdataset. O clientdataset salva essa consulta numa stream em formato xml, e grava essa stream num campo blob de um registro de uma tabela dakele bd na web, aí eu consulto o bd na web, pego essa stream e jogo num clientdataset ligado numa grid pra ver os dados. Eu não consigo carregar o meu clientdataset direto da stream que eu puxei do bd, eu tenho que salvar um arquivo xml primeiro e depois pegar o cds e puxar os dados desse arquivo.
Se fosse direto, não teria a necessidade de usar esse arquivo temporario, entendeu?
Se tiver outra sugestão.... valew.... de qualquer forma...
Obrigadão mesmo assim :) ^^
Funciona assim: eu tenho um bd, fulano tem outro bd, ambos locais. Os dois também se conectam num mesmo banco na web. Fulano faz uma consulta no banco de dados dele, essa consulta vai pra um clientdataset ligado um providar ligado num ibdataset. O clientdataset salva essa consulta numa stream em formato xml, e grava essa stream num campo blob de um registro de uma tabela dakele bd na web, aí eu consulto o bd na web, pego essa stream e jogo num clientdataset ligado numa grid pra ver os dados. Eu não consigo carregar o meu clientdataset direto da stream que eu puxei do bd, eu tenho que salvar um arquivo xml primeiro e depois pegar o cds e puxar os dados desse arquivo.
Se fosse direto, não teria a necessidade de usar esse arquivo temporario, entendeu?
Se tiver outra sugestão.... valew.... de qualquer forma...
Obrigadão mesmo assim :) ^^
GOSTEI 0