ХП в Condition behavior

Обсуждение MAV Direct ODBC

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Денис
Бывалый
Сообщения: 70
Зарегистрирован: 07 Июль 2005, 5:39
Откуда: Хабаровск
Контактная информация:

ХП в Condition behavior

Сообщение Денис »

Я так понимаю это сделано для того чтобы в бровзе показывать результат выполнения ХП, или нет ?

хочется пояснений как с этим правельно работать
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: ХП в Condition behavior

Сообщение Andrew™ »

Денис писал(а):Я так понимаю это сделано для того чтобы в бровзе показывать результат выполнения ХП, или нет ?

хочется пояснений как с этим правельно работать
именно для этого, но надо придерживаться определённых правил.

декларируешь с помощью EXTENSION шаблона Storage procedure
накручиваешь её логикой как тебе надо
ХП должна в конце концов возвращать SELECT ...

количество и качество колонок в SELECTе должно совпадать с количеством и качеством пробинденных колонок в Browse
т е это последовательньсть .AddCol в .Init методе.
но можно и переопределить количество/последовательность колонок, для этого в Condition Behaviour при выборе в качестве загрузки Browse ХП можно создать список колонок для приёма.
OVV
Бывалый
Сообщения: 58
Зарегистрирован: 21 Сентябрь 2005, 10:41
Откуда: Московская область

Сообщение OVV »

Андрей!
А как из ХП в брауз получить вычисляемое поле? (т.е. физически отсутствующее в таблице)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

OVV писал(а):Андрей!
А как из ХП в брауз получить вычисляемое поле? (т.е. физически отсутствующее в таблице)
кнопку FORMULA я не стал поддерживать т к есть много ограничений в её функционале.

всё делается штатно, закрепляем за колонкой локальную переменную

в методе .FillQueue до вызова PARENT'а её инициализируем

только надо понимать следующее, если мы её инициализируем по условиям закгрузки записи, то обращаться к полям загруженной - текущей записи надо не через FILE:FIELD, а через SELF.Rec.Field, т к Browse грузит в свой буфер - прямо в List Queue
OVV
Бывалый
Сообщения: 58
Зарегистрирован: 21 Сентябрь 2005, 10:41
Откуда: Московская область

Сообщение OVV »

Я, наверное, плохо объяснил свою проблему.
Вычисляемое поле у меня возвращает ХП. Я поместил в Hot Fields локальную переменную и ожидал примерно следующего:
ХП должна в конце концов возвращать SELECT ...

количество и качество колонок в SELECTе должно совпадать с количеством и качеством пробинденных колонок в Browse
т е это последовательньсть .AddCol в .Init методе.
Но, увы... Теперь, кажется, понял разницу между SELF.AddCol и SELF.AddField
Можно, конечно, в методе .FillQueue для каждой записи вызвать ХП и заполнить это поле, но как-то это криво по моему...

Пока сделал так: Завел в таблице дополнительное поле и в браузе использую его, а гружу брауз из ХП. Но это тоже как-то криво.
Есть ли правильный путь?
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

OVV писал(а):Я, наверное, плохо объяснил свою проблему.
Вычисляемое поле у меня возвращает ХП. Я поместил в Hot Fields локальную переменную и ожидал примерно следующего:
ХП должна в конце концов возвращать SELECT ...

количество и качество колонок в SELECTе должно совпадать с количеством и качеством пробинденных колонок в Browse
т е это последовательньсть .AddCol в .Init методе.
Но, увы... Теперь, кажется, понял разницу между SELF.AddCol и SELF.AddField
Можно, конечно, в методе .FillQueue для каждой записи вызвать ХП и заполнить это поле, но как-то это криво по моему...

Пока сделал так: Завел в таблице дополнительное поле и в браузе использую его, а гружу брауз из ХП. Но это тоже как-то криво.
Есть ли правильный путь?
ну ты сам процитировал, количество и качество колонок должно совпадать с приёмным SELECT'ом, раз у тебя есть вычисляемое поле и работа через ХП, что означает нам по барабану какой мог бы получиться SELECT запрос без ХП, вставляем в колонку любое поле любого другого файла (ОбразецТипаКолонки) - и оно будет получать данные из ХП для соответсвующей колонки.
OVV
Бывалый
Сообщения: 58
Зарегистрирован: 21 Сентябрь 2005, 10:41
Откуда: Московская область

Сообщение OVV »

Хм... Но это
вставляем в колонку любое поле любого другого файла (ОбразецТипаКолонки) - и оно будет получать данные из ХП для соответсвующей колонки.
как-то еще более криво, чем то, что я придумал с дополнительным полем.. :(
Уже через месяц я сам буду долго вспоминать при чем же тут поле "любого другого файла", а если еще кому-то придется разбираться....
Хотелось бы все-таки, чтоб через локальную переменную в Hot Fields.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

OVV писал(а):Хм... Но это
вставляем в колонку любое поле любого другого файла (ОбразецТипаКолонки) - и оно будет получать данные из ХП для соответсвующей колонки.
как-то еще более криво, чем то, что я придумал с дополнительным полем.. :(
Уже через месяц я сам буду долго вспоминать при чем же тут поле "любого другого файла", а если еще кому-то придется разбираться....
Хотелось бы все-таки, чтоб через локальную переменную в Hot Fields.
надо понимать следующее:

есть таблицы - структуры на серваке, при первом обращении к которым происходит проверка соответсивя описания в DCT и в БД, повторно эти проверки уже не происходят. Так вот штатно Browse строится по структурам из БД(DCT), биндование колонок происходит по образцам - оригиналам - полям соответсвующих файлов

ХП же как таковая не продекларирована как структура в DCT, т е по хорошему Browse на неё не натравить, То что реализовано в библиотеке - это ухищрение, подружить ХП с Browse, НО Brows'у нужны колонки для приёма, а он их биндит по полям из DCT, вот такая петрушка, Brows'у нужны для биндования ОРИГИНАЛЫ (типы колонок), читает же всё равно в свой буфер.
Денис
Бывалый
Сообщения: 70
Зарегистрирован: 07 Июль 2005, 5:39
Откуда: Хабаровск
Контактная информация:

Сообщение Денис »

Вот что я подумал: Если Browse заполняется из результата ХП то что мешает вычислять значение поля прямо в этой ХП в селекте ?
OVV
Бывалый
Сообщения: 58
Зарегистрирован: 21 Сентябрь 2005, 10:41
Откуда: Московская область

Сообщение OVV »

Денис писал(а):Вот что я подумал: Если Browse заполняется из результата ХП то что мешает вычислять значение поля прямо в этой ХП в селекте ?
Ничего не мешает. Более того: именно там и вычисляется! :)

А я вот что подумал: А почему бы в DCT не объявлять структуру для приема результатов ХП? Только при первом обращении не проверять ее на соответствие таблице на сервере. Или в структуре MAVFILE объявлять поля, которые не проверять на наличие в БД.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

OVV писал(а):
Денис писал(а):Вот что я подумал: Если Browse заполняется из результата ХП то что мешает вычислять значение поля прямо в этой ХП в селекте ?
Ничего не мешает. Более того: именно там и вычисляется! :)

А я вот что подумал: А почему бы в DCT не объявлять структуру для приема результатов ХП? Только при первом обращении не проверять ее на соответствие таблице на сервере. Или в структуре MAVFILE объявлять поля, которые не проверять на наличие в БД.
я ж писал что для биндования колонок нужен ОБРАЗЕЦ для биндования, который берётся как поле из любого файла, этот образец (SQLDESCRIBE) инициализируется автоматически при первом обращении к полю файла и всего один раз в одном соединении

ну в DCT STRING, в БД LONG, на самом деле ничего тут страшного нет, но нам надо знать что же в БД, а по твоей логике мы этого не знаем
OVV
Бывалый
Сообщения: 58
Зарегистрирован: 21 Сентябрь 2005, 10:41
Откуда: Московская область

Сообщение OVV »

Andrew Myalin писал(а):
OVV писал(а):
А я вот что подумал: А почему бы в DCT не объявлять структуру для приема результатов ХП? Только при первом обращении не проверять ее на соответствие таблице на сервере. Или в структуре MAVFILE объявлять поля, которые не проверять на наличие в БД.
я ж писал что для биндования колонок нужен ОБРАЗЕЦ для биндования, который берётся как поле из любого файла, этот образец (SQLDESCRIBE) инициализируется автоматически при первом обращении к полю файла и всего один раз в одном соединении
Ну, наверное, я плохо представляю себе физику процесса...
ну в DCT STRING, в БД LONG, на самом деле ничего тут страшного нет, но нам надо знать что же в БД, а по твоей логике мы этого не знаем
Мы знаем, что в БД: Там нет вообще такого поля.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

OVV писал(а):
Andrew Myalin писал(а):
OVV писал(а):
А я вот что подумал: А почему бы в DCT не объявлять структуру для приема результатов ХП? Только при первом обращении не проверять ее на соответствие таблице на сервере. Или в структуре MAVFILE объявлять поля, которые не проверять на наличие в БД.
я ж писал что для биндования колонок нужен ОБРАЗЕЦ для биндования, который берётся как поле из любого файла, этот образец (SQLDESCRIBE) инициализируется автоматически при первом обращении к полю файла и всего один раз в одном соединении
Ну, наверное, я плохо представляю себе физику процесса...
ну в DCT STRING, в БД LONG, на самом деле ничего тут страшного нет, но нам надо знать что же в БД, а по твоей логике мы этого не знаем
Мы знаем, что в БД: Там нет вообще такого поля.
есть правило, чтобы пробиндить колонку, нужЁн образец для биндования - какие параметры подставлять в SQLbindCol, там их немеренно(зависимы от структуры приёма в БД) , отдавать это наружу не вижу смысла, теряется контроль, а так я сам инициализирую этот образец после поверки соответсвия структуры в DCT и в БД
Денис
Бывалый
Сообщения: 70
Зарегистрирован: 07 Июль 2005, 5:39
Откуда: Хабаровск
Контактная информация:

Сообщение Денис »

А зачем городить такое ? Андрей же расписал как можно из результата ХП заполнить свою очередь. Дальше делаем с ней что хотим.
OVV
Бывалый
Сообщения: 58
Зарегистрирован: 21 Сентябрь 2005, 10:41
Откуда: Московская область

Сообщение OVV »

Денис писал(а):А зачем городить такое ? Андрей же расписал как можно из результата ХП заполнить свою очередь. Дальше делаем с ней что хотим.
Мне надо, чтоб вычисляемое поле попадало в брауз. Если я загружу результат в свою очередь (что без проблем), то и брауз мне придется рисовать самому. А зачем? Есть же шаблон.
Вычисляемое поле можно передать в брауз немного исхитрившись. Что я и делаю. Хотелось бы, так сказать, более эстетично :) , но Андрей сказал, что не прокатит. Жаль, но ему виднее...
Ответить