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

ODBC

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 8:33
Откуда: Томск

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

Сообщение Anatoly » 29 Июнь 2018, 11:32

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) вроде как должно очистить последнюю успешно прочитанную запись
не помогло. В чем дело?

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2099
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 29 Июнь 2018, 11:41

Не знал, что PROP:Sql можно применять к VIEW, и ничего не нашёл в доке.
С уважением, ДП

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 29 Июнь 2018, 12:16

К View можно делать prop:SQL. Все броузы так работают.
Мои замечания. "Select * from..." очень странно. Давайте описание хотя бы вьюхи. Второе. Надо бы после открытия вьюхи сделать set для неё. Вообще в моём понимании закрытия вьюхи достаточно для сброса "буфера". Я часто использую вьюху в таком контексте, не нарывался на проблемы.
We are hard at work… for you. :)

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2099
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 29 Июнь 2018, 12:19

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

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 29 Июнь 2018, 12:21

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

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 29 Июнь 2018, 12:22

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

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2099
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 29 Июнь 2018, 12:23

Поищите ради интереса "PROP:SQL" в \templates и \libsrc
С уважением, ДП

Yufil
Ветеран движения
Сообщения: 1034
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

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

Сообщение Yufil » 29 Июнь 2018, 13:30

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

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 29 Июнь 2018, 19:22

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

Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 8:33
Откуда: Томск

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

Сообщение Anatoly » 02 Июль 2018, 11:19

Извиняюсь за задержку.
На самом деле в реальном 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-го обращения,
а потом в конце их идут данные от повторного обращения.

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2099
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 02 Июль 2018, 11:28

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

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2099
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 02 Июль 2018, 11:29

Кстати, можно на описание VIEW глянуть?
С уважением, ДП

Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 8:33
Откуда: Томск

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

Сообщение Anatoly » 02 Июль 2018, 11:35

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 ' - и далее условие отбора

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2099
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 02 Июль 2018, 12:22

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

Yufil
Ветеран движения
Сообщения: 1034
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

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

Сообщение Yufil » 02 Июль 2018, 13:16

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

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

Ответить