Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) написал статью  1с и sqlite (число прочтений - 24778 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #15 - 27. Августа 2007 :: 06:19
Печать  
kms писал(а) 26. Августа 2007 :: 17:11:
Z1 писал(а) 23. Августа 2007 :: 05:45:
Что лучше Litex ( или улучшенный свой объект  ) или достаточно odbc вопрос ?
odbc должен работать с Табличным Полем.

Прелесть в том, что отбросив odbc и написав поставщика непосредственно для SQLLITE, можно будет использовать его для любых данных SQLLITE, как на диске, так и в памяти.

А вот что еще интересно, в свете последних тенденций в синематографе, как оно у SQLLITE с распараллеливанием потоков?

sqlite работает в отдельном потоке. Начиная с версии 3.3.1 под Win32 дескриптор открытой БД можно передавать и использовать одновременно в нескольких потоках.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: написал статью  1с и sqlite
Ответ #16 - 27. Августа 2007 :: 06:33
Печать  
Z1 писал(а) 27. Августа 2007 :: 06:15:
Т.е. это недостатки взаимодействия объекта LiteX с внутренним языком 1с.

Ну да, я это и имел ввиду.

Задавать имена можно так:
Цитата:
The SQL statement may contain tokens of the form "?" or "?nnn" or ":aaa" where "nnn" is an integer and "aaa" is an identifier. Such tokens represent unspecified literal values (or "wildcards") to be filled in later by the sqlite3_bind interface. Each wildcard has an associated number which is its sequence in the statement or the "nnn" in the case of a "?nnn" form. It is allowed for the same wildcard to occur more than once in the same SQL statement, in which case all instance of that wildcard will be filled in with the same value. Unbound wildcards have a value of NULL.


Из 1С это делать получилось, хотя задать тип "lxInteger" - нет, но опять же это издержки враппера.
С параметрическими запросами и в транзакции результат стал поинтереснее.
  

_TestSQLLITE_001.ert ( 8 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #17 - 27. Августа 2007 :: 06:55
Печать  
тест на 1с с параметр. запросом получился
  

sample1.ert ( 7 KB | Загрузки )
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: написал статью  1с и sqlite
Ответ #18 - 27. Августа 2007 :: 06:58
Печать  
Z1 писал(а) 27. Августа 2007 :: 06:19:
Начиная с версии 3.3.1 под Win32 дескриптор открытой БД можно передавать и использовать одновременно в нескольких потоках.

Ага, я вчера начал изучать документацию и wiki, нашел много интересного.
Как я понимаю SQLITE это чистый embedded вариант db, пытаться прикручивать к ней серьезные многопользовательские нагрузки не стоит.
Надежность данных, по-любому, проиграет SQLServer, да, видимо и большинству бесплатных серверов.
Все же файловый вариант есть файловый вариант...

Т.е. есть пределы, они понятны; а о плюсах - прекрасно написано выше.

Z1, а правда, с практической точки зрения, ты как на настоящий момент используешь SQLITE?
Выгружаешь данные из 1С, а потом используешь их в скриптах на сайте?
Через LiteX?

Чего не хватает для комфортной работы c SQLITE в 1С?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #19 - 27. Августа 2007 :: 07:19
Печать  
kiruha писал(а) 26. Августа 2007 :: 20:31:
Z1 писал(а) 23. Августа 2007 :: 05:42:
Пролог
Как все начиналось и до чего я докатился :
Поводом задуматься послужила ветка
http://www.1cpp.ru/forum/YaBB.pl?num=1183433748
И всплыло задание по передаче прайса на сайт.



Был ли организован обмен в результате?
Я так понимаю - через файл бызы данных? Какой объем по сравнению с XML ?
И по идее - прирост в скорости обмена должен быть колоссальным,
особенно по сравнению с 8.0, где народ жалуется на то , что выгрузка занимает часы...
?

Сам сайт сделан внешней организанией.
Как сделано сейчас обмен с сайтом
Шаг 1 Из 1с выгружаем прайс в xls
Шаг 2 В xls вносяться несущественные изменения
Шаг 3 xls сохраняем в cvs
Шаг 4 передаем cvs файл на www.
Сейчас шаг 1 делается мучительно долго.
В связи с этим возникла необходимость переделать.
Внешний исполнитель предложил XML и ушел в отпуск, в котором до сих пор пребывает.
Ну мне стало интересно и я стал искать альтернативу XML.
И так родился subj.
Так что реально сайт еще не переделан.
Но я не вижу сейчас никаких препятствий для sqlite.
Тем более сайт написан на php, а в самом php есть ряд удобных операторов для работы с sqlite.
Т.е. реально еще нет работы с сайтом. Как только заработает сообщу об этом здесь.
Прирост скорости я думаю будет.
Да и размер sqlite базы должен быть компактнее чем XML.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #20 - 27. Августа 2007 :: 07:25
Печать  
kms писал(а) 27. Августа 2007 :: 06:58:
Z1 писал(а) 27. Августа 2007 :: 06:19:
Начиная с версии 3.3.1 под Win32 дескриптор открытой БД можно передавать и использовать одновременно в нескольких потоках.


Т.е. есть пределы, они понятны; а о плюсах - прекрасно написано выше.
Выгружаешь данные из 1С, а потом используешь их в скриптах на сайте?
Через LiteX?
Чего не хватает для комфортной работы c SQLITE в 1С?

Как написано выше реально  сайт и sqlite пока не работает.
Планирую сделать так выгружаем прайс из 1с в sqlite БД ( всего одна таблица).
Переписываем sqlite файл на сайт.
php использует бд sqlite.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #21 - 27. Августа 2007 :: 07:37
Печать  
kms писал(а) 27. Августа 2007 :: 06:58:
Z1 писал(а) 27. Августа 2007 :: 06:19:
Начиная с версии 3.3.1 под Win32 дескриптор открытой БД можно передавать и использовать одновременно в нескольких потоках.

Чего не хватает для комфортной работы c SQLITE в 1С?

Ну мне трудно сказать чего не хватает.На реальных задачах еще не использовал.
Я вижу еще subj как замену ИндексированнойТаблице.
Теоретически sqlite должен быть более производителен.
( также освоив sqlite возрастает Ваша ценность как специалиста )
Еще плюс sqlite то что к двум таблицам ( двум разным sqlite бд ) можно будет
обращаться одним запросом.
Т.е. если написать свой СОМ объект ( более дружественный чем LiteX ) или встроить напрямую в 1с++  будет наверное здорово и не очень сложно( у того же LiteX свойств и методов не более 20 ).
Я даже не знаю что лучше COM или внутри 1с++  у каждого из этих решений есть свои плюсы и минусы.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: написал статью  1с и sqlite
Ответ #22 - 27. Августа 2007 :: 08:14
Печать  
Z1 писал(а) 27. Августа 2007 :: 07:37:
Я вижу еще subj как замену ИндексированнойТаблице.
Еще плюс sqlite то что к двум таблицам ( двум разным sqlite бд ) можно будет

Я тоже вижу море возможностей.
Правда не думаю, что SQLITE будет быстрее ИТ - бинарные деревья те же, те же nested loops, в конце концов.
Но смысл, конечно, не в скорости, а в удобстве и стандартном языке.
Т.е. то, что Леше Дирксу пришлось делать с нуля и то, что эффективно на текущей модели сделать красиво сложно (те же фильтры по множеству индексов), да та же сериализация в файл и работа с файлами больших размеров - здесь уже все это есть.

Цитата:
Я даже не знаю что лучше COM или внутри 1с++  у каждого из этих решений есть свои плюсы и минусы.

Я не очень представляю, как через COM эффективно работать с агрегатными типами данных.

Собственно, агрегат - это просто строка ID плюс тип плюс некие три буквы, да плюс представление, которое используется для алфавитной сортировки.
Сортировка по представлению, кстати, неэффективна в текущей реализации ИТ.

Надо это как-то решить поинтереснее, чтобы было удобно работать.
Т.е. повернуть интерфейс лицом к людям так сказать. Улыбка

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

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #23 - 27. Августа 2007 :: 09:26
Печать  
kms писал(а) 27. Августа 2007 :: 08:14:
Ну тут над объектной моделью надо подумать.
Налить мартини-водка-лед, выпить, отдохнуть, съездить на рыбалку, поиграть в бильярд, снова подумать...

Вот так 1С++ и строилась.
ПС. С похмелья?
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: написал статью  1с и sqlite
Ответ #24 - 27. Августа 2007 :: 10:27
Печать  
trdm писал(а) 27. Августа 2007 :: 09:26:
ПС. С похмелья?

Постоянно.

...

А, кстати, недавно пришел к выводу, что так и надо строить бесплатную систему, о которой ты говорил когда-то.
Сделали табличное поле, прикрутили SQLITE, запустили Ёксель и т.д.

Можно, конечно, изначально пытаться строить систему в комплексе, разрабатывать архитектуру и т.д.
Не получится, я думаю. Пока не видел, чтоб получалось.

Но я согласен, что надо отделять уровенями абстракций первоначальную (и временную) привязку к 1С.
Этот путь в 1cpp начал ДмитрО в своем ТП, думаю теперь многие пришли к подобным мыслям.

Тогда функционал, отлаженный в 1С, можно будет легко переносить в другую систему, буде она сделана.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: написал статью  1с и sqlite
Ответ #25 - 27. Августа 2007 :: 18:26
Печать  
Имхо, без интеграции с 1С++ вещь для оперативных расчетов не очень интересная Печаль
Вот если бы результат прямого запроса можно было бы сразу - в SQLLite...
И выгрузка в индексированную таблицу и обратно...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #26 - 29. Августа 2007 :: 05:56
Печать  
вот нашел по sqlite на русском :
http://www.freesource.info/wiki/SQLite
http://www.sb-news.net/sqlite.php

По поводу "Чего не хватает для комфортной работы c SQLITE в 1С?" есть несколько мыслей - пока обдумаю сам потом выложу здесь.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: написал статью  1с и sqlite
Ответ #27 - 29. Августа 2007 :: 07:44
Печать  
а.Не смог найти WITH ROLLUP

б. Цитата:
LEFT OUTER JOIN is implemented, but not RIGHT OUTER JOIN or FULL OUTER JOIN.

Но в синтаксе SELECT - FULL есть. Вообщем  непонятно.

в. Не смог найти  CASE
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: написал статью  1с и sqlite
Ответ #28 - 03. Сентября 2007 :: 14:38
Печать  
kiruha писал(а) 29. Августа 2007 :: 07:44:
а.Не смог найти WITH ROLLUP

б. Цитата:
LEFT OUTER JOIN is implemented, but not RIGHT OUTER JOIN or FULL OUTER JOIN.

Но в синтаксе SELECT - FULL есть. Вообщем  непонятно.

в. Не смог найти  CASE

WITH ROLLUP вроде не входит в sql92
CASE  работает см пример
  

sample2.ert ( 31 KB | Загрузки )
Наверх
 
IP записан
 
Santa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 20. Августа 2008
Re: написал статью  1с и sqlite
Ответ #29 - 20. Августа 2008 :: 11:48
Печать  
Z1 писал(а) 23. Августа 2007 :: 05:44:
LiteX это Com объект обертка над Sqlite API.

весь объект с описанием и ссылкой на скачивание находятся
здесь http://roed.republika.pl/litex/automation.html
Скачиваем расспаковываем, регистрируем
regsvr32 <путь>sqlite3.dll

Если после этого  в 1с программа не жалуется на
oDb = СоздатьОбект("LiteX.LiteConnection");
то все установка LiteX завершена и можно использовать его на языке 1с.
LiteX внутри себя содержит весь sqlite и пользоваться бд sqlite можно
используя методы и свойства LiteX.
В тестовой конфигурации показано на примерах как  работает объект liteX.

В файле qlite3.dll находиться объект "LiteX.LiteConnection" позволяет манипулировть данными в формате utf-8
точно такой же объект
В файле qlite3u.dll находиться объект "LiteXU.LiteConnection" позволяет манипулировть данными в формате utf-16


Выявленые Недочеты LiteX :


Первый недочет Что непонятно LiteX выдает версию 3,3,5 а сейчас уже 3,4,2 т.е. получается
что надо разбираться и самим перекомпилировать объект чтобы получить самую последнюю версию.
Второй недочет  то что свойство RowCount возвращает int64 и 1с его не понимает.
Третий недочет не удалось напрямую через LiteX читать,писать BLOB
Ошибка в том что 1с не может передать как параметр объект ADODB.Stream.
На javascript все работает безукоризнено.
Поэтому в тесте из 1с вызываем javascript ( get.js и put.js ) и тогда
уже читаем пишем BLOB




sqlite и ODBC


документация по odbc http://www.ch-werner.de/sqliteodbc/html/index.html
последняя версия  odbc http://www.ch-werner.de/sqliteodbc/
Просто копируем последний файл и устанавливаем.
В тестовом примере приводиться работа и с odbc sqlite.
При чтении данных  из бд odbc не преобразует данные из utf-8 в win1251 ( изменение флажков
в odbc ни к чему не приводит). Наверное odbc не может отличить blob от  text или
не знает что нужно пользователю win1251 или unicode
и поэтому при возврате строк не делает никаких преобразований т.е. возвращает
строку в формате utf-8
Пример по update поля blob не получился (может кто скажет в чем ошибка  этот пример тоже есть
в тестовой конфе но закоментарен) зато работает insert.
select по blob  также не получился но  может это и мои ошибки до этого я не пользовался объектом
BinaryData.
Все это есть в тестовых примерах.


Тестовая конфигурация 1с


Архив содержит файл sqlite_1c.zip.
В чистой базе можно через конфигуратор --> Администрирование --> загрузить данные
получает тестовую конфигурацию. В каталоге базы 1с должна быть папка image из этого архива.
Все. Запускаем единственный отчет и проверяем работу sqlite из 1с.
Кнопка  создать БД создает БД и именем 1c.db в каталоге базы 1с.
создается база и единственная таблица в ней book
нажимая кнопку повторно текущая  версия 1c.db будет  будет уничтожена
Далее  нужно простучать три кнопки добавить записи. При этом в БД 1c.db
будет добавлено в таблицу book 5 записей.
Первая кнопка использует LiteX, вторая - odbc и  последняя запись сделана только для проверки букв Ёё.
Блок извлечь записи  : первая кнопка извлекает все записи из таблицы book
вторая кнопка извлекает все записи из таблицы book с ограничением where
третья кнопка извлекает данные используя odbc
Далее показано как можно читать и писать BLOB объекты.



regsvr32 <путь>sqlite3.dll - Ошибка: SQLite3.dll was loaded but the DllRegisterServer entry point was not found... !!!
qlite3.dll ,  qlite3u.dll  ,  Тестовая конфигурация 1с - что-то не вижу ссылку!?!?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать