请各位打下帮忙查查错(100分)

L

lizheng

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FindFile(path:string);
var
SearchRec: TSearchRec;
path1:string;
err:integer;
begin
try
err:=FindFirst(path+'*.*',faAnyFile, SearchRec);
while err = 0 do
begin
if SearchRec.Name[1]<>'.' then begin
if ((SearchRec.Attr and fadirectory)>0) AND (SearchRec.Name[1]<>'.') then
begin
table1.Append;
table1.FieldByName('文件编号').asinteger:=wenjianNO;
table1.FieldByName('文件名称').asstring:=searchrec.Name;
table1.FieldByName('文件类型').asstring:='文件夹';
table1.FieldByName('光盘编号').asinteger:=strtoint(form2.Edit2.Text);
wenjianNO:=wenjianNO+1;
try
path1:=path+String(SearchRec.Name)+'/';
Form1.FindFile(path1);
except
exit;
end;
end
else
table1.Append;
table1.FieldByName('文件编号').asinteger:=wenjianNO;
table1.FieldByName('文件名称').asstring:=searchrec.Name;
table1.FieldByName('文件类型').asstring:=ExtractFileExt(SearchRec.Name);
table1.FieldByName('光盘编号').asinteger:=strtoint(form2.Edit2.Text);
wenjianNO:=wenjianNO+1;
end;
err:= FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
end;

每次运行时,在DBGRID中文件夹总是会出现两次,就是说,若lz是一个文件夹,
则在运行后DBGRID中回记录成
文件编号 文件名称 文件类型 存入时间 所属文件夹 光盘编号
4 lz 文件夹 43
...
12 lz 43
...
而且如果用文件来记录(如下)就不会出现这种错误
procedure TForm1.FindFile(path:string);
var
SearchRec: TSearchRec;
path1:string;
err:integer;
begin
try
err:=FindFirst(path+'*.*',faAnyFile, SearchRec);
while err = 0 do
begin
if SearchRec.Name[1]<>'.' then begin
s:=string(Searchrec.Name);
if ((SearchRec.Attr and fadirectory)>0) AND (SearchRec.Name[1]<>'.') then
begin
writeln(f,'');
writeln(f,'文件夹<'+s+'>');
try
path1:=path+String(SearchRec.Name)+'/';
Form1.FindFile(path1);
except
exit;
end;
end
else
writeln(f,s+' '+IntToStr(Searchrec.size));
end;
err:= FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
writeln(f,'');
end;
end;
我百思不得其解,请帮老弟查查错.
 
var
SearchRec: TSearchRec;
path1:string;
err:integer;
begin
try
err:=FindFirst(path+'*.*',faAnyFile, SearchRec);
while err = 0 do
begin
if SearchRec.Name[1]<>'.' then begin
if ((SearchRec.Attr and fadirectory)>0) AND (SearchRec.Name[1]<>'.') then
begin
table1.Append;
table1.FieldByName('文件编号').asinteger:=wenjianNO;
table1.FieldByName('文件名称').asstring:=searchrec.Name;
table1.FieldByName('文件类型').asstring:='文件夹';
table1.FieldByName('光盘编号').asinteger:=strtoint(form2.Edit2.Text);
wenjianNO:=wenjianNO+1;
try
path1:=path+String(SearchRec.Name)+'/';
Form1.FindFile(path1);
except
exit;
end;
end
else
begin //这里要加上BEGIN...END
table1.Append;
table1.FieldByName('文件编号').asinteger:=wenjianNO;
table1.FieldByName('文件名称').asstring:=searchrec.Name;
table1.FieldByName('文件类型').asstring:=ExtractFileExt(SearchRec.Name);
table1.FieldByName('光盘编号').asinteger:=strtoint(form2.Edit2.Text);
wenjianNO:=wenjianNO+1;
end;
end;
err:= FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
end;

else后头忘了加BEGIN...END了
 
真是不好意思,本来还可以运行的程序,不知为什么又运行不了了,

情况是这样的,编译还可以通过,但在运行时会出现这样一个错误:

EDBENGINERROR,KEY violation,不知是什么意思,还望打下指点。
 
指你的程序导致数据库中主键的值出现重复,
key的值必须是单一的,你可设两个以上
field为key;也可加一field为+型,自加.
 
程序到是看明白了,估计begin是笔误,好象没什么问题.

KEY violation 是一种BDE错误
出现在两种情况下:
1:如上,是你的数据库中的KEY的问题
2:是你在进行数据库操作时,发生了数据值不匹配的问题!
比如将一个非整型的值复给整型.
 
BDE错误,主键冲突.
估计是你要写进去的记录在数据库表中已经存在,记录主键赋值有问题.
 

Similar threads

I
回复
0
查看
723
import
I
I
回复
0
查看
523
import
I
I
回复
0
查看
614
import
I
I
回复
0
查看
625
import
I
顶部