Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Salvar record em disco


João Paulo Taraciuk

Pergunta

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?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

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 por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...