![]() |
SQLite - не могу подключить к Air
Создана база данных, делаю все как в примере
Создал простейшую базу данных для эксперимента. Код AS3:
openSuccess selectError Скажите, плиз, откуда взяться ошибке? Добавлено через 1 час 44 минуты Да, собственно ошибка: selectError SQLError: 'Error #3115: SQL Error.', details:'no such table: 'nnn'', operation:'execute', detailID:'2013' Но эта таблица в базе данных есть. Перепробовал несколько готовых файлов баз, создавал свои простейшие - ошибка со всеми одна и та же:((( |
Если таблица есть - заключать её в тильды. Так же заключать в тильды названия полей:
Код AS1/AS2:
Код AS3:
Кстати, очень хочу написать серию статей по SQLITE в AIR. Будет кому интересно - начну писать. |
DaFive, спасибо, но если бы все так просто решалось... Тильды не помогли. Ошибка прежняя - нет таблицы.
Статьи по SQLite конечно актуальны, пиши обязательно. |
Тогда другой вопрос. Точно ли база ccc.sqlite лежит в applicationStorageDirectory с теми таблицами, которые ты создавал? Потому что в случае с ошибкой в путях - эйр создаст пустую базу ccc.sqlite.
Или выполни запрос после коннекта: Код AS3:
Или попробуй создай базу, скажем в userDirectory/test/ вручную, через sqlite expert personal (советую скачать, бесплатна и очень помогает). Да, и поскольку коннект к базе асинхронный - дожидайся завершения 1 запроса по евенту, а потом запускай следующий. А вообще - лучше сделай для начала синхронный коннект к базе. |
Цитата:
Цитата:
Цитата:
Цитата:
Добавлено через 1 минуту Я смотрю проблема не только у меня. Поиск в гуле выдает, что проблема у многих, но самое интересное, что нигде нет решения. |
Цитата:
Проверь существование файла через File.applicationStorageDirectory.resolvePath("ccc.sqlite").exists. И я не уверен что applicationStorageDirectory - это bin-debug. В Винде, она вроде как в юзерской папке находится. Добавлено через 8 минут Ну да, так и есть: http://blog.usu.edu/flexing/2008/09/...oss-platforms/ |
Ну так у меня bin-debug и находится в юзерской папке
Код AS3:
Добавлено через 3 минуты Да и вообще, как приложение может не найти путь к базе данных, если у меня слушатель открывает openSuccess только в случае успешного соединения к базе? А это всегда успешно происходит. Добавлено через 7 минут Может Air как-то кэширует базы данных? |
Да не кеширует. Оно всегда будет успешно отрабатывать коннект, потому что нет проверки на существование файла. Оно его создаст или приконнектится к существующему, в случае если файл не создан. Приложение не сможет создать БД в случае, если путь будет в папку, доступ к которой запрещен. Тогда и вывалится ошибка.
Протрейсить можно еще путь: File.applicationStorageDirectory.nativePath. Что выведет? |
Цитата:
Вывело "C:\Users\Astraport2011\AppData\Roaming\diary\Local Store" |
Ну вот. Там есть что-нибудь?
|
Похоже мы приближаемся к истине:)
По этому пути действительно файл базы около 1Кб, тогда как реальный 500 Кб. Просто поменял файлы и вроде все ОК, пока не выводил результаты. Не пойму ничего с этой файловой системой. Добавлено через 3 минуты Мне как распространять такое приложение? Просить юзера скопировать файл в папку такую-то лежащую там-то? Неужели нельзя проще сделать - искать файл там же где лежит SWF? |
Цитата:
http://*************/clip/m57729/1310...-clip-37kb.png Файл profisend.db - это моя чистая база (структура таблиц, + некоторые данные) Вообще лучше работать с юзерской папкой, в ней всегда открыт доступ. Так вот. Этот файл я копирую в папку программы, которая находится в папке File.userDirectory. После копирования - устанавливаю коннект. Почему копирую - смотри ниже. Если искать файл в директории приложения - нужно использовать не applicationStorageDirectory, а просто applicationDirectory. После установки - эта папка является местом, куда и было установлено приложение. Но тут косяк. Если установил в программ файлс - записать ты туда ничего не сможешь без админских прав (hello, Windows 7). Если база readonly - сойдет. Не ридонли - копирую "шаблон" базы туда, куда мне нужно и где гарантировано будет доступ на запись. Зато есть один бонус. Если юзер испортил базу - базу можно всегда восстановить из "шаблона", который включен в установщик приложения и находится рядом с ним в applicationDirectory. Это в моем случае, а как поступить тебе - уж не знаю, потому что не знаю что с ней будет происходить. |
DaFive, спасибо тебе огромное и плюсы в карму:)
Проблема решена и на будущее важная информация. |
Да не за что. Обращайся.
|
DaFive, что то я решил по твоему методу скопировать файл базы в applicationStorageDirectory.
Использую такой код при инициализации приложения: Код AS3:
Вот думаю, по идее у меня приложение только для чтения, писать от приложения ничего не будет. Может быть мне действительно все пути переписать на applicationDirectory? Но на будущее все же нужно и нормальное решение знать... |
File.documentsDirectory - папка с документами юзера. Уверен, что туда записывается нормально? Пихай просто в userDirectory/название_программы_к_примеру/.
Хотя если для чтения - можешь прописать и на applicationDirectory. Я вот так делаю в своей (на XP и 7 летает нормально): Код AS3:
|
DaFive, это действительно лучший вариант.
А нельзя ли заэмбедить файл базы? Чтобы файла базы и не видно было совсем, внутри swf. Все равно запись в него не производится. |
Внутрь swf если только текстом (XML к примеру). База-то большая?
|
XML не вариант, не удобно мне.
Цитата:
|
Создавать на лету, а потом убивать? - опять же все запросы хранить в коде. Вообще есть ли какой-то смысл прятать или зашивать базу, если содержимое всегда можно просмотреть?
|
Да, очень не хватает инфы о работе AIR+MySQL
|
AIR + MySQL и не будет. Ибо для MySQL нужен свой сервер.
Вот SQLite есть. |
zerAlex2, mdm Zinc может работать с MySQL, как локально так и удаленно.
|
| Часовой пояс GMT +4, время: 08:51. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.