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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

P.S. надеюсь, что вы понимаете, что при одинаковых аргументах спустя период времени могут быть получены назные наборы данных и ваша задача теряет всякий смысл.
...
Рейтинг: 0 / 0
Узнать значения retrieve аргументов перед retrieve
    #39336533
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Узнать значения retrieve аргументов перед retrieve
    #39338008
кто тоc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в чем проблема записать аргументы например в message свой и дальше проверять перед retrieve если в message есть значение то брать оттуда.
...
Рейтинг: 0 / 0
Узнать значения retrieve аргументов перед retrieve
    #39342799
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISroleks...
Билдер не дает возможности переопределить Retrieve()
Не надо переопределять Retrieve()! ДО его вызова проверьте аргументы и тогда уже решайте вызывать или нет. Что здесь не понятного или не получается?

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

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

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

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

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

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


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

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

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


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

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


TO roleks

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

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

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


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


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