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

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

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

Сообщение Дед Пахом » 12 Ноябрь 2018, 22:53

Если не верите, то тут пример. Это обычный пример 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.
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3852
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 12 Ноябрь 2018, 23:30

Верим ! :) Лет 10 назад видел такой же прибамбас для DBF, тогда завидовал. :)
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2185
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 13 Ноябрь 2018, 0:30

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

arlean1
Активист
Сообщения: 109
Зарегистрирован: 24 Июль 2016, 22:34

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

Сообщение arlean1 » 13 Ноябрь 2018, 7:18

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

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1010
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 13 Ноябрь 2018, 8:06

Ну, насколько я могу предположить, создают in memory базу данных на sqlite, закачивают в нее данные из tps и оттуда тягают запросами.
В принципе, ничто не мешает также написать на кларионе анализатор sql и преобразовывать его к стандартному синтаксису работы с tps. Для битрива я знаю, такое умельцы делали, без sql надстройки первасива. Но это уже работа, требующая мыслительного процесса.
Основной вопрос, а нафига все это надо. ODBC я еще понимаю, для доступа к tps из других (не кларионовских) программ.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3852
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 13 Ноябрь 2018, 9:35

finsoftrz писал(а):
13 Ноябрь 2018, 8:06
создают in memory базу данных на sqlite
Это как такое возможно-то ? :shock: Как я понял - SQLite здесь используется в качестве транслятора языка запросов T-SQL
для получения списка колонок, а сама реализация выборки идёт через VIEW{Prop:SQLFilter}.
(что подразумевает наличие VIEW с описанными связями таблиц).
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1010
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 13 Ноябрь 2018, 10:18

Игорь Столяров писал(а):
13 Ноябрь 2018, 9:35
finsoftrz писал(а):
13 Ноябрь 2018, 8:06
создают in memory базу данных на sqlite
Это как такое возможно-то ? :shock: Как я понял - SQLite здесь используется в качестве транслятора языка запросов T-SQL
для получения списка колонок, а сама реализация выборки идёт через VIEW{Prop:SQLFilter}.
(что подразумевает наличие VIEW с описанными связями таблиц).
Это стандартная опция в sqlite. Делается элементарно с получением результата запроса в кларионовскую кьюшку. Читаем Ричарда Тейлора. То есть схема, напоминающая кэширование физических таблиц в InMemory драйвере. Если я неправ, дедушка поправит. Я других вариантов не вижу.
Рязань решает.

gopstop2007
Ветеран
Сообщения: 1179
Зарегистрирован: 25 Март 2009, 21:55

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

Сообщение gopstop2007 » 13 Ноябрь 2018, 10:23

finsoftrz писал(а):
13 Ноябрь 2018, 10:18
Это стандартная опция в sqlite.
плохо, что не поддерживается кириллица, только в юникоде
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3852
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 13 Ноябрь 2018, 10:28

finsoftrz писал(а):
13 Ноябрь 2018, 10:18
с получением результата запроса в кларионовскую кьюшку
Бррр … Получение результата запроса в QUEUE - это действительно элементарная операция. Здесь согласен.
Но по БД SQLite. Или "создают in memory базу данных на sqlite" - это так теперь называется QUEUE с результатом запроса ?
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1010
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 13 Ноябрь 2018, 10:44

gopstop2007 писал(а):
13 Ноябрь 2018, 10:23
finsoftrz писал(а):
13 Ноябрь 2018, 10:18
Это стандартная опция в sqlite.
плохо, что не поддерживается кириллица, только в юникоде
Это в драйвере не поддерживается. А при работе напрямую через библиотеку проблемы нет.
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1010
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 13 Ноябрь 2018, 10:45

Точнее, надо перекодировать при чтении/записи. Например, с помощью класса Юры Философова.
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1010
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 13 Ноябрь 2018, 10:48

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

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3852
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 13 Ноябрь 2018, 14:02

finsoftrz писал(а):
13 Ноябрь 2018, 10:48
Нет, при создании базы в sqlite указывается опция "таблица в памяти"
Понял. Спасибо. Пардон - я этого действительно не знал. Надо будет посмотреть - это интересно ! :)
Но тогда получается, что если TPS файлы загоняются в In Memory SQLite и по ним делается SQL запрос … то этот пример просто обман ? :(
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1010
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 13 Ноябрь 2018, 14:39

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

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

На больших таблицах, наверно, не вариант, так как full scan все равно в начале есть.
В любом случае, надо подождать разъяснений от Деда.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3852
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 13 Ноябрь 2018, 14:49

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

Ответить