Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.11.2013, 10:58
Mel Mel вне форума
Аспирант
Отправить личное сообщение для Mel Посмотреть профиль Найти все сообщения от Mel
 
Регистрация: 24.02.2012
Сообщений: 33

SQLite и Javascript
Поиском не нашел. Может, не те вопросы задавал поиску.
Суть проблемы в следующем: имеется HTA, который обращается к локальной SQLite базе через ODBC.
Имеем функцию, выдающую данные из Recordset по запросу.

База открыта, соединение установлено. Обращаемся к первой записи. При первом вызове всё прекрасно, при втором ошибка «Произошла ошибка во время выполнения многошаговой операции».

Ради эксперимента сделал alert содержимого, полученного запросом, затем присвоение. В результате уже при первом запросе alert показывает всё, а присвоение уже выдаёт ошибку.

То есть, при повторном обращении к одному и тому же Recordset'у получение значения поля вызывает ошибку.

Подскажите, где можно накопать на эту тему внятных объяснений.

Для проверки можно использовать базу данных Skype. Строка соединения:
Код:
DRIVER=SQLite3 ODBC Driver;Database=<путь до базы данных Skype>main.db;LongNames=0;Timeout=1000;NoTXN=0;
SyncPragma=NORMAL;StepAPI=0;
Открываем таблицу контактов:
Код:
select * from Contacts
Прочитайте два раза подряд содержимое поля «skypename» первой записи.

При этом поля «id», «is_permanent» и «type» читаются. Получается, такая проблема возникает при чтении только текстовых полей.
Ответить с цитированием
  #2 (permalink)  
Старый 14.11.2013, 14:43
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Рекомендую переписать все с использованием node-webkit.
Ответить с цитированием
  #3 (permalink)  
Старый 15.11.2013, 06:23
Mel Mel вне форума
Аспирант
Отправить личное сообщение для Mel Посмотреть профиль Найти все сообщения от Mel
 
Регистрация: 24.02.2012
Сообщений: 33

К сожалению, переписать всё — не вариант. База SQLite — это один и далеко не самый важный момент в проекте. Переписывать весь проект нереально, это более семидесяти мегабайт кода.

Прикрутить sql.js тоже не получается. В HTA при подключении модуля выскакивает ошибка:


Последний раз редактировалось Mel, 15.11.2013 в 06:39.
Ответить с цитированием
  #4 (permalink)  
Старый 15.11.2013, 09:07
Mel Mel вне форума
Аспирант
Отправить личное сообщение для Mel Посмотреть профиль Найти все сообщения от Mel
 
Регистрация: 24.02.2012
Сообщений: 33

Удивительно. Если перед обращением к свойству ADODB.Recordset.Fields.Item (FieldName).Value выполнить Recordset.Save('d:\\1.txt', 1), значение получается. Правда, лишь в том случае, если файла 1.txt не существует. Иначе опять ошибка.

Можно, конечно, записывать какой-то временный файл, проверять его наличие при каждом обращении и, если есть, грохать, но как-то мне не кажется это правильным выходом из ситуации. Requery и Resync для SQLite не работают.
Ответить с цитированием
  #5 (permalink)  
Старый 18.11.2013, 06:25
Mel Mel вне форума
Аспирант
Отправить личное сообщение для Mel Посмотреть профиль Найти все сообщения от Mel
 
Регистрация: 24.02.2012
Сообщений: 33

Проблема решилась изменением параметров при открытии Recordset'а.

Было:
Recordset.Open (Sql, ConnectionString, 0, 2);


CursorType - adOpenForwardOnly(0) - определяет forward-only курсор. То же, что и статический курсор, но вы можете прокручивать записи только вперед. Это оптимизирует выполнение, если вы должны сделать только один проход по Recordset'у.

Стало:
Recordset.Open (Sql, ConnectionString, 3, 2);


CursorType - adOpenStatic(3) - Определяет статический курсор. Статическая копия набора записей, которую вы можете использовать, чтобы найти данные или генерировать отчёты. Добавления, изменения или удаления другими пользователями не видимы.

Последний раз редактировалось Mel, 18.11.2013 в 06:41.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34