Варианты Portable SQL

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Варианты Portable SQL

Сообщение kreator »

Игорь Столяров писал(а):Если позволите, еще маленький вопрос: как грамотно закончить работу с базой Firebird из Clarion ?
Никогда ничего специально не делал. В АВС всё нормально отрабатывается. Access:File.Close(), и достаточно. Пользователь выходит из программы, коннект прерывается. Если нужно при работающем пользователе его коннект прервать, то административными способами (я не помню как, в понедельник на работе могу спросить). Есть ещё тонкий момент. Например, если сделать в IBExpert'е запрос в SQLEditor и его не закоммитить, то Кларионовская программа будет ждать коммита (висеть, по-русски говоря).
BBR писал(а):Как можно загрузить ркезультаты произвольной выборки по нескольким таблицам
(используя prop:SQL) в очередь (подготовленную заранее)?
Так как prop:SQL можно применить только к файл/таблице и кларионовской вьюхе, то есть два варианта.
1. Через вьюху (как в шаблонах), можно посмотреть, что делает сам Кларион. Но вкратце так. Создаём вьюху, например:

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

LOC:View	    VIEW(Titles)
                       PROJECT(TIT:TitleNameOut)
                       PROJECT(TIT:TitleDate)
                       PROJECT(TIT:Year)
                       PROJECT(TIT:ID)
                       PROJECT(TIT:OperationID)
                       PROJECT(TIT:Addressee2ID)
                       PROJECT(TIT:Addressee1ID)
                       PROJECT(TIT:DocID)
                       JOIN(DOC:IDKey,TIT:DocID)
                         PROJECT(DOC:Name)
                         PROJECT(DOC:ID)
                       END
                       JOIN(ADR1:IDKey,TIT:Addressee2ID)
                         PROJECT(ADR1:Name)
                         PROJECT(ADR1:ID)
                       END
                       JOIN(ADR:IDKey,TIT:Addressee1ID)
                         PROJECT(ADR:Name)
                         PROJECT(ADR:ID)
                       END
                     END
Причём поля в описании должны быть в порядке как на самом деле, поэтому сам Кларион (если посмотреть что он посылает SQL серверу) добавляет в запрос много лишнего.
Потом пишем:

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

 open(LOC:View)
 set(LOC:View) 
 LOC:View{prop:SQL} = 'select ...' 
 loop
   next(LOC:View) 
   if fileerrorcode()
     break
   end
   ...
   LOC:Queue.LOC:Field1 = TIT:ID
   ...
   add(LOC:Queue)
  
end    
2. Первый способ - это классический вариант. Но нашли способ попроще. Создаём на SQL сервере таблицу с одним стринговым полем размером "много", она у нас типа виртуальная. Ничего туда не пишем. В словаре её описываем, только столбцов делаем много (например сто), все столбцы кроме первого идут со ссылкой на первый столбец, через External Name.
Ну и пишем:

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

 ZZZ{prop:SQL} = 'select ...' 
 loop
   next(ZZZ) 
   if fileerrorcode()
     break
   end
   ...
   LOC:Queue.LOC:Field1 = clip(ZZZ.A1) 		! clip() - необязательно
   ...
   add(LOC:Queue)
  
end    
ZZZ - наша виртуальная таблица. Она, естественно. должна быть открыта, иначе ошибка о не открытии.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Варианты Portable SQL

Сообщение Yufil »

Лет 15 назад написал процедуру на эту тему, мож надо кому. Там, правда, были MS SQL или Oracle, но можно, наверное, переделать и на другую конфигурацию.

Выглядит примерно так:

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

LoadQueueFromSQL('Insert into $table(field1,field2) values(.... )')
- выполнение запроса без параметра. Значок доллара в имени таблицы в Oracle менялся на имя БД, а в MS SQL удалялся (хотя можно, наверное, заменить, например, на 'dbo.' )

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

LoadQueueFromSQL('Select max(id) from $table ',,count#)
- возвращается одно значение

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

LoadQueueFromSQL('Select max(id).min(id) from $table ',,count1#, count2#)
- возвращается несколько значений

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

qresult  queue,pre(q)
id          long
name    cstring(200)
            end 

LoadQueueFromSQL('select id,name from $table where ...', qresult, q.id, q.name) 
Результат выкладывается в очередь. Можно указать поля, в которые раскладывается результат. Если поля не указаны, результаты пишутся в первое, второе и т д поле очереди (правда, иногда глючит who/what в Кларионе, так что поля лучше указывать явно).

Было сделано для своих низменных потребностей, попадает (с некоторыми изменениями) во все мои проекты на SQL, силы крайне экономит.
Собственно, универсального решения у меня нет, но копии из разных проектов поискать могу.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Варианты Portable SQL

Сообщение Yufil »

Да, ещё поля Null автоматически меняются на 0 (если число) или '' (если строка). Обычно (99%) устраивает.
Если нет, надо модифицировать запрос, чтобы вернул что-то другое.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Варианты Portable SQL

Сообщение kreator »

Забыл сказать (может BBR будет интересно), что в настройке стандартного броуза есть дополнительные возможности для SQL. Это закладка "SQL Advanced". Там можно, например, вставить встроенный подзапрос (Кларионовская вьюха имеет свойство prop:Name, это там используется), можно учесть "group by" и "distinct".
We are hard at work… for you. :)
BBR
Посетитель
Сообщения: 31
Зарегистрирован: 03 Декабрь 2005, 19:25
Откуда: Беларусь

Варианты Portable SQL

Сообщение BBR »

kreator - спасибо огромное

Yufil если можно поищи пожалуйста LoadQueueFromSQL
похожей функцией пользуюсь в MAV.

rik20042@mail.ru
...
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Варианты Portable SQL

Сообщение Developer »

Для подключения к базе данных сервера Firebird 3 в приложении Clarion через драйвер ADO необходим бесплатный OLEDB Provider для Windows в версиях самого Provider-a x32 и x 64.
Какая есть информация?
С Уважением, Developer
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Варианты Portable SQL

Сообщение kreator »

Вышел долгожданный релиз FB3. Кому интересно, качаем - http://www.firebirdsql.org/en/firebird-3-0-0/.
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Варианты Portable SQL

Сообщение gopstop2007 »

Игорь приятно было бы услышать Ваше мнение, если возможно под итожить результаты firebird portable :cat: Имеется программа на Clarion.
1.Какие ПРОГРАММИСТУ минимально нужны программы или что необходимо для локальной работы на компьютере в firebird (тест, проверка работа способности программы)
2.Какие ПОЛЬЗОВАТЕЛЮ минимально необходимы "телодвижения" для запуска приложения (кларион).
3. И есть выигрыш по сравнению с TPS в скорости при выборке, а в firebird (запрос - SQL), по скорости ответа при объеме БД порядка лимона записей :) Например, стал на запись контрагента - результат баланс за период и это всё в реалтайме.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Варианты Portable SQL

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

gopstop2007 писал(а): если возможно под итожить результаты firebird portable
Может быть я ошибусь (и пусть меня тогда поправят), но на Clarion работать Firebird portable - не получится.
Да, в FB есть режим portable (без установки), да он работает. Но конкретно для приложений на Clarion требуется
установка ODBC драйвера FB, что в принципе нивелирует это преимущество. Нельзя просто скопировать программу
на компьютер, запустить и работать. Да, можно "запихнуть" в инсталлятор установку ODBC драйвера, но тогда точно
также можно "запихнуть" в него и установку любой другой БД ....
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Варианты Portable SQL

Сообщение kreator »

Позволю себе заметить. Если речь идёт о режиме embedded (что понимается под firebird portable?), то режим своеобразный. Я бы сказал это шаг SQL серверов в сторону файл-сервера. Нужен, наверно, для слабых мобильных устройств. Движка нет, соответственно кэша нет. Радость только в том, что понимает SQL синтаксис. Если ставить на комп, то ставить полноценный режим. В отличие от мощных SQL серверов firebird прост в установке. Пользователю нужно установить полный Firebird и ODBC драйвер. Настраивать ODBC источник данных не надо. Сервер поднимется сам (при запуске Кларионовской программы).
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Варианты Portable SQL

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

Ну да. Все так и есть. Поэтому думаю, что именно в связке portable SQL & Clarion более реален
вариант с SQLite. Тоже движка нет, но есть SQL синтаксис, также есть нативный драйвер и не требуется ODBC ...

А Firebird интересен именно как полноценный SQL с установкой движка и т.д., но здесь уже много альтернатив.
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Варианты Portable SQL

Сообщение gopstop2007 »

Игорь Столяров писал(а):Ну да. Все так и есть. Поэтому думаю, что именно в связке portable SQL & Clarion более реален
вариант с SQLite. Тоже движка нет, но есть SQL синтаксис, также есть нативный драйвер и не требуется ODBC ...

А Firebird интересен именно как полноценный SQL с установкой движка и т.д., но здесь уже много альтернатив.
Меня интересовало требования к компьютеру на котором он в связке будет работать. Насчет Sqlite - только UTF, прийдется ждать кларион 11
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Варианты Portable SQL

Сообщение kreator »

gopstop2007 писал(а):Меня интересовало требования к компьютеру на котором он в связке будет работать. Насчет Sqlite - только UTF, прийдется ждать кларион 11
Вопрос о железе? У меня на достаточно слабом планшете летает. Win10 поднимает FB сервак и запускает приложение в доли секунды. Притом, что ещё пока FB2.1. На трёшку ещё не перевёл.
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Варианты Portable SQL

Сообщение gopstop2007 »

kreator писал(а):
gopstop2007 писал(а):Меня интересовало требования к компьютеру на котором он в связке будет работать. Насчет Sqlite - только UTF, прийдется ждать кларион 11
Вопрос о железе? У меня на достаточно слабом планшете летает. Win10 поднимает FB сервак и запускает приложение в доли секунды. Притом, что ещё пока FB2.1. На трёшку ещё не перевёл.
А как лимон записей?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Варианты Portable SQL

Сообщение kreator »

gopstop2007 писал(а):А как лимон записей?
А что для SQL сервера лимон записей? Конечно, лучше, когда сервер уже их подтащит в память. По опыту, после загрузки сервера (SQL) ему нужно какое-то время для закачки в память данных, кэширования и т.д. Но, если разговор о хранении БД на сервере, то с этим можно мириться, поскольку перезагрузка сервера редка. Другое дело локальное устройство, например, планшет. Может банально не хватать памяти для комфортной работы. Плюс постоянное выключение. Но современные версии Винды могут комфортно уходить в сон.
А вообще в SQL важна сама схема данных. Если в файл-сервере этого можно не заметить (всё равно обработка идёт долго), то в SQL время может отличаться на порядок из-за неправильного построения таблиц, связей, индексов или из-за не оптимизированного запроса.
We are hard at work… for you. :)
Ответить