#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. Фиксация; и теперь все работает как по маслу!