По крайней мере, часть проблемы связана со смешением метода open () класса SQLConnection - который является синхронным - с событиями, которые должны использоваться только при открытии асинхронного соединения. Вы бы открыли асинхронное соединение, используя метод openAsync () вместо метода open ().
Документы в этом вопросе противоречивы, поскольку фактически можно прослушивать SQLEvent.OPEN при открытии синхронного соединения. Однако обратите внимание, что слушатель SQLErrorEvent.ERROR не запускается в вашем коде, и вместо этого вы получаете ошибку времени выполнения. В документах не упоминается SQLErrorEvent.ERROR, работающий с синхронным соединением; это действительно так.
Возможно, это ошибка AIR, но я подозреваю, что смешивание синхронных методов с асинхронными прослушивателями событий - просто серая область. Также вероятно, что проблема может быть решена, если вместо этого вы поместите вызов open () в блок try / catch, который является рекомендуемым способом перехвата синхронных ошибок:
try
{
conn.open(db);
trace("Hey, is that a database?", (db.exists));
}
catch (err:SQLError)
{
trace("Error, database not created:", err.message);
trace("Error details:", err.details);
}