码农的笔记

Delphi虽好,但已不流行; 博客真好,可以做笔记

博客园 首页 新随笔 联系 订阅 管理

-------说明----

模拟把数据库某个表中的数据保存到文件中,然后再把文件中的数据显示出来

仅仅是个模拟,没有连数据库。

这是一个随便测试的例子 

--------------

 

------------Unit开始

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TmyRecord_Table01=packed record
MyId:Integer;
Myname:array[0..199] of Char;
Myname01:string[100];
end;
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
DataCount=20;
var
i:Integer;
MyTable01:TmyRecord_Table01;
DataFile:file of TmyRecord_Table01;
begin
//向文件中写数据
AssignFile(DataFile,'.\MyTable01.dat');
if not FileExists('.\MyTable01.dat') then
begin
Rewrite(DataFile);
end
else
Reset(DataFile);
Seek(DataFile,Filesize(DataFile));
try
for i:=1 to DataCount do
begin
MyTable01.MyId :=i;
MyTable01.Myname:='按时间开个会的发大V撒打发斯蒂芬_';
MyTable01.Myname01:='sdajfgakjgdfjkasgdf_'+inttostr(i);
write(dataFile,MyTable01);
end;
finally
CloseFile(DataFile)
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
MyTable01:TmyRecord_Table01;
DataFile:file of TmyRecord_Table01;
MyTable01Size:Integer;
DataFileSize:Integer;
i:Integer;
vi,vj:Integer;
begin
//从文件中读取数据
AssignFile(DataFile,'.\MyTable01.dat');
if not FileExists('.\MyTable01.dat') then
begin
ShowMessage('文件不存在!');
Exit;
end
else
Reset(DataFile);
vi:=GetFileSize(TFileRec(DataFile).handle, 0);
vj:=SizeOf(MyTable01);
i:=SizeOf(DataFile);
MyTable01Size:=SizeOf(TmyRecord_Table01);
DataFileSize:=Filesize(DataFile);//DataFileSize有多少个记录类型的数据 此处是20个;也可以这么计算 (vi/vj)
ShowMessage('文件大小(Byte):'+IntToStr(vi)+' 记录类型大小(Byte):'+inttostr(vj)+' 文件对象大小(Byte):'+inttostr(i));
//Seek(DataFile,0); //把位置移动到开始位置
ShowMessage(IntToStr(FilePos(DataFile)));
for i:=0 to DataFileSize-1 do //不一定要这样写,也可以用while not Eof(DataFile) do ,还是用while do较好,哈哈
begin
//Seek(DataFile,MyTable01Size*);
//FileSeek(TFileRec(DataFile).handle,MyTable01Size,0);
read(DataFile,MyTable01);
//FileRead(TFileRec(DataFile).handle, MyTable01,MyTable01Size);
Memo1.Lines.Add(IntToStr(MyTable01.MyId)+' '+MyTable01.Myname+' '+MyTable01.Myname01);
end;
Seek(DataFile,0); //把位置移动到开始位置
if not Eof(DataFile) then
begin
read(DataFile,MyTable01);
//FileRead(TFileRec(DataFile).handle, MyTable01,MyTable01Size);
Memo1.Lines.Add(IntToStr(MyTable01.MyId)+' '+MyTable01.Myname+' '+MyTable01.Myname01);
end;

end;

end.

-------------
var
sFile:String;
f:TFileStream;
begin
sFile:=OpenDialog1.FileName;

if FileExists(sFile) then
f:=TFileStream.Create(sFile,fmOpenReadWrite)
else
f:=TFileStream.Create(sFile,fmCreate);
end;
---------------

--------
var
hFile: THandle;
iBytesRead: Integer;
Buffer: PChar;
begin
try
hFile := FileOpen( '.\MyTable01.dat', fmOpenRead);
FileSeek(hFile,2,0);
GetMem(Buffer,5);
FileRead(hFile, Buffer^,4);
ShowMessage(Buffer);
finally
FileClose(hFile);
FreeMem(Buffer);
end;
end;
----------

------------unit结束---

 

 

--------Form开始------

object Form1: TForm1
Left = 722
Top = 409
Width = 781
Height = 381
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 296
Top = 0
Width = 469
Height = 343
Align = alRight
ImeName = '中文(简体) - 搜狗拼音输入法'
ScrollBars = ssBoth
TabOrder = 0
end
object Button1: TButton
Left = 16
Top = 152
Width = 75
Height = 25
Caption = 'B1_写数据'
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 208
Top = 152
Width = 75
Height = 25
Caption = 'B2_读数据'
TabOrder = 2
OnClick = Button2Click
end
end

 

--------Form结束----------

posted on 2021-04-28 14:49  码农的笔记  阅读(366)  评论(0编辑  收藏  举报