Как правило, вы можете создавать объекты базы данных Firebird в любом порядке, при условии, что они не зависят друг от друга. Если это так, то, очевидно, вам нужно создать зависимые объекты перед созданием зависимых объектов.
Если у вас есть объекты с круговыми ссылками, то сначала создайте один из них с пустым телом, создайте другой, а затем заполните содержимое первого, используя ALTER TABLE
или соответствующий оператор. Такие инструменты, как IBExpert, Database Workbench или FlameRobin анализируют зависимости, поэтому следование порядку создания в написанных ими скриптах всегда должно работать.
Если ваш сценарий, созданный IBExpert, работает, но ваш собственный код, выполняющий действия в том же порядке, не работает, то причина этого может заключаться в том, что IBExpert фиксирует каждый оператор DDL отдельно (тогда как ваш код «т). Вы можете сделать то же самое в своем коде, и вы должны. Ваш столбец autoinc включает триггер, который сам зависит от генератора, поэтому убедитесь, что вы зафиксировали после создания таблицы и генератора, прежде чем создавать триггер.
Edit:
Вам следует убедиться, что вы выполняете только несколько операторов с компонентами базы данных, которые могут это сделать. Я не знаю Zeos, но из этой статьи базы знаний кажется, что и 1016 *, и TZUpdateSQL
поддерживают несколько операторов в одном вызове выполнения. В качестве альтернативы вы можете использовать TZSQLProcessor
для загрузки полного сценария, созданного IBExpert, и его выполнения.
Метод TZConnection.ExecuteDirect()
, с другой стороны, может не поддерживать несколько операторов, и в этом случае вы получите синтаксические ошибки после окончания первого оператора. Это
CREATE GENERATOR GEN_EMAIL_ACCOUNTS_ID;
SET GENERATOR GEN_EMAIL_ACCOUNTS_ID TO 2;
- это два утверждения, и вам может потребоваться передать каждое отдельно TZConnection.ExecuteDirect()
.