Страница 2 из 3

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

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

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

Field1   Cstring(25),Name('DummyField')
Field2   Cstring(200),Name('DummyField')
Field3   Long,Name('DummyField') 
...
Я думаю, вот здесь не понятно. За троеточием (...) скрывается многое. В процедуре LoadQueueFromSQL как запрос реализован?
Мы сделали примерно также. В словаре описали таблицу условно с сотней стринговых полей, и к ней применяем SQL запрос. Поскольку Clarion не требователен к типу данных, то всё очень хорошо.

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

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

Положил один из вариантов на https://cloud.mail.ru/public/84343ec2906a/dis_sql.clw
(CW6, MS SQL, 10 полей, разные фишки)

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

Добавлено: 12 Ноябрь 2014, 23:54
Дмитрий
Можно еще такое сделать (не трогая реальные таблицы)
Описать таблицу назвать ее "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
или делаем выборку по примеру выше.

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

Добавлено: 14 Ноябрь 2014, 11:15
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 нет. Поэтому вариант Юрия - универсальный и правильный. Хотя мы делаем попроще.

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

Добавлено: 14 Ноябрь 2014, 17:29
Yufil
Проще выполнения одного оператора на запрос? :)

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

Добавлено: 15 Ноябрь 2014, 15:32
kreator
Ну ведь не один оператор на запрос. Надо подготовить очередь, потом её обработать, либо данные перекидывать в другую. Мы запрос привязываем сразу к универсальной виртуальной таблице. И в цикле по ней обрабатываем и создаём очередь.

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

Добавлено: 15 Ноябрь 2014, 18:04
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

Возможность на ходу одним оператором выполнить запрос и бежать дальше - это ли не прекрасно ? :)

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

Добавлено: 15 Ноябрь 2014, 21:02
PavelNK
Рекомендую обратить внимание на ADO, в этом случае нет необходимости объявлять файлы, можно прочитать хоть одно поле,а можно пачку.
Можно прочитать одну запись, а можно целую пачку.

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

Добавлено: 15 Ноябрь 2014, 21:10
Developer
PavelNK может есть реальный пример (исходник) на ADO применительно к SQL коду в Clarion?
Прошу поделись на форуме.
Заранее спасибо.

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

Добавлено: 15 Ноябрь 2014, 21:36
PavelNK
Был где-то. Поищу

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

Добавлено: 16 Ноябрь 2014, 11:12
PavelNK
Приблизительно так. Радуйтесь и забывайте про файлы при работе с SQL :D. Приложенный файл - 7z-архив, т.к. прикрепить файл с другим расширением, кроме как .clw не удалось :(

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

Добавлено: 18 Ноябрь 2014, 18:01
PavelNK
Тишина, и мертвые с косами стоят...
Хоть бы кто-нибудь что-нибудь сказал. Помогло-не помогло, понравилось-не понравилось, хорошо-плохо и т.д.

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

Добавлено: 18 Ноябрь 2014, 20:35
Дед Пахом
тут так не принято :-)

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

Добавлено: 19 Ноябрь 2014, 17:56
Admin
PavelNK писал(а):Тишина, и мертвые с косами стоят...
Хоть бы кто-нибудь что-нибудь сказал. Помогло-не помогло, понравилось-не понравилось, хорошо-плохо и т.д.
Мне и с MAV хорошо.

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

Добавлено: 19 Ноябрь 2014, 18:11
gopstop2007
Admin писал(а):Мне и с MAV хорошо.
Так он вроде как уже не развивается? :(