Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[9020] Re:[질문] 메모리 저장/로드 방법 좀 알려주세요..
civilian [civilian] 893 읽음    2003-11-11 20:39
구조체를 다음과 같이 변경해보았습니다.

type
  TDCOPACCUM_INFO = record
    ChamberId       : array[0..11] of char;
    DcopPmName      : array[0..35] of char;
    PPID            : array[0..99] of char;
    CHStep          : array[0..23] of char;
    AccumPmValue    : double;
    bAegisReport    : Boolean;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Info1, Info2: TDCOPACCUM_INFO;
  Stream: TMemoryStream;
begin
  //
  // 구조체 원본에 값을 넣습니다.
  //
  Info1.ChamberId    := '00001';
  Info1.DcopPmName   := '볼랜드포럼';
  Info1.PPID         := '10000';
  Info1.CHStep       := '20000';
  Info1.AccumPmValue := 10.10;
  Info1.bAegisReport := True;

  //
  // 스트림에 구조체의 내용을 기록합니다.
  //
  Stream := TMemoryStream.Create;

  //--방법 1
  Stream.Write(Info1.ChamberId[0], 12);
  Stream.Write(Info1.DcopPmName[0], 36);
  Stream.Write(Info1.PPID[0], 100);
  Stream.Write(Info1.CHStep[0], 24);
  Stream.Write(Info1.AccumPmValue, SizeOf(Info1.AccumPmValue));
  Stream.Write(Info1.bAegisReport, SizeOf(Info1.bAegisReport));

  //--방법 2
  Stream.Write(Info1, SizeOf(Info1));
  //--두가지 방법 중 편한 것으로 ~^^


  //
  // 스트림에서 값을 읽은 후 구조체에 넣습니다.
  //
  Stream.Position := 0;

  //--방법 1
  Stream.Read(Info2.ChamberId[0], 12);
  Stream.Read(Info2.DcopPmName[0], 36);
  Stream.Read(Info2.PPID[0], 100);
  Stream.Read(Info2.CHStep[0], 24);
  Stream.Read(Info2.AccumPmValue, SizeOf(Info2.AccumPmValue));
  Stream.Read(Info2.bAegisReport, SizeOf(Info2.bAegisReport));

  //--방법 2
  Stream.Read(Info2, SizeOf(Info2));
  //--두가지 방법 중 편한 것으로 ~^^

  //
  // 넣은 값을 화면에 표시해봅니다
  //
  Edit1.Text := String(Info2.ChamberId);
  Edit2.Text := String(Info2.DcopPmName);
  Edit3.Text := String(Info2.PPID);
  Edit4.Text := String(Info2.CHStep);
  Edit5.Text := FloatToStr(Info2.AccumPmValue);
  CheckBox1.Checked := Info2.bAegisReport;

  FreeAndNil(Stream);
end;

DB의 필드에 넣으려면 TMemoryStream 대신 BLOB필드에 넣으면 되겠죠.
그럼..^^

이민석 님이 쓰신 글 :
:
:   TDCOPACCUM_INFO = record
:     ChamberId       : string[12];
:     DcopPmName      : string[36];
:     PPID            : string[100];
:     CHStep          : string[24];
:     AccumPmValue    : double;
:     bAegisReport    : Boolean;
:   end;
:
: 이런 형식의 메모리에 올려진 Record를 Database 필드에 그대로 저장했다가
: 그대로 올리는 방법이 있을까요????
:
: Stream으로 binary형태로 저장해서 읽어올 수 있을거 같아서 해봤는데
: 델파이 초보다 보니 아무리 해도 모르겠습니다..
:
: 지금 거의 일주일동안 시도를 하고 있는데.. 좀 도와주세요...

+ -

관련 글 리스트
9018 [질문] 메모리 저장/로드 방법 좀 알려주세요.. 이민석 681 2003/11/08
9020     Re:[질문] 메모리 저장/로드 방법 좀 알려주세요.. civilian 893 2003/11/11
9027         정말로 감사합니다 civilian 님..... 제가 이제야 답변을 드립니다.. 이민석 689 2003/11/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.