记录文件出错,why?(50分)

  • 主题发起人 主题发起人 jbas
  • 开始时间 开始时间
J

jbas

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我的代码,总是报错地址出错。
unit Unit2note2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
FN_NOTES='note.dat';

type
TNoteRecord=packed record
Fcapture:string[30];
Fmemo:string[255];
end;
TForm2 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
RRecord:tNoteRecord;
rfile:file of Tnoterecord;
ce,me:string;
begin
ce:=form2.Caption;
me:=form2.Memo1.Text;
with RRecord do
begin
Fcapture:=ce;
Fmemo:=me;
end;
assignfile(RFile,FN_NOTES);
if not fileexists(FN_NOTES) then
rewrite(RFile)
else
begin
reset(RFile);
seek(RFile,filesize(RFile));
write(RFile,RRecord);
closefile(rfile);
end;
end;
end.
 
如果把它指定值就行了。
ce:='ss';
me:='fff';
不是类型不符的错误吧?
但这样也不行呀。
ce:='ss';
me:=form2.memo1.lines.text;//string跟string对应了,可还是不行。
大侠们看一下了。
 
编译运行没有错误.
 
执行时出错呀。
什么地址出错的错误。
 
1、form2有问题
你确定它已经创建了?

2、if not fileexists(FN_NOTES) then
rewrite(RFile)
else
有问题,难道文件不存在,这条纪录就不写了?
 
我刚试了一下,单个form2这段代码没有问题。
我现在是form1的button.onclick事件中,form2是动态创建的。
procedure TForm1.Button1Click(Sender: TObject);
var
fm:tform2;
begin
fm:=tform2.CreateParented(HWND_DESKTOP);
fm.Caption:=form1.Edit1.Text;
fm.Memo1.Lines.Add(form1.Memo1.Text);
fm.Top:=100;
fm.Left:=200;
fm.Show;
end;

Pipi.说的对,我是否应该这样才不会漏了记录呢?
if not fileexists(FN_NOTES) then
begin
rewrite(RFile);
write(RFile,RRecord);
end
else
不过我总觉的这样判断太麻烦了,大侠有没有好一点的方法,可以一步到位的。
即要是没有文件,就首先创建一个文件。再加入一条记录
有文件就直接加入一条记录。
 
就是了form2用的不对
 
全局变量form2你都没有给它赋值
创建Tform2那里不要用局部变量 fm ,直接使用form2
 
大侠:
那怎么用呀?
 
关于文件不存在,改成

if not fileexists(FN_NOTES) then
rewrite(RFile)
//不存在就执行这段
reset(RFile)
//不管存在与否这里都执行
seek(RFile,filesize(RFile));
write(RFile,RRecord);
closefile(rfile);
 
关于文件不存在,已经收到,谢谢了!
但第一个问题,你说改成form2,不用fm,好想不行。因为我不是单纯的要form.show一次。
每form1.button1.click后都产生一个form2表单。
我现在把fm改成了全局变量,还是不行。程序代码如下。还请Pipi.大侠指教。
unit Unit1note;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,unit2note2;//好象只能在这里引用unit2note2,在implementation时无法申明fm了。


type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
fm:TForm2;//定义全局变量吧!
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
fm:=TForm2.CreateParented(HWND_DESKTOP);
fm.Caption:=form1.Edit1.Text;
fm.Memo1.Lines.Add(form1.Memo1.Text);
fm.Top:=100;
fm.Left:=200;
fm.Show;
end;

end.
 
我太粗心了,没有理会Pipi.的意思。现在懂了。谢谢!
unit Unit1note;

interface

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


type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
uses unit2note2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
application.CreateForm(Tform2,form2);
form2.Caption:=form1.Edit1.Text;
form2.Memo1.Lines.Add(form1.Memo1.Text);
form2.Top:=100;
form2.Left:=200;
form2.Show;
end;

end.
 
后退
顶部