Доступ к базе TPS через SQL (без ODBC драйвера)

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Дед Пахом »

Если не верите, то тут пример. Это обычный пример SCHOOL.APP. В меню "SQL" 2 пункта: "Browse Teachers with SQL filter" и "Arbitrary SQL Queries".
Первый открывает бровз по связке таблиц Teachers+Majors и позволяет задать фильтр типа

Код: Выделить всё

WHERE t.LastName LIKE('C%') 
AND m.Description IN('Law', 'Sociology')
Второй позволяет выполнять любые SELECT по любым таблицам, к примеру:

Код: Выделить всё

select s.lastname || ' ' || s.firstname as "full name", s.Number as number,
s.GradYear as "grad year", m.description as major,
s.city as city, s.telephone as phone
from students s
join majors m on m.number=s.major
order by s.lastname
и выводит результат в стандартный listbox.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Игорь Столяров »

Верим ! :) Лет 10 назад видел такой же прибамбас для DBF, тогда завидовал. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Дед Пахом »

Игорь Столяров писал(а): 12 Ноябрь 2018, 23:30Верим ! Лет 10 назад видел такой же прибамбас для DBF, тогда завидовал.
Ну мы давно уже не впереди планеты всей, догоняем...
С уважением, ДП
arlean1
Активист
Сообщения: 114
Зарегистрирован: 24 Июль 2016, 22:34

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение arlean1 »

Игорь Столяров писал(а): 12 Ноябрь 2018, 23:30Верим ! Лет 10 назад видел такой же прибамбас для DBF, тогда завидовал.
Приложение работает.Но кто сказал, что только через SQL? )))
А исходников нет?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение finsoftrz »

Ну, насколько я могу предположить, создают in memory базу данных на sqlite, закачивают в нее данные из tps и оттуда тягают запросами.
В принципе, ничто не мешает также написать на кларионе анализатор sql и преобразовывать его к стандартному синтаксису работы с tps. Для битрива я знаю, такое умельцы делали, без sql надстройки первасива. Но это уже работа, требующая мыслительного процесса.
Основной вопрос, а нафига все это надо. ODBC я еще понимаю, для доступа к tps из других (не кларионовских) программ.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Игорь Столяров »

finsoftrz писал(а): 13 Ноябрь 2018, 8:06создают in memory базу данных на sqlite
Это как такое возможно-то ? :shock: Как я понял - SQLite здесь используется в качестве транслятора языка запросов T-SQL
для получения списка колонок, а сама реализация выборки идёт через VIEW{Prop:SQLFilter}.
(что подразумевает наличие VIEW с описанными связями таблиц).
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение finsoftrz »

Игорь Столяров писал(а): 13 Ноябрь 2018, 9:35
finsoftrz писал(а): 13 Ноябрь 2018, 8:06создают in memory базу данных на sqlite
Это как такое возможно-то ? :shock: Как я понял - SQLite здесь используется в качестве транслятора языка запросов T-SQL
для получения списка колонок, а сама реализация выборки идёт через VIEW{Prop:SQLFilter}.
(что подразумевает наличие VIEW с описанными связями таблиц).
Это стандартная опция в sqlite. Делается элементарно с получением результата запроса в кларионовскую кьюшку. Читаем Ричарда Тейлора. То есть схема, напоминающая кэширование физических таблиц в InMemory драйвере. Если я неправ, дедушка поправит. Я других вариантов не вижу.
C6/C11, ШВС, tps/btrieve.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение gopstop2007 »

finsoftrz писал(а): 13 Ноябрь 2018, 10:18 Это стандартная опция в sqlite.
плохо, что не поддерживается кириллица, только в юникоде
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Игорь Столяров »

finsoftrz писал(а): 13 Ноябрь 2018, 10:18с получением результата запроса в кларионовскую кьюшку
Бррр … Получение результата запроса в QUEUE - это действительно элементарная операция. Здесь согласен.
Но по БД SQLite. Или "создают in memory базу данных на sqlite" - это так теперь называется QUEUE с результатом запроса ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение finsoftrz »

gopstop2007 писал(а): 13 Ноябрь 2018, 10:23
finsoftrz писал(а): 13 Ноябрь 2018, 10:18 Это стандартная опция в sqlite.
плохо, что не поддерживается кириллица, только в юникоде
Это в драйвере не поддерживается. А при работе напрямую через библиотеку проблемы нет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение finsoftrz »

Точнее, надо перекодировать при чтении/записи. Например, с помощью класса Юры Философова.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение finsoftrz »

Игорь Столяров писал(а): 13 Ноябрь 2018, 10:28
finsoftrz писал(а): 13 Ноябрь 2018, 10:18с получением результата запроса в кларионовскую кьюшку
Бррр … Получение результата запроса в QUEUE - это действительно элементарная операция. Здесь согласен.
Но по БД SQLite. Или "создают in memory базу данных на sqlite" - это так теперь называется QUEUE с результатом запроса ?
Нет, при создании базы в sqlite указывается опция "таблица в памяти", тогда она размещается не на диске, а в памяти. Работа с базой в памяти идентична работе с базой на диске.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Игорь Столяров »

finsoftrz писал(а): 13 Ноябрь 2018, 10:48Нет, при создании базы в sqlite указывается опция "таблица в памяти"
Понял. Спасибо. Пардон - я этого действительно не знал. Надо будет посмотреть - это интересно ! :)
Но тогда получается, что если TPS файлы загоняются в In Memory SQLite и по ним делается SQL запрос … то этот пример просто обман ? :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение finsoftrz »

Если оформить в виде класса, то можно несколькими строчками кода получать информацию в кьюшку. Если пофантазировать, то примерно так:

MyClass.AddTable(Student)
....
MyClass.Load()
MyClass.Query('sql query',myQueue)

На больших таблицах, наверно, не вариант, так как full scan все равно в начале есть.
В любом случае, надо подождать разъяснений от Деда.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Доступ к базе TPS через SQL (без ODBC драйвера)

Сообщение Игорь Столяров »

Я всё-таки склоняюсь к идее, что тут как-то (?!) задействован VIEW{Prop:SQLFilter} для TPS списков.
Но тоже не бест - т.к. требует описания структуры VIEW и связей между списками.
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить