|
|
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Добрый день! Подскажите, плиз, как бороться с таким глюком. Следующий запрос Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Но если просто добавить связь с другой таблицей (её поля для краткости не отображаем), то получаем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Конечно, если поставить iif(empty(N.TYPE) ,'000' ,N.TYPE), то всё будет хорошо. Но прикол в том, что: 1) это готовое ПО и менять ничего нельзя; 2) в других подразделениях этого глюка нет. Подскажите, можно ли устранить этот глюк изменением каких-нибудь настроек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 11:32:00 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
1. Ну если НИЧЕГО менять в запросе нельзя, какой совет вы хотите получить ?! 2. Какая версия VFP ? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 11:38:13 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
iif(empty(N.TYPE) ,'0' ,N.TYPE) разная размерность при работе IIF '0' - один символ, а N.TYPE - 3 символа iif(empty(N.TYPE) ,'000' ,N.TYPE) в этом выражении вывод размерности один и тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 11:38:50 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Jovanny Подскажите, можно ли устранить этот глюк изменением каких-нибудь настроек? Нет. Нельзя. Дело в том, что команда Select-SQL ДО того, как собственно начать выполнение запроса формирует структуру итоговой выборки. Ведь результат должен так или иначе попасть в таблицу, а таблица должна иметь структуру. Вот сначала и происходит вычисление типа и размерностей полей по первым попавшимся записям таблиц-источников. Если первой попалась запись у которой empty(N.TYPE)=.T., то значение поля будет '0', т.е. C(1). Если же первой попалась запись у которой empty(N.TYPE)=.F., то значение поля будет N.TYPE и размерность будет равна размерности поля N.TYPE. Без изменения собственно самой команды Select-SQL эту ошибку не исправишь. Надо написать примерно так: iif(empty(N.TYPE) ,PADR('0',LEN(N.TYPE)),N.TYPE) Ну, или в том подразделении где есть глюк придется как-то физически перестроить таблицы, так, чтобы первой попадалась запись у которой empty(N.TYPE)=.F. Но это временная мера и без гарантий, что в будущем у другого подразделения опять проявиться тот же глюк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 11:46:56 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Aleksey-K1. Ну если НИЧЕГО менять в запросе нельзя, какой совет вы хотите получить ?! 2. Какая версия VFP ? 1.Всё дело в том, что в других подразделениях этого глюка нет. Значит дело в настройках. Где менять (или искать)? 2. Visual FoxPro 7.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:03:27 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Дело не в настройках. Внимательно читай пост ВладимираМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:08:24 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Если первой попалась запись у которой empty(N.TYPE)=.T., то значение поля будет '0', т.е. C(1). Если же первой попалась запись у которой empty(N.TYPE)=.F., то значение поля будет N.TYPE и размерность будет равна размерности поля N.TYPE. ... Ну, или в том подразделении где есть глюк придется как-то физически перестроить таблицы, так, чтобы первой попадалась запись у которой empty(N.TYPE)=.F. Но это временная мера и без гарантий, что в будущем у другого подразделения опять проявиться тот же глюк. Оставил все записи с empty(N.TYPE)=.F. и все N.TYPE со значениями C(3). Результат тот же. Обращаю внимание - глюк появляется, когда есть связь с другой таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:11:07 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
JovannyОбращаю внимание - глюк появляется, когда есть связь с другой таблицей. 1. Вообще-то для меня непонятно в запросе: Код: plaintext 1. 2. 2. Перечислите поля таблицы SPLAT и их размерности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:21:11 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Владимир СА Происходит связь с другой таблицей через WHERE, а ничего из таблицы SPLAT неберем. Зачем соединяемся с таблицей SPLAT ??? Я указывал, что поля SPLAT для краткости не отображаем. Если нравиться, можно добавить в запрос поле SPLAT.NAME C(60). Владимир СА 2. Перечислите поля таблицы SPLAT и их размерности. Их довольно много, но поля TYPE там нет, если Вы это имели ввиду. Aleksey-K2. Какая версия VFP ? Кстати, проверили и на FoxPro 2.6 for DOS - тот же глюк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:39:05 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Тогда в запрос поставьте как предлагал ВладимирМ : iif(empty(N.TYPE) ,PADR('0',LEN(N.TYPE)),N.TYPE) as TYPE1 и сообщите результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:55:25 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Я в таком случае поступаю сл. образом: 1. Создаю курсор с требуемой структурой (CREATE CURSOR ...) 2. Результат запроса сохраняю к этом курсоре INSERT MyCursor (...) SELECT N.KOD , .... В этом случае тип поля TYPE_B можно задать корректно заранее. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 13:08:42 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Jovanny ВладимирМ Если первой попалась запись у которой empty(N.TYPE)=.T., то значение поля будет '0', т.е. C(1). Если же первой попалась запись у которой empty(N.TYPE)=.F., то значение поля будет N.TYPE и размерность будет равна размерности поля N.TYPE. ... Ну, или в том подразделении где есть глюк придется как-то физически перестроить таблицы, так, чтобы первой попадалась запись у которой empty(N.TYPE)=.F. Но это временная мера и без гарантий, что в будущем у другого подразделения опять проявиться тот же глюк. Оставил все записи с empty(N.TYPE)=.F. и все N.TYPE со значениями C(3). Результат тот же. Обращаю внимание - глюк появляется, когда есть связь с другой таблицей. Основываясь на разъеснениях ВладимирМ, могу предположить, что первые строки OBJECT по коду не соответствуют первым строкам SPLAT, по этому при формировании структуры по первым строкам выборки empty(N.TYPE) возвращает .F. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 14:02:24 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Владимир САТогда в запрос поставьте как предлагал ВладимирМ : iif(empty(N.TYPE) ,PADR('0',LEN(N.TYPE)),N.TYPE) as TYPE1 и сообщите результат. Это сработало. Но я повторяю, что ничего менять в ПО мы не можем. Можем дать только предложения. Обнаружили ещё одну интересную вещь - всё зависит от значений поля KOD - для некоторых значений работает нормально, а для некоторых нет. Т.е. если оставить в таблице OBJECT значения с одним конкретным значением KOD, то для одних значений возвращает нормально, а для других глючит. Причём другие строки должны быть не просто удалены, но и выполнен PACK. Интересно... Будем искать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 14:03:08 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Да будет с Вами удача!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 14:08:46 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Наконец-то нашли что-то конкретное - работает нормально, если число записей в OBJECT не превышает 653. Подскажите кто-нибудь - это решаемо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 15:53:34 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
JovannyНаконец-то нашли что-то конкретное - работает нормально, если число записей в OBJECT не превышает 653. Подскажите кто-нибудь - это решаемо? Обе таблицы сархивируй и направь на Email: vlad@tec14.permenergo.ru Посмотрим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 16:24:58 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Хм... Где-то я эти названия полей уже видел... Уж не налоговая ли инспекция? ;-) Если ДА, то КОМУ Вы направляете предложения? Буду дико удивлен, если Вы назовете имя "Владимир Иванович"!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 22:52:43 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
JovannyНаконец-то нашли что-то конкретное - работает нормально, если число записей в OBJECT не превышает 653. Подскажите кто-нибудь - это решаемо? Да при чем здесь количество полей. Вот примерчик Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Получим описанный эффект. Как исправить не меняя сам запрос? Ну, в данном конкретном случае, надо уйти от связи вида один-ко-многим. Т.е. не должно быть ситуации, когда одной записи из таблицы cur1 соответсвует несколько записей из таблицы cur2. Но это частное решение и без каких-либо гарантий. Т.е. весь вопрос в том, какие именно записи будут использованы командой Select-SQL для формировании структуры таблицы. Да, я это все делал в VFP6SP5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 23:07:50 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Hi Jovanny! Простой совет - прими это как ДАННОСТЬ - так писать НЕЛЬЗЯ. В более свежих версиях фокса вместо "000" можно использовать функцию CAST(). Рассказывать тебе про особенности работы оптимизатора при выполнении многотабличных запросов, про особенности определения размерностей таких "плавающих" полей думаю не стоит - ты всё равно объяснения не читаешь... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 03:43:06 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
KomissarХм... Где-то я эти названия полей уже видел... Уж не налоговая ли инспекция? ;-) Гениально, Холмс! Как Вы догадались? Komissar Если ДА, то КОМУ Вы направляете предложения? Буду дико удивлен, если Вы назовете имя "Владимир Иванович"!!! Нет, не ему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 12:14:25 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
ВладимирМДа при чем здесь количество полей. Не полей - записей . Этот вопрос снимается - попробовали на таблицах с меньшим числом полей - этот эффект стал проявляться на количестве записей около 350. Проанализировать не было времени, но скорей всего зависит от количества уникальных значений поля OBJECT.KOD. ВладимирМ Получим описанный эффект. Как исправить не меняя сам запрос? Ну, в данном конкретном случае, надо уйти от связи вида один-ко-многим. Т.е. не должно быть ситуации, когда одной записи из таблицы cur1 соответсвует несколько записей из таблицы cur2. Но это частное решение и без каких-либо гарантий. Т.е. весь вопрос в том, какие именно записи будут использованы командой Select-SQL для формировании структуры таблицы. От связи один-ко-многим тут не уйти... Вообще-то интересно, когда результат запроса зависит от порядка записей в таблице. Ладно, давайте закончим этот топик. И самое интересное в конце - оцените глубину мысли разработчика: в полном тексте запроса в предикате WHERE стоит and !empty(n.type). Т.е. примерно так SELECT N.KOD , N.TYPE, iif(empty(N.TYPE) ,'0' ,N.TYPE) TYPE; FROM OBJECT N, SPLAT S; WHERE N.KOD=S.KOD and !empty(n.type) . Ну, в общем, спасибо всем за обсуждение! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 12:42:53 |
|
||
|
Размернось полей в запросе
|
|||
|---|---|---|---|
|
#18+
Hi Jovanny! Я вообще не понимаю - если программа не ваша, то чего беспокоится то? Банально сообщаете автору что "не работает" и всё! Это его проблемы - надо учится нормально писать :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 03:39:44 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=302&tid=1593472]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 188ms |
| total: | 329ms |

| 0 / 0 |
