Страница 1 из 1

PROP:SQL related files

Добавлено: 09 Июнь 2017, 11:17
gopstop2007
Для формирования отчетов, предварительно получаю данные с сервера mysql по условию (за период) и полученный результат записываю в аналогичные файлы (memory - IMDD), далее из них строю отчеты.
Сделано так, чтобы не насиловать сервер, так как объем данных большой. :)
Как получить результат запроса из двух и более таблиц в mysql

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

SELECT t1.id, t2.name, t2.code FROM table as t1 LEFT OUTER JOIN table2 as t2 ON t1.id = t2.id
в MAV без проблем, но надо без него. :)
А вот как через prop:sql получить результат запроса или есть еще варианты?

PROP:SQL related files

Добавлено: 09 Июнь 2017, 11:24
RaFaeL
А в чем вопрос то? Так и получить. Только файл, куда ты хочешь вернуть запрос, должен соответствовать структуре, которую тебе вернет PROP:SQL, т.е. в первое поле вернется первая колонка запроса, во второе вторая колонка и т.п. Имена полей значения не имеют

PROP:SQL related files

Добавлено: 09 Июнь 2017, 12:47
gopstop2007
RaFaeL писал(а): 09 Июнь 2017, 11:24 Только файл, куда ты хочешь вернуть запрос, должен соответствовать структуре, которую тебе вернет PROP:SQL
Спасибо, самое оно. :D Запутался маленько.

PROP:SQL related files

Добавлено: 09 Июнь 2017, 12:57
Yufil
В своё время рассылал процедуру на чистом Clarion, которая безо всяких MAV выполняла запросы
Правда, надо в базе данных создать таблицу с одним полем типа String (в неё ничего не пишется).
А потом, после всех настроек - одно удовольствие

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

LoadQueueFromSQL('Delete people where id=1' )  ! Без параметров 
LoadQueueFromSQL('Select Name,Age From people where id=1',, Loc:Name, Loc:Age) ! Загрузка значений в поля. Если записи нет, пишется пробел или 0 (null не обрабатывается) 

PeopleQ  Queue(PeopleQ) 
Age         Long 
Name      Cstring(30) 
              End 

LoadQueueFromSQL('Select Age,Name From People', PeopleQ, PeopleQ:Age, PeopleQ:Name) ! Загрузка запроса в очередь. 
 
Да, ещё процедура возвращает код завершения Clarion, если авария. IF LoadQueueFromSQL Then Message(Error()) ...
Ну и ещё всякие извраты...

PROP:SQL related files

Добавлено: 09 Июнь 2017, 13:11
gopstop2007
Yufil писал(а): 09 Июнь 2017, 12:57 В своё время рассылал процедуру на чистом Clarion...
Да видел, но как то использовать не получалось. А процедура возвращает результат запроса только в список полей или можно указать саму очередь? И есть ли ограничение на кол-во результатных полей указываемых в процедуре?

PROP:SQL related files

Добавлено: 09 Июнь 2017, 13:40
Yufil
А посмотри внимательно. Если второй параметр опущен, то в список. А если второй параметр указан, то это-очередь, а дальше-поля очереди,куда писать. В принципе, их можно и не указывать (тогда кладётся в первое поле очереди, второе и т д), но у меня иногда по непонятным причинам не срабатывало, поэтому поля очереди обычно указываю. Количество результатных полей ограничено (у меня 10), но поправить текст, чтобы их было, например, 30 - нет проблем. Кроме того, можно, как указано выше, задать имя очереди или группы, а сами поля не указывать. Тогда можно, наверное, и больше...
Но в реальной жизни больше 14-15 параметров не требовалось, тем более, что подгрузить дополнительное значение, например, для отчёта -элементарно

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

LoadQueueFromSQL('Select people....', peopleq, ....) 
LOOP PeopleQ#=1 TO RECORDS(PeopleQ) 
   Get(PeopleQ, PeopleQ#) 
   LoadQueueFromSQL('Select name from town where id=' & PeopleQ:Town_id ,, Loc:Town_Name) 
   Print(... ) 
END  
Собственно говоря, про всякие Set-Next и всё такое забываешь достаточно быстро :)

. А в таблице БД поле ровно одно, независимо от...

PROP:SQL related files

Добавлено: 09 Июнь 2017, 14:08
kreator
Вот тема - forum.clarionlife.net/viewtopic.php?f=6&t=3486. На шестой странице мой вариант работы с запросами.

PROP:SQL related files

Добавлено: 10 Июнь 2017, 18:16
gopstop2007
kreator писал(а): 09 Июнь 2017, 14:08 Вот тема - forum.clarionlife.net/viewtopic.php?f=6&t=3486. На шестой странице мой вариант работы с запросами.
Спасибо, не видел :)