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

Проблема очистки View

Добавлено: 29 Июнь 2018, 11:32
Anatoly
Clarion 6.3 9058, Win Xp, Oracle 12

Ситуация :
Читаю Open(TablView)
TablView{Prop:Sql} = 'Select * From Table трататата'
Loop
Next(TablView)
.....
End
Close(TablView)
При 1-ом обращении - все Ok.
При последующих обращениях в TablView может появиться задвоение считанной из Table информации.
Ставил перед End цикла оператор Delete(TablView) вроде как должно очистить последнюю успешно прочитанную запись
не помогло. В чем дело?

Проблема очистки View

Добавлено: 29 Июнь 2018, 11:41
Дед Пахом
Не знал, что PROP:Sql можно применять к VIEW, и ничего не нашёл в доке.

Проблема очистки View

Добавлено: 29 Июнь 2018, 12:16
kreator
К View можно делать prop:SQL. Все броузы так работают.
Мои замечания. "Select * from..." очень странно. Давайте описание хотя бы вьюхи. Второе. Надо бы после открытия вьюхи сделать set для неё. Вообще в моём понимании закрытия вьюхи достаточно для сброса "буфера". Я часто использую вьюху в таком контексте, не нарывался на проблемы.

Проблема очистки View

Добавлено: 29 Июнь 2018, 12:19
Дед Пахом
kreator писал(а): 29 Июнь 2018, 12:16К View можно делать prop:SQL. Все броузы так работают.
да ладно.

Проблема очистки View

Добавлено: 29 Июнь 2018, 12:21
kreator
Дед Пахом писал(а): 29 Июнь 2018, 11:41Не знал, что PROP:Sql можно применять к VIEW, и ничего не нашёл в доке.
Посмотри в справке по теме "Using Embedded SQL". С вьюхой нужно быть аккуратным, порядок полей надо хитро выстраивать.

Проблема очистки View

Добавлено: 29 Июнь 2018, 12:22
kreator
Дед Пахом писал(а): 29 Июнь 2018, 12:19
kreator писал(а): 29 Июнь 2018, 12:16К View можно делать prop:SQL. Все броузы так работают.
да ладно.
А для чего вьюхи в стандартных шаблонах?

Проблема очистки View

Добавлено: 29 Июнь 2018, 12:23
Дед Пахом
Поищите ради интереса "PROP:SQL" в \templates и \libsrc

Проблема очистки View

Добавлено: 29 Июнь 2018, 13:30
Yufil
1. Задвоение записей обычно означает отсутствие первичного ключа.
2.А что делается внутри цикла и как проверяется View на завершение?
3.Select * означает чтение всех полей неизвестно в каком порядке. Лучше бы так не делать, а прочитать явно
4. Кстати, о какой СУБД идёт речь ?

Проблема очистки View

Добавлено: 29 Июнь 2018, 19:22
kreator
Дед Пахом писал(а): 29 Июнь 2018, 12:23 Поищите ради интереса "PROP:SQL" в \templates и \libsrc
Согласен, не корректно выразился. Имел ввиду, что механизмы похожи. В броузе создаётся вьюха, здесь вьюха. А конкретная реализация где-то в недрах драйверов. Конечно, я её не знаю.
Yufil писал(а): 29 Июнь 2018, 13:30 Задвоение записей обычно означает отсутствие первичного ключа.
К примеру ТС это, наверно, не имеет значение. Один проход по вьюхе нормально всё вытаскивает. Проблемы начинаются где-то при использовании get, reget, next, previous. Может что-то с буфером вьюхи не так.

Проблема очистки View

Добавлено: 02 Июль 2018, 11:19
Anatoly
Извиняюсь за задержку.
На самом деле в реальном Select перечислены поля аналогичные TablView.
Open(TablView)
TablView{Prop:Sql} = 'Select a, b , c From Table трататата'
Loop
Next(TablView)
If ErrorCode() <> 0 then Break.
...
Delete(TablView) ! Когда Close(TablView) не помогло, усилил этим оператором - написано, что удаляет последнюю успешно прочитанную запись
End
Close(TablView) ! Думал, что очиститTablView

Set(TablView) перед Loop практически "подвешивает" расчет при большом количестве записей в TablView.

Такую конструкцию использовал постоянно, было все Ok,

При повторном обращении к этой конструкции в TablView сперва читаются записи оставшиеся от 1-го обращения,
а потом в конце их идут данные от повторного обращения.

Проблема очистки View

Добавлено: 02 Июль 2018, 11:28
Дед Пахом
Anatoly писал(а): 29 Июнь 2018, 11:32Clarion 6.3 9058, Win Xp, Oracle 12
Обстановка, прямо сказать, стрёмная.
Я бы, как уже намекал выше, делал prop:sql не по VIEW, а по FILE, а дальше уже LOOP по VIEW.

Проблема очистки View

Добавлено: 02 Июль 2018, 11:29
Дед Пахом
Кстати, можно на описание VIEW глянуть?

Проблема очистки View

Добавлено: 02 Июль 2018, 11:35
Anatoly
trnView VIEW(trn)
PROJECT(trn:DTRNTRAN)
PROJECT(trn:DTRNTRAN_DATE)
PROJECT(trn:DTRNTRAN_TIME)
PROJECT(trn:DTRNCREATE)
PROJECT(trn:DTRNCREATE_DATE)
PROJECT(trn:DTRNCREATE_TIME)
PROJECT(trn:CTRNACCD)
PROJECT(trn:CTRNCUR)
PROJECT(trn:CTRNACCC)
PROJECT(trn:CTRNCURC)
PROJECT(trn:MTRNSUM)
PROJECT(trn:MTRNRSUM)
PROJECT(trn:MTRNSUMC)
PROJECT(trn:ITRNTYPE)
PROJECT(trn:ITRNSOP)
PROJECT(trn:DTRNDOC)
PROJECT(trn:DTRNDOC_DATE)
PROJECT(trn:DTRNDOC_TIME)
PROJECT(trn:DTRNVAL)
PROJECT(trn:DTRNVAL_DATE)
PROJECT(trn:DTRNVAL_TIME)
PROJECT(trn:DTRNSHADOW)
PROJECT(trn:DTRNSHADOW_DATE)
PROJECT(trn:DTRNSHADOW_TIME)
PROJECT(trn:IDsmr)
End

TrnView{prop:Sql} = 'SELECT DTRNTRAN,DTRNCREATE,CTRNACCD,CTRNCUR,CTRNACCC,CTRNCURC,MTRNSUM,MTRNRSUM,MTRNSUMC,ITRNTYPE,ITRNSOP,DTRNDOC,DTRNVAL,DTRNSHADOW,IDSMR From Trn ' - и далее условие отбора

Проблема очистки View

Добавлено: 02 Июль 2018, 12:22
Дед Пахом
Понимаю теперь, почему VIEW{prop:sql}, а не FILE{prop:sql}: ключ /TURBOSQL не поддерживается драйвером Oracle.

Проблема очистки View

Добавлено: 02 Июль 2018, 13:16
Yufil
Неправильно ты, дядя Федор, бутерброд ешь... Если мы хотим просто отбирать записи, а все поля берутся из одной таблицы - нам нужен Prop:SQLFilter, а Prop:SQL вроде как и ни к чему.

Ну и поищи в этом форуме волшебное слово LoadQueueFromSQL - мне кучу времени экономит....