无法在打开/关闭数据集上执行此操作?

时间:2015-10-08 09:22:45

标签: delphi ms-access datamodule

大家好我编写了一个函数,它必须检查给函数的ID iID,然后输出它的成员名称,否则必须输出它不是结果

调用此函数时,另一个表处于活动状态,因此必须将表更改为Members(以搜索ID),然后再将表更改为(我有多个表)

function fCheckID(iID:integer):String;
var sTable:string;
begin
sTable:=datamoduleX.tableX.TableName;
datamoduleX.tableX.TableName:='Members';
 if datamoduleX.tableX.Locate('RefNo',iID,[]) then
  result:=dmRooiX.tblRooiX['Name']+' '+datamoduleX.tableX['Surname']
  else
  result:='ID: '+inttostr(iID)+' does not exist';
datamoduleX.tableX.TableName:=sTable;
end;

但问题是我每次调用此函数时都会收到一条错误,上面写着"无法在打开的数据集上执行此操作"

如果我在运行我得到的函数之前关闭数据集"无法在已关闭的数据集上执行此操作"

我知道当我尝试访问表名或更改它时发生错误(当这3行被注释掉时,该函数没有给出错误)

我不知道如何使这项工作 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

示例:

  Table1.TableName := 'TABLE1';
  Table1.Open;  
  Table1.TableName := 'TABLE2';  <-- Cannot perform this operation on Open data set. Because Table1 is open
  Table1.Locate('ID',11,[]);

简单的解决方案

 Table1.TableName := 'TABLE1';
 Table1.Open;
 Table1.Close; <--Close table before change table name
 Table1.TableName := 'TABLE2';
 Table1.Open;  <-- Open new table before do Locate
 Table1.Locate('ID',11,[]);