日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

利用Delphi的“File Of Type”創(chuàng)建并管理屬于你自己的“數(shù)據(jù)庫”

 獨孤求財 2012-03-20

利用Delphi的“File Of Type”創(chuàng)建并管理屬于你自己的“數(shù)據(jù)庫”

時間:2011-5-26來源:yang 作者: peng點擊: 4次
http://www./keylife/iblog_show.asp?xid=30949

利用Delphi的“File Of Type”創(chuàng)建并管理屬于你自己的“數(shù)據(jù)庫”
原作者:Zarko Gajic
原文在:http://delphi./od/fileio/a/fileof_delphi.htm
譯   者:LihuaSoft
做人要厚道,轉(zhuǎn)載請注明出處
(譯者注:此文并非直譯的,而是盡量按照原文的結(jié)構(gòu),結(jié)合譯者的編程體會,進行了概譯)

前言

  在程序中,我們需要用一個途徑去把一些有規(guī)律的信息存儲在磁盤上。不能用TXT格式的文件──因為它不是基于“記錄”的,而且管理很不方便。
  BDE或ADO也就是說Paradox、Access……唉,不列舉了──這些我都不想用,尤其不想用BDE。我要用的是ASCII文本文件。Delphi能做到嗎?當然能!這就是“File Of”類型文件,或者說files of some type/binary files。
 ?。ㄗg者注:與所有的Win32桌面應(yīng)用程序編譯器相比,Delphi有一個很獨到的特點:它編譯的Exe可以不需要一些公共動態(tài)鏈接庫的支持,盡管因此Delphi的EXE文件可能大一點。而VC、C++Builder、VFP等等這些我用過的編譯器,卻不是這樣,它們編譯的EXE往往需要打包一些Dll才可以用。那么,我們用Delphi開發(fā)數(shù)據(jù)庫程序時,使用BDE、ADO等等引擎,卻因此給Delphi蒙羞──BDE、ADO等等,一般都需要單獨安裝到操作系統(tǒng)中去。)
  下面舉例演示這個應(yīng)用。

首先

  我們首先要定義一個基類,也就是一個記錄結(jié)構(gòu):

type
   TMember = record
     Name : string[10];
     eMail : string[20];
     Posts : LongInt;
   end;

  然后聲明一個記錄集,假設(shè)有5條記錄:
var Members : array[1..5] of TMember;
  在我們讀寫我們的數(shù)據(jù)信息前,我們需要聲明一個基于我們記錄結(jié)構(gòu)的文件變量:
var F : file of TMember;
  注:在Delphi里,我們聲明一個文件變量的一般格式就是:
var SomeTypedFile : file of SomeType;
  這里所說的基類(Some Type),比如可以是Double、數(shù)組、記錄。但不能是長字符串格式、動態(tài)數(shù)組、類類型以及指針。
  接下來我們要把我們的“數(shù)據(jù)庫”文件鏈接到我們的程序里去:
AssignFile(F, ‘Members.dat‘) ;
  使用一個“文件”,我們需要這樣“打開”它,并調(diào)用Reset方法打開一個已存在于硬盤上的文件,用Rewrite方法去創(chuàng)建一個新文件。當文件使用完畢,關(guān)閉應(yīng)用程序之前,我們要記得用CloseFile方法“關(guān)閉”它。如果忘記關(guān)閉,將引起一個I/O錯誤。當文件句柄被關(guān)閉,此前對它的所有更新操作將應(yīng)用。
 ?。ㄗg者注:上面所說的“文件”,不僅僅包括磁盤文件,而且包括串口、打印機、其他設(shè)備……這些都是“文件”。)

寫入到文件

  假設(shè)我們已經(jīng)填充了Members里的5條記錄。那么,接下來就是把這5條記錄寫入磁盤文件的代碼:
var
   F : file of TMember;
   i : integer;
begin
AssignFile(F,‘members.dat‘) ;
Rewrite(F) ;
try
   for i:= 1 to 5 do
    Write (F, Members[i]) ;
finally
   CloseFile(F) ;
end;
end;

從磁盤文件讀出所有記錄

var
   Member: Tmember;
   F : file of TMember;
begin
AssignFile(F,‘members.dat‘) ;
Reset(F) ;
try
   while not Eof(F) do begin
    Read (F, Member) ;
    {DoSomethingWithMember;}
   end;
finally
   CloseFile(F) ;
end;
end;
  注:EOF是文件的結(jié)束標志。我們通過判斷它的真假,來知道哪里是文件里最后的一條記錄。

Seeking and Positioning

  文件記錄通常是要不斷更新的。在一般情況下,我們讀寫一條記錄后,游標立即指向下一條記錄。我們可以用下面的方法實現(xiàn)在記錄間自由移動游標:

{ 回到文件頭,即第1條記錄 }
Seek(F, 0) ;

{ 跳到第3條記錄 }
Seek(F, 3) ;

{ 跳到文件尾,即最后一條記錄的后面 }
Seek(F, FileSize(F)) ;

記錄的更新

  前面我們僅僅學(xué)習(xí)了如何讀寫記錄。那么如果我們要求找到第10條記錄,然后把這條記錄的某個字段(如:Email)修改一下,怎么做?請看下面的代碼:

procedure ChangeEMail(const RecN : integer; const NewEMail : string) ;
var DummyMember : TMember;
begin
{ assign, open, exception handling 模塊略 }
Seek(F, RecN) ;
Read(F, DummyMember) ;
DummyMember.Email := NewEMail;
{ 此時游標已下移,我們需要重新返回游標位置 }
Seek(F, RecN) ;
Write(F, DummyMember) ;
{ 關(guān)閉文件 }
end;

結(jié)束語
  至此,我們已經(jīng)知道如何寫記錄到磁盤文件,如何讀取,如何僅僅改變文件中間某條記錄的一部分數(shù)據(jù)。  
http://www./keylife/images/u229024/Sample1.rar
http://www./keylife/images/u229024/Sample2.rar  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多