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

ODBC

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

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

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

Сообщение 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) вроде как должно очистить последнюю успешно прочитанную запись
не помогло. В чем дело?
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Не знал, что PROP:Sql можно применять к VIEW, и ничего не нашёл в доке.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

К View можно делать prop:SQL. Все броузы так работают.
Мои замечания. "Select * from..." очень странно. Давайте описание хотя бы вьюхи. Второе. Надо бы после открытия вьюхи сделать set для неё. Вообще в моём понимании закрытия вьюхи достаточно для сброса "буфера". Я часто использую вьюху в таком контексте, не нарывался на проблемы.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

kreator писал(а): 29 Июнь 2018, 12:16К View можно делать prop:SQL. Все броузы так работают.
да ладно.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Дед Пахом писал(а): 29 Июнь 2018, 11:41Не знал, что PROP:Sql можно применять к VIEW, и ничего не нашёл в доке.
Посмотри в справке по теме "Using Embedded SQL". С вьюхой нужно быть аккуратным, порядок полей надо хитро выстраивать.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Дед Пахом писал(а): 29 Июнь 2018, 12:19
kreator писал(а): 29 Июнь 2018, 12:16К View можно делать prop:SQL. Все броузы так работают.
да ладно.
А для чего вьюхи в стандартных шаблонах?
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Поищите ради интереса "PROP:SQL" в \templates и \libsrc
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

1. Задвоение записей обычно означает отсутствие первичного ключа.
2.А что делается внутри цикла и как проверяется View на завершение?
3.Select * означает чтение всех полей неизвестно в каком порядке. Лучше бы так не делать, а прочитать явно
4. Кстати, о какой СУБД идёт речь ?
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Дед Пахом писал(а): 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, 9:33
Откуда: Томск

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

Сообщение 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-го обращения,
а потом в конце их идут данные от повторного обращения.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Anatoly писал(а): 29 Июнь 2018, 11:32Clarion 6.3 9058, Win Xp, Oracle 12
Обстановка, прямо сказать, стрёмная.
Я бы, как уже намекал выше, делал prop:sql не по VIEW, а по FILE, а дальше уже LOOP по VIEW.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Кстати, можно на описание VIEW глянуть?
С уважением, ДП
Anatoly
Бывалый
Сообщения: 91
Зарегистрирован: 11 Август 2005, 9:33
Откуда: Томск

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

Сообщение 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 ' - и далее условие отбора
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Понимаю теперь, почему VIEW{prop:sql}, а не FILE{prop:sql}: ключ /TURBOSQL не поддерживается драйвером Oracle.
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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

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