• Delphi中模拟把数据库数据保存成文件然后再读取出来(RecordFile)


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

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

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

    这是一个随便测试的例子 

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

    ------------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结束----------

  • 相关阅读:
    聊聊 node 如何优雅地获取 mac 系统版本
    VUE引入@wecom/jssdk,使用应用的jsapi_ticket,通过agentConfig注入应用
    前端知识学习03
    前端知识学习01
    前端知识学习02
    前端知识学习04
    主流开源分布式图计算框架 Benchmark
    一文带你了解 「图数据库」Nebula 的存储设计和思考
    macOS 安装 Nebula Graph 看这篇就够了
    BIGO 的数据管理与应用实践
  • 原文地址:https://www.cnblogs.com/dmqhjp/p/14714089.html
Copyright © 2020-2023  润新知