Класс для API SQLite «На основе штатного SQLite»
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
Класс для API SQLite «На основе штатного SQLite»
Привет всем !
Имею непреодолимое желание апнуть ископаемый класс SQLite и у меня для этого есть 5 причин:
1. Направление интересное само по себе, а в контексте взаимодействия с Android / Web - незаменимое;
2. Расширены возможности, устранены известные ограничения и проблемы (подозреваю, что добавлены новые);
3. За годы (десятилетия !) накопились всевозможные исправления и доработки в куче разных мест;
4. Как-то хотелось бы вот это вот всё, собрать где-то в одном месте, что бы использовать по назначению;
5. Приглашаю всех кому не пофиг предыдущие пункты к обсуждению и развитию этого свободного проекта.
Буду потихоньку собирать и показывать на примерах решение реальных задач.
Имею непреодолимое желание апнуть ископаемый класс SQLite и у меня для этого есть 5 причин:
1. Направление интересное само по себе, а в контексте взаимодействия с Android / Web - незаменимое;
2. Расширены возможности, устранены известные ограничения и проблемы (подозреваю, что добавлены новые);
3. За годы (десятилетия !) накопились всевозможные исправления и доработки в куче разных мест;
4. Как-то хотелось бы вот это вот всё, собрать где-то в одном месте, что бы использовать по назначению;
5. Приглашаю всех кому не пофиг предыдущие пункты к обсуждению и развитию этого свободного проекта.
Буду потихоньку собирать и показывать на примерах решение реальных задач.
- Вложения
-
- tSQLite.zip
- Версия от 05.02.2023 г.
- (724.03 КБ) 381 скачивание
Последний раз редактировалось Игорь Столяров 29 Ноябрь 2024, 7:48, всего редактировалось 6 раз.
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5078
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 11 раз
- Поблагодарили: 50 раз
SQLite for Clarion (Fork)
Мы сейчас, к слову, подобный проект запускаем, "корпоративное питание" - заказ, приготовление и доставка обедов в офисы. Первые заказы пошли. ERP система на кларионе, в ней вся админка, разработка меню, управление заказами, производство сырье - п/ф - продукция. А для приема заказов адаптивная под разные девайсы страничка на php/javascript, использующая аякс запросы и всплывающие блоки, для оплаты сервис Робокасса. Данные на хостинге публикуются в виде sqlite. Работает красиво.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5078
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 11 раз
- Поблагодарили: 50 раз
SQLite for Clarion (Fork)
Не уверен. Сразу встанут вопросы с адаптивной версткой (чтобы удобно было работать с компьютера/планшета/смартфона) и интеграцией с платежными системами. Плюс поддержка своего сервера в режиме 24х7.
По anyscreen пока темы не всплывают (кроме доступа к картам оплаты и итогам продаж в столовой со стороны сотрудников предприятий, которые кормим, я про это писал). Обычные приложения имеют более удобный и функциональный интерфейс, чем приложения под ayscreen, а варианты ecommerce, типа упомянутого выше, лучше на обычных вебовских инструментах делать - хотя заметно более трудоемко, зато проще в дальнейшем поддерживать.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
SQLite for Clarion (Fork)
В справке текущего релиза Clarion есть вот такой раздел:
Это я пытался заюзать встроенные функции ToUnicode() / ToAnsi(), но фиг вам - приходите когда будет Clarion 12.
Хотя описание в справке уже есть.

Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5119
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 23 раза
SQLite for Clarion (Fork)
Судя по этому скрину и в C11 уже что-то должно работать. Ладно, подождём. Но я сомневаюсь, что в двенадцатой Юникод полноценно заработает.
We are hard at work… for you. 

-
- Полимат
- Сообщения: 1779
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 19 раз
- Поблагодарили: 10 раз
SQLite for Clarion (Fork)
Из Вашего примера, откорректировал, оставил только нужное
Вопрос, при создании таблицы MyTable как добавить ключи и индексы в конце списка qList?
Спасибо за внимание.
Код: Выделить всё
SQLite.StartWithNew('CREATE TABLE MyTable (RecID INTEGER PRIMARY KEY AUTOINCREMENT,')
SQLite.AddEnumTitle(qList,True) ! Добавить перечисление заголовка структуры + ')'
If Not SQLite.Exec() then Message(' Не удалось создать структуру таблицы !','Ошибка',Icon:Exclamation,'&1. Закрыть')
elsIf SQLite.Exec('BEGIN TRANSACTION')
...
If SQLite.Exec('COMMIT') then Message('Успешная запись ToyTest.db !','ToySQLite',Icon:Asterisk,'&1. Закрыть'). ! Успех
end
Спасибо за внимание.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- Полимат
- Сообщения: 1779
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 19 раз
- Поблагодарили: 10 раз
SQLite for Clarion (Fork)
Вроде нашел решение
Еще вопрос, как получить ответ например на такой запрос, в которой нет необходимости в Queue?
Код: Выделить всё
tSQLite.StartWithNew('CREATE TABLE cust (')
tSQLite.AddEnumTitle(qListCust, False) ! Добавить перечисление заголовка структуры + ')'
tSQLite.QueryStr.Cat(', PRIMARY KEY(CUST_ID))')
Код: Выделить всё
SELECT * FROM MyTable WHERE fildID = 1 LIMIT 1;
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
SQLite for Clarion (Fork)
Добрый день !gopstop2007 писал(а): ↑08 Ноябрь 2024, 17:36 Еще вопрос, как получить ответ например на такой запрос, в которой нет необходимости в Queue?
Результат - это ведь всегда строка. Вопрос только в том, в каком виде мы её хотим увидеть.

Передайте QUEUE c одним длинннннннным полем, и потом через Get(QUEUE,1) получите результат.
Make Clarion Great Again ! 
-
- Полимат
- Сообщения: 1779
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 19 раз
- Поблагодарили: 10 раз
SQLite for Clarion (Fork)
Может дополнить и позаимствовать код из LoadQueueFromSQL (Юрия Ф.), удобноИгорь Столяров писал(а): ↑08 Ноябрь 2024, 18:39Добрый день !gopstop2007 писал(а): ↑08 Ноябрь 2024, 17:36 Еще вопрос, как получить ответ например на такой запрос, в которой нет необходимости в Queue?
Результат - это ведь всегда строка. Вопрос только в том, в каком виде мы её хотим увидеть.
Передайте QUEUE c одним длинннннннным полем, и потом через Get(QUEUE,1) получите результат.

Код: Выделить всё
LoadQueueFromSQL ('SELECT f1,f2,f3 From Table', qList) ! Для очереди
LoadQueueFromSQL ('SELECT f1,f2,f3 From Table WHERE cust_id = 1;', , loc:f1,loc:f2,...loc:f10) ! Для полей
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
SQLite for Clarion (Fork)
1. Это тот же самый ToySQLite.Exec('SELECT f1,f2,f3 From Table', qList)gopstop2007 писал(а): ↑08 Ноябрь 2024, 18:55 LoadQueueFromSQL ('SELECT f1,f2,f3 From Table', qList) ! Для очереди
LoadQueueFromSQL ('SELECT f1,f2,f3 From Table WHERE cust_id = 1;', , loc:f1,loc:f1,...loc:f10) ! Для полей
2. Здесь уже интересней, но у меня нет этого класса Юрия.
И опять-таки это нужно только для какого-то частичного заполнения ... распарс 10 полей ... зачем ... ?
Мой подход: "Котлеты отдельно, мухи отдельно" (не я сказал).

Класс - это ведь интерфейс обмена с таблицами SQLite, а не формирование каких-то прикладных структур данных.
- Создайте QUEUE c N (или лучше cразу K) полями CSTRING();
- Выполните ToySQLite.Exec('SELECT f1,f2,f3 From Table', QUEUE)
- Забирайте результат и делайте с ним всё что считаете нужным, в т.ч. заполняйте вот эти loc:f1,loc:f1,...loc:f10
в любых вариациях с проверкой условий и т.д.
Make Clarion Great Again ! 
-
- Полимат
- Сообщения: 1779
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 19 раз
- Поблагодарили: 10 раз
SQLite for Clarion (Fork)
Для того чтобы получить ответ с одним значением, нужно:Игорь Столяров писал(а): ↑08 Ноябрь 2024, 19:25
2. Здесь уже интересней, но у меня нет этого класса Юрия.
И опять-таки это нужно только для какого-то частичного заполнения ... распарс 10 полей ... зачем ... ?
Мой подход: "Котлеты отдельно, мухи отдельно" (не я сказал).![]()
Класс - это ведь интерфейс обмена с таблицыми SQLite, а не формирование каких-то прикладных структур данных.
- Создайте QUEUE c N (или лучше cразу K) полями CSTRING();
- Выполните ToySQLite.Exec('SELECT f1,f2,f3 From Table', QUEUE)
- Забирайте результат и делайте с ним всё что считаете нужным, в т.ч. заполняйте вот эти loc:f1,loc:f1,...loc:f10
в любых вариациях с проверкой условий и т.д.
1. Создать Queue хотя бы с одним полем (Queue.ret)
2. Выполнить ToySQLite.Exec('SELECT f1,f2,f3 From Table', QUEUE)
3. GET(Queue,1)
4. присвоить loc:ret = Queue.ret
или
1. LoadQueueFromSQL('SELECT f1,f2,f3 From Table', ,loc:ret )
Чувствуем разницу?

- Вложения
-
- loadqueue.zip
- (45.54 КБ) 112 скачиваний
-
- loadqueue-20171009.rar
- (1007.68 КБ) 111 скачиваний
-
- LoadQueueFromSQL.zip
- (783.8 КБ) 114 скачиваний
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
SQLite for Clarion (Fork)
Конечно ! Но только до того места, когда Вам понадобятся 2 записи или 12 полей ...

Интересная задача - это эффективно получить данные из SQLite.
Раскидывать 10 колонок из результата по параметрам ... да это, наверно, упростит какую-то частную задачу.
Мне это не интересно. Заверните, всё что рассказали, в метод и пользуйтесь если нужно. Это не сложно.

Make Clarion Great Again ! 
-
- Полимат
- Сообщения: 1779
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 19 раз
- Поблагодарили: 10 раз
SQLite for Clarion (Fork)
При добавлении новых записей, заполнение полей кириллицей отображается корректно в таблице базы sqlite.
При изменении (update) записей, отображается не корректно в виде ромбиков.SQLite у меня будет использоваться только для хранения данных, для дальнейшей загрузки в Memory table.
Спасибо за внимание
При изменении (update) записей, отображается не корректно в виде ромбиков.
Код: Выделить всё
SQLite.Exec('Update cust SET fullname="'& qList.fullname &'" WHERE cust_id='& qList.cust_id &';')
IF NOT SQLite.Exec() then
! error
END
Спасибо за внимание
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Игорь Столяров
- Ветеран движения
- Сообщения: 7867
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 85 раз
SQLite for Clarion (Fork)
ДД !gopstop2007 писал(а): ↑09 Ноябрь 2024, 12:13 При изменении (update) записей, отображается не корректно в виде ромбиков.
Вы же помните, что SQLite работает только с кодировкой UTF-8 ?
За отсутствием рабочего примера - предлагаю использовать штатный.
Добавим в него изменение записи с правильным синтаксисом:
Код: Выделить всё
! 4. Тест изменения записи № 2
If SQLite.OpenDB('ToyTest.db')
SQLite.Exec('Update MyTable SET NAME="'& TOY::ANSItoUTF8('Игорь Столяров') & '" Where RecID=' & 2 & ';')
SQLite.CloseDB()
end
Вопросы ?

Make Clarion Great Again ! 
-
- Полимат
- Сообщения: 1779
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 19 раз
- Поблагодарили: 10 раз
SQLite for Clarion (Fork)
У Вас наверное более обновленная tSQLite, у меня ошибка (Unknown function label) на TOY::ANSItoUTF8
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп