Нативный код SQL в Clarion

ODBC

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

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

Re: Нативный код SQL в Clarion

Сообщение kreator »

Yufil писал(а):Я использовал примерно такую схему:
В базе данных создаётся таблица с ровно одним строковым полем. Внутри процедуры можно это поле использовать как сразу несколько полей

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

Field1   Cstring(25),Name('DummyField')
Field2   Cstring(200),Name('DummyField')
Field3   Long,Name('DummyField') 
...
Я думаю, вот здесь не понятно. За троеточием (...) скрывается многое. В процедуре LoadQueueFromSQL как запрос реализован?
Мы сделали примерно также. В словаре описали таблицу условно с сотней стринговых полей, и к ней применяем SQL запрос. Поскольку Clarion не требователен к типу данных, то всё очень хорошо.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Нативный код SQL в Clarion

Сообщение Yufil »

Ну да, только в словаре описывать необязательно. В словаре описана таблица ровно с одним текстовым полем
А в программе этот же самый файл имеет столько полей, сколько надо (правда, больше 18 полей не принимал Дизайнер Кларион, наткнулись на ограничения на длину декларации процедуры.

Положил один из вариантов на https://cloud.mail.ru/public/84343ec2906a/dis_sql.clw
(CW6, MS SQL, 10 полей, разные фишки)
Дмитрий
Прохожий
Сообщения: 1
Зарегистрирован: 12 Ноябрь 2014, 23:42

Re: Нативный код SQL в Clarion

Сообщение Дмитрий »

Можно еще такое сделать (не трогая реальные таблицы)
Описать таблицу назвать ее "dummy" с полями N - long, S - string
В ms sql Create View --> select 0 as n, '' as S

Потом в коде либо получаем значения с таблиц вида Dummy{PROP:SQL} = 'Select count(*) form customers' результат в dummy:N, либо
Dummy{PROP:SQL} = 'Select ShortName form customers' результат в dummy:S
или делаем выборку по примеру выше.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Re: Нативный код SQL в Clarion

Сообщение kreator »

Дмитрий писал(а):Можно еще такое сделать (не трогая реальные таблицы)
Описать таблицу назвать ее "dummy" с полями N - long, S - string
В ms sql Create View --> select 0 as n, '' as S

Потом в коде либо получаем значения с таблиц вида Dummy{PROP:SQL} = 'Select count(*) form customers' результат в dummy:N, либо
Dummy{PROP:SQL} = 'Select ShortName form customers' результат в dummy:S
или делаем выборку по примеру выше.
Дело то в универсальности. Для одного запроса нужно два поля, для другого 20, ещё и разных типов. И потом. В MS SQL есть Dummy, в Sybase, например, тоже есть, а вот в Firebird нет. Поэтому вариант Юрия - универсальный и правильный. Хотя мы делаем попроще.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Нативный код SQL в Clarion

Сообщение Yufil »

Проще выполнения одного оператора на запрос? :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Re: Нативный код SQL в Clarion

Сообщение kreator »

Ну ведь не один оператор на запрос. Надо подготовить очередь, потом её обработать, либо данные перекидывать в другую. Мы запрос привязываем сразу к универсальной виртуальной таблице. И в цикле по ней обрабатываем и создаём очередь.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Нативный код SQL в Clarion

Сообщение Yufil »

Ну, я же выкладывал текст одного из вариантов. Всё это в процедуре и есть. Если результат - список, то вызовом сразу возвращается очередь, а если просто совокупность переменных - то одним вызовом загружаются несколько.

Если не нужна очередь, то указывается список полей. Если запрос не требует результата, то и поля не нужны
LoadQueueFromSQL('Select sum(...), sum(...), count(....) from ... where ....' , , loc:sum1, loc:sum2, loc:count)

Если результат-список то передаётся очередь и, возможно, список полей очереди, куда писать. Если поля не указаны, результат прописывается в первое, второе и т.д. поле очереди ( кстати, несколько раз сталкивался с глюками и GPF, так что избегаю)
Если в начале запроса стоит '+', очередь не чистится.

NULL на автомате переводится в 0 (для числовых) и '' (для текстовых). Кому надо, пусть учитывает в запросе.
Ну и некоторое расширение языка запросов возможно, например (использовалось в разных программах)

- автоматическая конвертация даты LoadQueueFromSQL('Select [@d]max(date1) ' ,, loc:maxdate)
- автоматическое добавление наименования схемы для Оракл ' Select count(n) from $base ... ' ($ заменяется на имя схемы)
- макро в запросах 'Select ... where x={{ loc:x }}' с заменой по evaluate

Возможность на ходу одним оператором выполнить запрос и бежать дальше - это ли не прекрасно ? :)
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

Re: Нативный код SQL в Clarion

Сообщение PavelNK »

Рекомендую обратить внимание на ADO, в этом случае нет необходимости объявлять файлы, можно прочитать хоть одно поле,а можно пачку.
Можно прочитать одну запись, а можно целую пачку.
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Re: Нативный код SQL в Clarion

Сообщение Developer »

PavelNK может есть реальный пример (исходник) на ADO применительно к SQL коду в Clarion?
Прошу поделись на форуме.
Заранее спасибо.
С Уважением, Developer
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

Re: Нативный код SQL в Clarion

Сообщение PavelNK »

Был где-то. Поищу
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

Re: Нативный код SQL в Clarion

Сообщение PavelNK »

Приблизительно так. Радуйтесь и забывайте про файлы при работе с SQL :D. Приложенный файл - 7z-архив, т.к. прикрепить файл с другим расширением, кроме как .clw не удалось :(
Вложения
AdoPro_7z.clw
(1.88 КБ) 302 скачивания
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

Re: Нативный код SQL в Clarion

Сообщение PavelNK »

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

Re: Нативный код SQL в Clarion

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

тут так не принято :-)
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Нативный код SQL в Clarion

Сообщение Admin »

PavelNK писал(а):Тишина, и мертвые с косами стоят...
Хоть бы кто-нибудь что-нибудь сказал. Помогло-не помогло, понравилось-не понравилось, хорошо-плохо и т.д.
Мне и с MAV хорошо.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Re: Нативный код SQL в Clarion

Сообщение gopstop2007 »

Admin писал(а):Мне и с MAV хорошо.
Так он вроде как уже не развивается? :(
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить