Не может выполнить эту операцию с открытым / закрытым набором данных?

Привет, ребята, я написал функцию, которая должна проверить идентификатор, данный функции как iID и затем вывести имя члена, он найден, в противном случае он должен вывести, что он не найден

При вызове этой функции активна другая таблица, поэтому она должна изменить таблицу на Members (для поиска идентификатора), а затем обратно снова (у меня есть несколько таблиц)

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 ответ

Решение

Пример:

  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,[]);
Другие вопросы по тегам