我用BatchMove备份数据(本地Paradox),总是出现这样的提示:(50分)

  • 主题发起人 主题发起人 lancy
  • 开始时间 开始时间
L

lancy

Unregistered / Unconfirmed
GUEST, unregistred user!
Project Salary.exe raised exception class EAccess Violation with message
'Access violation' at address 005194F0 in module 'salary.exe'.Read of address
0000030C'.
我都将所有的表都关掉了。但执行到 frmLogin.TblPasswd.Close; 时就停下了,就出现
上面的提示。下面是我的程序段:
procedure TfrmBack.Button1Click(Sender: TObject);
var
ach:string;
begin
with frmSalary do
begin
table1.Close;
Query1.Close;
end;
frmAllSDetail.Table1.Close;
frmcollect.Table1.Close;
frmLogin.TblPasswd.Close;
frmSalaryItem.Table1.Close;
frmSalaryItem.Query1.Close;
if Edit1.Text='' then exit;
if copy(Edit1.Text,strlen(pchar(Edit1.Text)),1)='/' then
ach:=''
else
ach:='/';
Table1.Close;
Table2.CLose;
Table1.TableName := 'Salary.db';
Table2.TableName := Edit1.Text + ach + 'Salary.db';
Table1.Open ;
Table2.Open ;
BatchMove1.Mode := batCopy;
BatchMove1.Execute;
end;
 
frmLogin應該是form吧,檢查此form是否被free.
 
没有啊。而且我将该句屏蔽,它就在下一句停下。把
frmLogin.TblPasswd.Close;
frmSalaryItem.Table1.Close;
frmSalaryItem.Query1.Close;
都屏蔽掉,就出现:Table不存在。
 
按提示信息看,應該是哪個form或控件沒定義就使用,或free過後又用.
具體的,通過你這段帶码無法看出
 
确实有道理,但当我把上述三句都去掉了之后,却又出现“Table does not exist”,
后来我把要备份的表文件考了一份在备份的目的地之后,却可以正确运行,并备份了
.db和.px两个文件。也就是说,当目标文件夹里没有名字相同的文件时,程序出错;
而当目标文件夹里有相同名字的文件时,备份成功。这是什么道理?而且这不合逻辑,
实际上不应该如此。
上面的代码就只去掉下面三句。
frmLogin.TblPasswd.Close;
frmSalaryItem.Table1.Close;
frmSalaryItem.Query1.Close;

 
>>来自:richling, 时间:2002-4-25 10:05:00, ID:1066687
>>按提示信息看,應該是哪個form或控件沒定義就使用,或free過後又用.
>>具體的,通過你這段帶码無法看出

同意 . 我也出过那样的错. 后来发现的, Free早了. 只 Close 就可以了.

 
那个早就改了,可又出现另外的问题:当目标文件夹里没有名字相同的文件时,程序出错;
而当目标文件夹里有相同名字的文件时,备份成功。这是什么道理?该怎样改呢?
 
后退
顶部