João Paulo Taraciuk Postado Outubro 24, 2012 Denunciar Share Postado Outubro 24, 2012 Como eu poderia fazer para salvar um record em disco, sendo que nesse record tem um dado que é do tipo TClientDataSet.Salva tranquilo, aí, se eu fechar o sistema e abrir novamente, ele não consegue ler:type TDados = record Dados: TClientDataSet; String: string; procedure TForm2.EscreverEmArquivo; var cds: TClientDataSet; oDados: TDados; Stream: TFileStream; begin cds.FieldDefs.Add('dado', ftstring, 10); cds.CreateDataSet; cds.Active := True; cds.Append; cds.FieldByName('dado').AsString := 'testando'; cds.Post; oDados.Dados := cds; oDados.sString := 'teste'; Stream := TFileStream.Create('C:\SalvandoRecord.dat', fmCreate); try Stream.Write(oDados, SizeOf(oDados)); finally FreeAndNil(Stream); end; end;Aí, quando eu tento ler esse arquivo, a informação que é String lê corretamente, mas a informação que é TClientDataSet não funciona.Como podera ser feito pra salvar esse record com o ClientDataSet e ler ele novamente? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 26, 2012 Denunciar Share Postado Outubro 26, 2012 como voce faz a leitura ? ( poste o codigo )a sua intensão é trabalhar com tabelas temporarias ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Taraciuk Postado Outubro 27, 2012 Autor Denunciar Share Postado Outubro 27, 2012 (editado) A leitura estou fazendo da seguinte forma:procedure TForm2.LerDeArquivo; var objDado: TDados; Stream: TFileStream; TamanhoStream: Integer; cds1: TClientDataSet; begin Stream := TFileStream.Create('C:\SalvandoRecord.dat', fmOpenReadWrite); ocds1 := TClientDataSet.Create(nil); try TamanhoStream := (Stream.Size) div SizeOf(objDado); for TamanhoStream := 1 to TamanhoStream do begin objDado.Dados := TspClientDataSet.Create(nil); Stream.Position := (TamanhoStream - 1) * SizeOf(objDado); Stream.ReadBuffer(objDado, SizeOf(objDado)); cds1 := objDado.Dados; cds1.DataSet := cds1; edit1.Text := objDado.String; end; finally FreeAndNil(Stream); end; end;A minha intenção é gerar o arquivo com um executável, e ler o mesmo depois com outro aplicativo.Tentei ennviar no record um OleVariant ao invés do TClientDataSet, mas também não obtive sucesso.O que eu tenho,é um array de variants, onde na primeira posição, tenho vários OleVariants que correspondem a ClientDataSet.Data, e nas outras posições do Array, outras informações, como String, Integer. Mas, na tentativa de escrever o Array diretamente em disco, não obtive sucesso tbém. Se eu conseguisse salvar o OleVariant e depois ler esse OleVariant e jogar para o .Data do ClientDataSet, seria ótimo, mas não obtive sucesso. Editado Outubro 27, 2012 por João Paulo Taraciuk Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Outubro 28, 2012 Denunciar Share Postado Outubro 28, 2012 veja se isso te ajuda a esclarecer as duvidashttp://edn.embarcadero.com/article/28959http://www.planetadelphi.com.br/artigo/141...cord%29-parte-iabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Taraciuk Postado Outubro 30, 2012 Autor Denunciar Share Postado Outubro 30, 2012 Então, vou ter mesmo que abrir o array e salvar os TClientDataSet diretamente no disco, e depois ao ler essas informações, carregá-los 1 a 1 para montar o array novamente. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
João Paulo Taraciuk
Como eu poderia fazer para salvar um record em disco, sendo que nesse record tem um dado que é do tipo TClientDataSet.
Salva tranquilo, aí, se eu fechar o sistema e abrir novamente, ele não consegue ler:
Aí, quando eu tento ler esse arquivo, a informação que é String lê corretamente, mas a informação que é TClientDataSet não funciona.
Como podera ser feito pra salvar esse record com o ClientDataSet e ler ele novamente?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.