Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Узнать значения retrieve аргументов перед retrieve / 21 сообщений из 21, страница 1 из 1
24.10.2016, 11:21
    #39332596
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
Есть необходимость узнать значения retrieve аргументов перед retrieve.
Для возможной отмены retrieve.

Но в событии retrievestart их нет.
Ф-ю Retrieve(arg1, ...) билдер не ндает переопределить

Подскажите, куда копать?
...
Рейтинг: 0 / 0
24.10.2016, 17:56
    #39333039
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
Не совсем понятна задача, ведь вы же первоначально эти аргументы и задаете перед вызовом Retrieve(arg1, ...), а потом вдруг вы хотите их посмотреть и если что поменять.
Вызываете dw.Retrieve(arg1, ...) просто тогда, когда уже проверили аргументы, например в своем отдельном событии или функции, а не в событии constructor у DW.
...
Рейтинг: 0 / 0
24.10.2016, 18:38
    #39333070
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleksЕсть необходимость узнать значения retrieve аргументов перед retrieve.
Для возможной отмены retrieve.

Но в событии retrievestart их нет.
Ф-ю Retrieve(arg1, ...) билдер не ндает переопределить

Подскажите, куда копать?
аргументы retrieve можно получить через evaluate, если я правильно помню.
...
Рейтинг: 0 / 0
25.10.2016, 09:43
    #39333279
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
Уточню
Есть желание сделать кеширование данных на клиенте.
т.е. если уже был ретрив с такими параметрами - не делать новый а вместо него доставать данные из кеша.

Аргументы ретрив можно получить через евалюейт - но только после самого ретрива.
Мне же необходимо перед
...
Рейтинг: 0 / 0
25.10.2016, 10:12
    #39333304
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleks,
Код: sql
1.
dw_1.Describe("DataWindow.table.arguments") 


Но я тоже не совсем понимаю задачу.
Почему не проверить аргументы перед вызовом?
...
Рейтинг: 0 / 0
25.10.2016, 10:23
    #39333315
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
Riska,

Где мне перед вызовом их можно узнать?
Переопределить Retrieve(arg...) билдер не дает
...
Рейтинг: 0 / 0
25.10.2016, 11:09
    #39333356
pand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleks,

Судя по всему pfc Вы не используете .

Может Вам еще не поздно прикрутить к своему проекту. Отпадет очень много головной боли.
Там уже реализован механизам "перехвата" ретрива.
и технология кеширования (расшаривания) тоже.
...
Рейтинг: 0 / 0
25.10.2016, 11:53
    #39333424
Raven A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
Попробуйте анализировать не аргументы а сам запрос в SQLPreview
...
Рейтинг: 0 / 0
25.10.2016, 12:44
    #39333497
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleksУточню
Есть желание сделать кеширование данных на клиенте.
т.е. если уже был ретрив с такими параметрами - не делать новый а вместо него доставать данные из кеша.

Аргументы ретрив можно получить через евалюейт - но только после самого ретрива.
Мне же необходимо перед
Все равно не пойму, что мешает вам сохранить предыдущие аргументы и перед вызовом новых данных сравнить их с новыми аргументами, которые вы задали, и далее сделать, то что вам нужно.
Создается впечатление, что не вы задаете аргументы для Retrieve, иначе бы такой задачи не стояло.
...
Рейтинг: 0 / 0
26.10.2016, 10:39
    #39334169
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
AISroleksУточню
Есть желание сделать кеширование данных на клиенте.
т.е. если уже был ретрив с такими параметрами - не делать новый а вместо него доставать данные из кеша.

Аргументы ретрив можно получить через евалюейт - но только после самого ретрива.
Мне же необходимо перед
Все равно не пойму, что мешает вам сохранить предыдущие аргументы и перед вызовом новых данных сравнить их с новыми аргументами, которые вы задали, и далее сделать, то что вам нужно.
Создается впечатление, что не вы задаете аргументы для Retrieve, иначе бы такой задачи не стояло.

Билдер не дает возможности переопределить Retrieve()
...
Рейтинг: 0 / 0
26.10.2016, 13:27
    #39334353
pand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleksAISпропущено...

....
Создается впечатление, что не вы задаете аргументы для Retrieve, иначе бы такой задачи не стояло.

Билдер не дает возможности переопределить Retrieve()

Вот же ж Вы настойчивый и упрямый.

Если у Вас используется библиотека pfc посмотрите на событие pfc_retrieve объекта pfc_u_dw

если нет
то попробую объяснить на пальцах

что Вам мешает создать свой объект унаследованный от datawindow
объявить там событие типа my_retrieve и в нем проверять параметры и в нем же вызывать или не вызывать retrieve.


разве что Вам достался мега проект в котором нет наследника datawindow

тогда Вам нужна лопата побольше чем у Геракла .
...
Рейтинг: 0 / 0
26.10.2016, 14:58
    #39334460
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
В самом событии retrievestart значений аргументов нет. Но можно получить их в этот момент методом dw.Describe("Evaluate(..)", 0) и, в зависимости от результата, блокировать дальнейшую выборку. Никогда не пробовал, но, по идее, должно сработать.

Другой, более сложный вариант - добавить искусственно-созданный дополнительный числовой параметр (например, FooArg), а оператор WHERE выражения SQL несколько изменить, на что-то подобное:
Код: plsql
1.
...... WHERE <ваше_условие> AND 1=:FooArg..... 


В зависимости от условий передаете в fooArg либо 0, либо 1. Надеюсь, идея понятна.
Правда, в последнем случае придется делать retrieve() дважды.
...
Рейтинг: 0 / 0
26.10.2016, 15:50
    #39334551
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleks...
Билдер не дает возможности переопределить Retrieve()
Не надо переопределять Retrieve()! ДО его вызова проверьте аргументы и тогда уже решайте вызывать или нет. Что здесь не понятного или не получается?

P.S. надеюсь, что вы понимаете, что при одинаковых аргументах спустя период времени могут быть получены назные наборы данных и ваша задача теряет всякий смысл.
...
Рейтинг: 0 / 0
28.10.2016, 17:15
    #39336533
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleks...
Для возможной отмены retrieve.
...
Подскажите, куда копать?
Копать можно сюда
PowerBuilder Help SQLPreview event (DataWindows)

Description

Occurs immediately before a SQL statement is submitted to the DBMS. Functions that trigger DBMS activity are Retrieve, Update, and ReselectRow.
PowerBuilder event information
Event ID: pbm_dwnsql

Argument Description
request SQLPreviewFunction by value. The function that initiated the database activity.For a list of valid values, see SQLPreviewFunction.
sqltype SQLPreviewType by value. The type of SQL statement being sent to the DBMS.For a list of valid values, see SQLPreviewType .
sqlsyntax String by value. The full text of the SQL statement.
buffer DWBuffer by value. The buffer containing the row involved in the database activity. For a list of valid values, see DWBuffer.
row Long by value. The number of the row involved in the database activity, that is, the row being updated, selected, inserted, or deleted.
...

Return value

Set the return code to affect the outcome of the event:

0 Continue processing
1 Stop processing
2 Skip this request and execute the next request

For information on setting the return code in a particular environment, see "About return values for DataWindow events".

Usage

Some uses for the sqlsyntax argument are:

· Changing the SQL to be executed (you can get the value of sqlsyntax, modify it, and call SetSQLPreview)
· Keeping a record (you can write the SQL statement to a log file)

Reported row number The row number stored in row is the number of the row in the buffer, not the number the row had when it was retrieved into the DataWindow object.
If the row that caused the error is in the Filter buffer, you must unfilter it if you want the user to correct the problem.

...

Но я тоже не понимаю, почему вы так упорно не хотите сохранить аргументы в собственном коде, который обращается к встроенной функции билдера.
...
Рейтинг: 0 / 0
31.10.2016, 15:20
    #39338008
кто тоc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
А в чем проблема записать аргументы например в message свой и дальше проверять перед retrieve если в message есть значение то брать оттуда.
...
Рейтинг: 0 / 0
07.11.2016, 17:10
    #39342799
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
AISroleks...
Билдер не дает возможности переопределить Retrieve()
Не надо переопределять Retrieve()! ДО его вызова проверьте аргументы и тогда уже решайте вызывать или нет. Что здесь не понятного или не получается?

P.S. надеюсь, что вы понимаете, что при одинаковых аргументах спустя период времени могут быть получены назные наборы данных и ваша задача теряет всякий смысл.

хотелось просто обойтись малой кровью, не заменяя ретрив на свою ф-ю
...
Рейтинг: 0 / 0
07.11.2016, 18:31
    #39342874
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleksAISпропущено...

Не надо переопределять Retrieve()! ДО его вызова проверьте аргументы и тогда уже решайте вызывать или нет. Что здесь не понятного или не получается?

P.S. надеюсь, что вы понимаете, что при одинаковых аргументах спустя период времени могут быть получены назные наборы данных и ваша задача теряет всякий смысл.

хотелось просто обойтись малой кровью, не заменяя ретрив на свою ф-ю
Вы не поняли моей ремарки. Я посоветовал вообще нечего с Retrieve() не делать, т.к. при одних и тех же аргументах запрос может вернуть разные наборы данных спустя, например, час и ваша экономия времени приведет только к негативному результату - вы не получите новых данных, а будете довольствоваться устаревшими.

ПС. а про "малой кровью" вообще ничего не понял :( проще не куда у DW создать функцию (или событие), в которой проверять уж если таки надо аргументы, а потом её же дергать при нужде вызова Retrieve(). Ну, да ладно...
...
Рейтинг: 0 / 0
08.11.2016, 22:03
    #39343902
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
AIS Я посоветовал вообще нечего с Retrieve() не делать, т.к. при одних и тех же аргументах запрос может вернуть разные наборы данных спустя, например, час и ваша экономия времени приведет только к негативному результату - вы не получите новых данных, а будете довольствоваться устаревшими.
Золотые слова! Полностью согласен.
Если только дополнить слегка. Можно ретрайвить что-то позволяющее оценить изменились или нет данные перед основным ретрайвом. В любом другом случае - все уже сказано выше.
...
Рейтинг: 0 / 0
11.11.2016, 11:45
    #39345459
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
AISroleksпропущено...


хотелось просто обойтись малой кровью, не заменяя ретрив на свою ф-ю
Вы не поняли моей ремарки. Я посоветовал вообще нечего с Retrieve() не делать, т.к. при одних и тех же аргументах запрос может вернуть разные наборы данных спустя, например, час и ваша экономия времени приведет только к негативному результату - вы не получите новых данных, а будете довольствоваться устаревшими.

ПС. а про "малой кровью" вообще ничего не понял :( проще не куда у DW создать функцию (или событие), в которой проверять уж если таки надо аргументы, а потом её же дергать при нужде вызова Retrieve(). Ну, да ладно...

Самое простое и правильное решение- переопределение ретрива
Но, к сожалению, 'то невозможно
Все остальные варианты решений требуют изменения не только 1 обьекта ДВ, но и мест откуда вызывается ретрив, коих в коде немало
...
Рейтинг: 0 / 0
11.11.2016, 14:09
    #39345610
pand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
AISroleksпропущено...


хотелось просто обойтись малой кровью, не заменяя ретрив на свою ф-ю
Вы не поняли моей ремарки. Я посоветовал вообще нечего с Retrieve() не делать, т.к. при одних и тех же аргументах запрос может вернуть разные наборы данных спустя, например, час и ваша экономия времени приведет только к негативному результату - вы не получите новых данных, а будете довольствоваться устаревшими.

ПС. а про "малой кровью" вообще ничего не понял :( проще не куда у DW создать функцию (или событие), в которой проверять уж если таки надо аргументы, а потом её же дергать при нужде вызова Retrieve(). Ну, да ладно...


TO roleks

Вчитайтесь в выделенные слова очень внимательно. Они не имеют смысла только если в одно рабочее место и никто и ничто не может изменить данные , кроме как из единственного экземпляра вашей программы.

Будьте благоразумны .
и судя по вашей фразе

roleksВсе остальные варианты решений требуют изменения не только 1 обьекта ДВ, но и мест откуда вызывается ретрив, коих в коде немало


pfc вы таки не используете , что добавляет Вам лишней головной боли
...
Рейтинг: 0 / 0
11.11.2016, 19:10
    #39345906
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать значения retrieve аргументов перед retrieve
roleksСамое простое и правильное решение- переопределение ретрива
Но, к сожалению, 'то невозможно
Все остальные варианты решений требуют изменения не только 1 обьекта ДВ, но и мест откуда вызывается ретрив, коих в коде немало
Ну почему невозможно? Сделайте DW на основе процедуры и переопределяйте все что хотите внутри нее.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Узнать значения retrieve аргументов перед retrieve / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]