線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1103
推到 Plurk!
推到 Facebook!

請問如何將RECORD的資料存入檔案並且取出?

尚未結案
nicolas
一般會員


發表:39
回覆:40
積分:15
註冊:2004-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-10 17:48:34 IP:61.219.xxx.xxx 未訂閱
請問如何將RECORD的資料存入檔案並且取出? 我不想用資料庫喔, 謝謝    
TYPE  TAAA = record
        BBB:STRING;
        CCC:INTEGER;
      END;    AAA:ARRAY[1.100] OF TAAA;
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-10 17:59:39 IP:61.71.xxx.xxx 未訂閱
引言: 請問如何將RECORD的資料存入檔案並且取出? 我不想用資料庫喔, 謝謝
TYPE  TAAA = record
        BBB:STRING;
        CCC:INTEGER;
      END;    AAA:ARRAY[1.100] OF TAAA;
不想用資料庫, 不知希望想用什麼來儲存? txt檔, ini檔, registry 也都可以做到!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-10 18:03:36 IP:202.39.xxx.xxx 未訂閱
試試看如下的方法成不成?
procedure SaveRecord;
var 
  fs: TFileStream;
  i: Integer;
  sl: TStringList;
begin
  fs := TFileStream.Create('c:\xx.rec', fmCreate or fmOpenWrite);
  sl := TStringList.Create;
  try
    fs.WriteBuffer(AAA, SizeOf(AAA));
    for i := 1 to 100 do 
    begin
      sl.Add(AAA[i].BBB);
      sl.Add(IntToStr(AAA[i].CCC));
    end;
    sl.SaveToStream(fs);
  finally
    sl.Free;
    fs.Free;
  end;
end;    procedure ReadRecord;
var 
  fs: TStream;
  i: Integer;
  sl: TStringList;
begin
  if FileExists('c:\xx.rec') then 
  begin
    fs := TFileStream.Create('c:\xx.rec', fmOpenRead);
    sl := TStringList.Create;
    try
      fs.ReadBuffer(AAA, SizeOf(AAA));
      sl.LoadFromStream(fs);
      for i := 1 to 100 do 
      begin
        AAA[i].BBB := sl.Strings[(i-1)*2];
        AAA[i].CCC := StrToInt(sl.Strings[(i-1)*2 1]);
      end;
    finally
      sl.Free;
      fs.Free
    end;
  end;
end;
-- 向 KTop 的弟兄們致敬!
nicolas
一般會員


發表:39
回覆:40
積分:15
註冊:2004-05-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-11 08:27:27 IP:61.219.xxx.xxx 未訂閱
謝謝 hagar 的回答 再問一下 1.如果只是想存入中間一筆資料 而非全部 怎樣做會比較省時 2.資料如果有錯如何檢查 3.不小心關機 會不會造成資料只在buffer而沒存入hard disk呢 發表人 - nicolas 於 2004/08/11 08:32:36
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-11 09:03:30 IP:202.39.xxx.xxx 未訂閱
引言: 1.如果只是想存入中間一筆資料 而非全部 怎樣做會比較省時
只有一筆資料, 很難比較省不省時吧?
引言: 2.資料如果有錯如何檢查
所謂的資料有錯是什麼情況下有錯? 這點只有您知道, 所以如何檢查或檢查標準得看您自己
引言: 3.不小心關機 會不會造成資料只在buffer而沒存入hard disk呢
還沒存檔就關機, 或者存檔過程中關了機, 是有可能發生的 -- 向 KTop 的弟兄們致敬! 發表人 - hagar 於 2004/08/11 09:05:41
nicolas
一般會員


發表:39
回覆:40
積分:15
註冊:2004-05-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-11 09:26:29 IP:61.219.xxx.xxx 未訂閱
StrToInt 還是要做資料轉換 有沒有不做轉換的方法呢 謝謝
nicolas
一般會員


發表:39
回覆:40
積分:15
註冊:2004-05-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-11 10:08:27 IP:61.219.xxx.xxx 未訂閱
只有一筆資料, 很難比較省不省時吧? 如果有一萬筆資料 只有一筆有改變 只存那一筆不是較省時嗎? [/
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-11 17:25:13 IP:211.74.xxx.xxx 未訂閱
引言: 只有一筆資料, 很難比較省不省時吧? 如果有一萬筆資料 只有一筆有改變 只存那一筆不是較省時嗎? >< face="Verdana, Arial, Helvetica">
1.只有一筆資料, 很難比較省不省時吧?
  給了頭,應該好處理了...
  var
    fsFile:TFileStream;
  begin
    fsFile:=TFileStrea.Create('filename',fmOpenReadWrite);
    //判斷要儲存哪筆資料將位置移動
    fsFile.Position:=TypeSize * N;
    fsFile.Write(TypeData,Sizeof(TypeData));
    fsFile.Free;
  end;
2.資料如果有錯如何檢查
  可在檔頭或檔案大小等等地方,於開啟檔案時做檢查咩.
  有錯誤發生時,總不能開啟吧!!
3.不小心關機 會不會造成資料只在buffer而沒存入hard disk呢
  fsFile:=TFileStream.Create
  ...
  fsFile.Free
  只要不在這中間關機就不會發生沒存入.
  如果在這中間關機,任何的程序也無法補救吧?
  如word在存檔中關機了,你能確保word的檔案正確嗎!?...
  word做法是定時備份存檔唄.
系統時間:2024-06-26 23:33:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!