Снегопат

Обсуждение Снегопата
Текущее время: 28 апр 2024, 23:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Sqlite - кто тут просил?
СообщениеДобавлено: 22 дек 2012, 23:08 
Не в сети

Зарегистрирован: 04 июн 2012, 09:28
Сообщения: 343
Пока работа над SynEdit заглохла (никак не могу до конца понять логику сворачивания кода в SynEdit...), то в качестве разминки для ума решил сделать аддин sqlite.

Пока умеет немного - открыть базу, выполнить произвольный запрос, вернуть результат.

Методы:

OpenDatabase(dbFile) - открыть базу по пути. При этом создается внутренний объект для работы с базой, собственно открытия файла не происходит.
Возвращает строку с идентификатором базы, его нужно использовать дальше для работы с базой.

CloseDatabase(db) - освободить внутренний объект для указанной базы.
Возвращает булево - true или false. False может быть, если переданный идентификатор не существует.

ExecSQL(db, sql) - выполнить произвольный запрос в указанной базе.
Возвращает:
    - для запросов вида SELECT - таблицу значений (ValueTable)
    - для остальных запросов - количество "задетых" строк (Affected rows)
    - при возникновении ошибки - False
Также при возникновении ошибки ругается в окно сообщений с описанием что именно не так.

Пример использования:
Код:
var obj = addins.byUniqueName("sqlite").object;
db = obj.OpenDatabase("d:\\Misha\\Projects\\Lazarus\\Snegopat\\sqlite\\test.sqlite")
res = obj.ExecSQL(db, "CREATE TABLE test(id INTEGER PRIMARY KEY ASC, txt)")
message(res)
res = obj.ExecSQL(db, "INSERT INTO test(txt) values ('Row 1'),('Row 2')")
message(res)
res = obj.ExecSQL(db, "SELECT * FROM test")
obj.ExecSQL(db, "DROP TABLE test")
obj.CloseDatabase(db)
res.ВыбратьСтроку()


Вобщем, если надо - берите, пользуйтесь :)
Предложения к улучшению принимаются.

Файлы см. в репозитории.

P.S. вау, юбилейное сообщение - №100 :)

_________________
В реальності все не так, як насправді


Последний раз редактировалось Magister 25 дек 2012, 16:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 08:55 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Дал правов на коммиты в scripts, можешь заливать.
Какая версия sqlite используется?
Как в ТЗ выгружаешь, через COM ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 11:06 
Не в сети

Зарегистрирован: 04 июн 2012, 09:28
Сообщения: 343
orefkov писал(а):
Дал правов на коммиты в scripts, можешь заливать.

Сейчас буду пробовать upd. Залил. Надеюсь, всё правильно сделал?
orefkov писал(а):
Какая версия sqlite используется?

Скачал на днях с оф. сайта - sqlite-dll-win32-x86-3071500
В принципе её можно свободно обновлять, если только не меняется интерфейс. DLL используется стандартная.
orefkov писал(а):
Как в ТЗ выгружаешь, через COM ?

Я только один вариант придумал - через COM. Выгружаю примерно так:
Код:
vt := Designer.v8New('ValueTable', nil);
vt.Columns.Add(...);
...
vtRow := vt.Add();
vtRow.set(idx, val);
...

_________________
В реальності все не так, як насправді


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 12:20 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Код:
var obj = addins.byUniqueName("sqlite").object;
db = obj.OpenDatabase(":memory:")
res = obj.ExecSQL(db, "SELECT sqlite_version()")

Выдает
EOleException: ???????? ??? ???????
в окно сообщений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 12:31 
Не в сети

Зарегистрирован: 04 июн 2012, 09:28
Сообщения: 343
Ну как бы логично.
1С не дает добавить колонку с именем "sqlite_version()" в таблицу значений :)

Вот так:
Код:
var obj = addins.byUniqueName("sqlite").object;
db = obj.OpenDatabase(":memory:")
res = obj.ExecSQL(db, "SELECT sqlite_version() version")
res.ВыбратьСтроку()
obj.CloseDatabase(db)

Всё работает.

Сейчас добавлю вырезку недопустимых символов.

_________________
В реальності все не так, як насправді


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 12:36 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
А, понял. Лучше не вырезку, заменяй на "_".
И сообщения бы читабельные, а не ??????


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 13:07 
Не в сети

Зарегистрирован: 04 июн 2012, 09:28
Сообщения: 343
orefkov писал(а):
А, понял. Лучше не вырезку, заменяй на "_".
И сообщения бы читабельные, а не ??????

Ок, сделал замену. Правда список символов доступных не знаю где взять, добавил пока основное - скобки, точку, запятую, решетку, слеши.
По поводу сообщений - тут проблема с кодировкой. У меня внутренняя кодировка - UTF-8, а в 1С - UTF-16. Так что чтобы понять, надо ли перекодировать сообщение - нужно знать откуда оно.
Пока добавил перекодировку, если исключение возникает не при выполнении запроса. Будет ещё где-то не та кодировка - буду дальше думать.

P.S. блин, хрен разберешься с этим fossil...
Еле залил.

_________________
В реальності все не так, як насправді


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 15:15 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Цитата:
Правда список символов доступных не знаю где взять

Ну, я предполагаю, что имена колонок в 1Сной ТЗ должны удовлетворять правилам именования идентификаторов.
Поэтому все, что не подходит - заменять.
Кстати, а в 7ке без проблем любые имена для колонок ТЗ можно использовать.
Сейчас проверил на 1sqlite, возвращает тз с колонкой "sqlite_version()"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 15:16 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
С fossil все просто
fossil add
fossil ci
fossil push
вот тут читай.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Sqlite - кто тут просил?
СообщениеДобавлено: 24 дек 2012, 16:54 
Не в сети

Зарегистрирован: 04 июн 2012, 09:28
Сообщения: 343
У меня чуть другая ситуация получилась.
Написал commit message по-русски, в консоли. Закомитил, получили крякозябры (кодировка не та).
Долго искал, как откатить коммит, таки придумал.

_________________
В реальності все не так, як насправді


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB