IBX TIBDatabase.GetTableNames не показывает вновь созданную таблицу

#delphi #firebird

#delphi #firebird

Вопрос:

Если я создаю новую таблицу в своей базе данных Firebird, а затем вызываю:

TIBDatabase.GetTableNames, вновь созданная таблица не перечисляется: я должен сначала выдать:

 IBDatabase1.Connected := False;
IBDatabase1.Connected := True;
 

и тогда я могу вызвать TIBDatabase.Получить имена и перечислить вновь созданную таблицу.

Следующая функция использует TIBDatabase.GetTableNames для определения существования заданного имени таблицы, переданного в качестве параметра

 function TableExists(const aTableName: String): Boolean;
var
  ListOfExistingTables: TStringList;
begin
  Result:= False;
  ListOfExistingTables:= TStringList.Create;
  try
    IBDatabase1.GetTableNames(ListOfExistingTables);
    Result:= (ListOfExistingTables.IndexOf(aTableName) > - 1);
  finally
    ListOfExistingTables.Free;
  end;
end;
 

Ответ №1:

В Firebird даже изменения метаданных изолированы в транзакциях. Поэтому вам нужно зафиксировать транзакцию, которую вы использовали для создания таблицы. Возможно, вам также нужно зафиксировать транзакцию, которая используется IBX для чтения имен таблиц.

Комментарии:

1. Спасибо большое! Я выдал if IBTransaction1. Внутренняя транзакция, затем IBTransaction1. Фиксация; и теперь все работает как по маслу!