Снегопат https://snegopat.ru/forum/ |
|
Sqlite - кто тут просил? https://snegopat.ru/forum/viewtopic.php?f=1&t=325 |
Страница 1 из 3 |
Автор: | Magister [ 22 дек 2012, 23:08 ] |
Заголовок сообщения: | Sqlite - кто тут просил? |
Пока работа над SynEdit заглохла (никак не могу до конца понять логику сворачивания кода в SynEdit...), то в качестве разминки для ума решил сделать аддин sqlite. Пока умеет немного - открыть базу, выполнить произвольный запрос, вернуть результат. Методы: OpenDatabase(dbFile) - открыть базу по пути. При этом создается внутренний объект для работы с базой, собственно открытия файла не происходит. Возвращает строку с идентификатором базы, его нужно использовать дальше для работы с базой. CloseDatabase(db) - освободить внутренний объект для указанной базы. Возвращает булево - true или false. False может быть, если переданный идентификатор не существует. ExecSQL(db, sql) - выполнить произвольный запрос в указанной базе. Возвращает:
- для остальных запросов - количество "задетых" строк (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 |
Автор: | orefkov [ 24 дек 2012, 08:55 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
Дал правов на коммиты в scripts, можешь заливать. Какая версия sqlite используется? Как в ТЗ выгружаешь, через COM ? |
Автор: | Magister [ 24 дек 2012, 11:06 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
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); ... |
Автор: | orefkov [ 24 дек 2012, 12:20 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
Код: var obj = addins.byUniqueName("sqlite").object; db = obj.OpenDatabase(":memory:") res = obj.ExecSQL(db, "SELECT sqlite_version()") Выдает EOleException: ???????? ??? ??????? в окно сообщений. |
Автор: | Magister [ 24 дек 2012, 12:31 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
Ну как бы логично. 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) Всё работает. Сейчас добавлю вырезку недопустимых символов. |
Автор: | orefkov [ 24 дек 2012, 12:36 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
А, понял. Лучше не вырезку, заменяй на "_". И сообщения бы читабельные, а не ?????? |
Автор: | Magister [ 24 дек 2012, 13:07 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
orefkov писал(а): А, понял. Лучше не вырезку, заменяй на "_". И сообщения бы читабельные, а не ?????? Ок, сделал замену. Правда список символов доступных не знаю где взять, добавил пока основное - скобки, точку, запятую, решетку, слеши. По поводу сообщений - тут проблема с кодировкой. У меня внутренняя кодировка - UTF-8, а в 1С - UTF-16. Так что чтобы понять, надо ли перекодировать сообщение - нужно знать откуда оно. Пока добавил перекодировку, если исключение возникает не при выполнении запроса. Будет ещё где-то не та кодировка - буду дальше думать. P.S. блин, хрен разберешься с этим fossil... Еле залил. |
Автор: | orefkov [ 24 дек 2012, 15:15 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
Цитата: Правда список символов доступных не знаю где взять Ну, я предполагаю, что имена колонок в 1Сной ТЗ должны удовлетворять правилам именования идентификаторов. Поэтому все, что не подходит - заменять. Кстати, а в 7ке без проблем любые имена для колонок ТЗ можно использовать. Сейчас проверил на 1sqlite, возвращает тз с колонкой "sqlite_version()" |
Автор: | orefkov [ 24 дек 2012, 15:16 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
С fossil все просто fossil add fossil ci fossil push вот тут читай. |
Автор: | Magister [ 24 дек 2012, 16:54 ] |
Заголовок сообщения: | Re: Sqlite - кто тут просил? |
У меня чуть другая ситуация получилась. Написал commit message по-русски, в консоли. Закомитил, получили крякозябры (кодировка не та). Долго искал, как откатить коммит, таки придумал. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |