我无法让某个表在我的程序的多个实例中打开。 发生的事情是我正在尝试允许用户打开并用旧表(不包括在数据字典中)替换当前表(数据字典的一部分 - 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,似乎是一个Windows错误,因为错误发生在对话窗口中。并且是Exclusive被设置为false。
任何关于为什么会发生这种情况以及如何解决这个问题的人都会受到赞赏。
由于
答案 0 :(得分:4)
您不清楚具体错误 - 是Windows错误还是Advantage错误?
如果是Windows错误,可能是因为您已指定对表(ImageTable.Exclusive = True
)的独占访问权限。这意味着应用程序的第一个实例可以打开它,但后续尝试会因File is in use
错误而失败。
如果是Advantage错误,那么Advantage帮助文件(此处为v11's documentation,因为您未指定ADS版本 - 请注意它在框架中,因此您可能需要使用this link ,导航至Advantage Developers Guide
,展开Part 1->Chapter 4 - Dictionaries->Understanding Dictionaries
主题)说:
数据字典是一个特殊文件,用作数据库表的唯一访问点
请注意唯一接入点。一旦表在数据字典中,它就属于数据字典。您正试图用字典范围之外的内容替换该引用,这是不允许的。我很确定问题与此有关 - ADS对字典中包含的表进行专有锁定,并通过字典控制通过服务器对这些文件的访问。
您需要从字典中删除表并将其用作自由表,或者提出不同的策略来删除当前数据并将其替换为其他数据以保持字典的完整性。< / p>
答案 1 :(得分:2)
看起来您只使用“打开对话框”来获取表格的名称 在“打开”对话框中,尝试设置选项ofShareAware
OpenDialog1.Options:= OpenDialog1.Options + [ofShareAware];
一旦使用Advantage打开表,模式就是拒绝写入,拒绝读取,因此如果有任何非优势尝试打开表格,将返回共享错误。