Я не могу записать в базу данных SQLLite в своем приложении AIR - PullRequest
2 голосов
/ 12 декабря 2011

Я публикую приложение AIR в режиме отладки с помощью FlashDevelop и включил базу данных в файлы / папки, которые будут опубликованы.Когда приложение запускается в первый раз, оно проверяет, есть ли экземпляр этого БД в applicationStorageDirectory, если его нет, копирует включенный экземпляр из applicationDirectory в applicationStorageDirectory.Это должно означать, что указанная база данных dbFile = File.applicationStorageDirectory.resolvePath(DB_FILE_NAME); теперь должна быть доступна для записи, однако, когда я запускаю приложение, я могу читать записи из таблицы, но когда я пытаюсь писать, используя оператор SQL, я получаю SQLError: 'Ошибка # 3122: попытканаписать базу данных только для чтения.

Я знаю, что это будет сгенерировано, если я попытаюсь записать в папку только для чтения applicationDirectory, но я, конечно, использую расположение File.applicationStorageDirectory, которое должно (насколько это возможно)насколько я знаю) быть доступным для записи.

Расположение базы данных в моей Windows 7, 64bit = C: \ Users \ sean.duffy \ AppData \ Roaming \ FishFightAppData \ Local Store \ db, это можно найти с помощью dbFileСвойство .nativePath, поэтому я уверен, что смогу обновить БД.

У кого-нибудь есть идеи?Я перепробовал все, что мог придумать, и искал повсюду, но, похоже, единственной общей причиной является попытка записи в asplicationDirectory, а не в каталог хранения ....

UPDATE ::

Мой плохой - только что понял, что я неправильно прочитал API сторонней библиотеки, которую я использую!Я должен был вызвать executeModify (оператор), который может изменить содержимое базы данных, вместо этого я вызываю execute (оператор), который не / не может перезаписать базу данных.

Исходный код скомпилирован в SWC, и не было документации, указывающей на необходимость использования executeModify, хотя я должен был догадаться по названию, которое, я полагаю!

Извините за это, и спасибоза вашу помощь

1 Ответ

1 голос
/ 04 января 2014

(В качестве публичной любезности вычеркнуть это из списка без ответа я пересылаю очевидное решение. Как обычно, спрашивающий может с радостью проигнорировать мое и опубликовать его самостоятельно и принять собственный ответ.)

В этом API вам нужно вызывать executeModify(statement), а не execute(statement). Последний не перезаписывает базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...