优势表文件正在使用错误。我该如何解决?
Posted
技术标签:
【中文标题】优势表文件正在使用错误。我该如何解决?【英文标题】:Advantage Table File in use error. How can I resolve? 【发布时间】:2012-09-21 22:33:13 【问题描述】:我无法在我的程序的多个实例中打开某个表。 发生的事情是我试图允许用户打开并用旧表(不包含在数据字典中)替换当前表(数据字典的一部分 - FileForm.ImagesTable)。它适用于程序的一个实例,但是当我们尝试在另一个实例上同时打开同一个文件时。我收到以下错误。
FileName.ADT 此文件正在使用中。输入新名称或关闭在其他程序中打开的文件。
下面是我将表名和数据路径重新分配给所选表的代码。
OpenDialog1.FileName := '*.adt';
OpenDialog1.Filter := 'Software 6.0 Files (*.adt)|*.adt|Software 5.x Files (*.dbf)|*.dbf';
OpenDialog1.InitialDir := DataPath;
if OpenDialog1.Execute then
begin
Str1 := Trim(OpenDialog1.FileName);
if Length(Str1) = 0 then
Exit;
DSImage.Enabled := False;
with FileForm.ImagesTable do
begin
Active := False;
AfterOpen := FileForm.TableOther.AfterOpen;
DataBaseName := ExtractFilePath(Str1);
TableName := ExtractFileName(Str1);
Active := True;
end;
end;
编辑 *使用Advtantage 8.1,似乎是一个窗口错误,因为错误发生在对话窗口中。是的 Exclusive 设置为 false。
感谢您对为什么会发生这种情况以及如何解决此问题的任何想法。
谢谢
【问题讨论】:
Trevor:如果您尝试对表进行结构更改,您可能需要独占(锁定)访问。尝试专门打开表以执行重组。 您能否更具体地了解该错误?是 Advantage 错误还是 Windows 错误? (我认为这不是重组问题,但@Robert 的评论可能仍然适用:您检查过ImagesTable.Exclusive
属性吗?如果您在应用程序的第一个实例中使用Exclusive = True
打开它,第二个会出现错误关于尝试打开它。)
嘿罗伯特,我要替换的表与现有表的结构相同。
请说明具体的错误类型(Windows 或 ADS)。如果您不确定,请对错误对话框进行屏幕截图并将其添加到您的答案中。
我添加了错误截图。谢谢
【参考方案1】:
您不清楚具体错误 - 是 Windows 错误还是 Advantage 错误?
如果是 Windows 错误,可能是因为您指定了对表的独占访问权限 (ImageTable.Exclusive = True
)。这意味着应用程序的第一个实例可以打开它,但随后的尝试将失败并出现 File is in use
错误。
如果是 Advantage 错误,请查看 Advantage 帮助文件(在 v11's documentation 中,因为您没有指定 ADS 的版本 - 请注意它在框架中,因此您可能需要使用 this link,导航到 @ 987654325@,展开Part 1->Chapter 4 - Dictionaries->Understanding Dictionaries
话题)说:
数据字典是一个特殊文件,用作数据库表的唯一访问点
注意唯一的访问点。一旦表在数据字典中,它就属于数据字典。您试图用字典范围之外的内容替换该引用,这是不允许的。我很确定问题与此有关 - ADS 对字典中包含的表设置了专有锁定,并通过字典通过服务器控制对这些文件的访问。
您需要从字典中删除表并将其用作空闲表,或者提出不同的策略来删除当前数据并用其他数据替换以保持字典的完整性。
【讨论】:
我认为您的观点是将数据字典服务器作为唯一的访问点。但我确实相信该错误是 Windows 错误。并且 Exclusive 设置为 false。【参考方案2】:您似乎只是使用“打开对话框”来获取表的名称。 在打开对话框中尝试设置选项ofShareAware
OpenDialog1.Options := OpenDialog1.Options + [ ofShareAware ];
使用 Advantage 打开表后,模式为拒绝写入、拒绝读取,因此如果任何非 Advantage 尝试打开表,则将返回共享错误。
【讨论】:
工作就像一个魅力。谢谢!以上是关于优势表文件正在使用错误。我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章