powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
59 сообщений из 59, показаны все 3 страниц
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273005
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я чего-то не понимаю...
Нижеприведённые 2 запроса VFP7 выполняет, даже не зажмурившись, а вот 9-ка - увы, почти виснет на втором запросе. Причём, при любой установке SET ENGINEBEHAVIOR:
Код: plaintext
1.
2.
3.
SELECT abcount,MAX(vag) as vag FROM temp_xat GROUP BY  1  INTO CURSOR q1 NOFILTER
SELECT a.abcount,a.kod_prp,a.kod_strit,a.home,a.nm_bl,a.nk,a.m2sb,a.m2so,a.m2s,a.m2,a.kol,a.fp,a.sobst,a.kod_prm;
   FROM temp_xat a;
   INNER JOIN q1 b ON ALLTRIM(STR(a.abcount))+'^'+ALLTRIM(STR(a.vag))=ALLTRIM(STR(b.abcount))+'^'+ALLTRIM(STR(b.vag))

Я решил, было, что 9-ка не умеет быстро делать нужную по ходу запроса индексацию по конкатенированным полям, и попробовал облегчённый вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT temp_xat
INDEX on ALLTRIM(STR(abcount))+'^'+ALLTRIM(STR(vag)) TAG k1

SELECT abcount,MAX(vag) as vag FROM temp_xat GROUP BY  1  INTO TABLE q1
INDEX on ALLTRIM(STR(abcount))+'^'+ALLTRIM(STR(vag)) TAG k1

SELECT a.abcount,a.kod_prp,a.kod_strit,a.home,a.nm_bl,a.nk,a.m2sb,a.m2so,a.m2s,a.m2,a.kol,a.fp,a.sobst,a.kod_prm;
   FROM temp_xat a;
   INNER JOIN q1 b ON ALLTRIM(STR(a.abcount))+'^'+ALLTRIM(STR(a.vag))=ALLTRIM(STR(b.abcount))+'^'+ALLTRIM(STR(b.vag))
Но результат - тот же: полный тормоз. А я, было, хотел уже окончательно перейти на 9-ку...
Или, может, для vfp9 надо такой запрос как-то модифицировать?
Посмотрите, пожалуйста. Уменьшеный DBF-ник прилагаю в архиве.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273008
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, ни зип, ни рар архив почему-то сразу не прикладывается... Хотя - всего 112 кБ...
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273015
Гость12,

а зачем это извращение с ON ALLTRIM(STR(a.abcount))+'^'+ALLTRIM(STR(a.vag))=ALLTRIM(STR(b.abcount))+'^'+ALLTRIM(STR(b.vag))?
Код: plaintext
ON a.abcount=b.abcount and a.vag=b.vag
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273020
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл объяснение такому приколу. Привожу здесь, может, кто-нибудь ещё с такими граблями столкнётся.
Дело в том, что, видимо, vfp9 в отличие от vpf7, не умеет строить индексы по вычисляемым строчным полям, имеющим неопределённый размер. Поэтому для 9-ки пришлось 2-й запрос изменить, слегка модифицировав условие объединения:
Код: plaintext
1.
2.
SELECT a.abcount,a.kod_prp,a.kod_strit,a.home,a.nm_bl,a.nk,a.m2sb,a.m2so,a.m2s,a.m2,a.kol,a.fp,a.sobst,a.kod_prm;
   FROM temp_xat a INNER JOIN q1 b ON ;
 PADR(ALLTRIM(STR(a.abcount))+'^'+ALLTRIM(STR(a.vag)), 50 ,' ')=PADR(ALLTRIM(STR(b.abcount))+'^'+ALLTRIM(STR(b.vag)), 50 ,' ')
и сразу всё заработало очень быстро. Очевидно, причина в том, что фнукция PADR() обеспечивает фиксированный размер связываемых строчных данных - которого, видать и не хватило 9-ке, чтоб победить 7-ку :)
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273021
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проходящий, может, вы и правы насчёт извращения, но сути вопроса это не снимает: фиксированная длина сравниваемых строк, выходит, иногда очень важна для 9-ки. В то время, как 7-ка - легко обходится без подобных условностей и поклонов.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273022
Гость12Проходящий, может, вы и правы насчёт извращения, но сути вопроса это не снимает: фиксированная длина сравниваемых строк, выходит, иногда очень важна для 9-ки. В то время, как 7-ка - легко обходится без подобных условностей и поклонов.Не пишите ерудны. Дело совсем не в фиксированности строк.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273026
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в чём? В приведённых выше кодах как раз разница и заключается в применении PADR(), которая и даёт фиксированную длину.
Ну, или изложите подробней, в чём же тогда разница.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273180
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость12А в чём? В приведённых выше кодах как раз разница и заключается в применении PADR(), которая и даёт фиксированную длину.
Ну, или изложите подробней, в чём же тогда разница.Для начала сравните установки Set ansi.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37273315
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Sergey Sizov:
Не, такие азы я сразу проверил: и в 7-ке, и в 9-ке установлено всё одинаково - SET ANSI off, и, кроме того - SET EXACT off
Но оба фокса, всё-таки видать, по-разному реагируют на строчные команды, оперирующие с неявной длиной строк. Конечно, я не знаток и могу судить поверхностно, но уж слишком явное отличие в работе команд с PADR()-ом и без него в этих двух версиях Фокса.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37274831
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxPro не создает индексы с перменной длиной ключа. Просто не может. Ни в какой версии.

Вы создали условие объединения именно по переменной длине ключа. Каким образом следует сопоставлять подобные выражения? Возможны два варианта:

1. Отсекаем/дополняем выражения до некоторой фиксированной длины, строим временный индекс по этой фиксированной длине и сравниваем значения ключей
2. Никаких индексов не строим и сравниваем ключи "как есть"

Естесственно, в первом случае мы рискуем получить не вполне корректные данные за счет того, что выражение ключа временной индекса не соответствует реальным сравниваемым значениям.

Ну, например, простейший вопрос: а до какой длины надо дополнить или отсечь значение ключа? Скорее всего, по значению первой попавшейся записи, иначе прежде, чем создать индекс придется просканировать обе таблицы на предмет максимальной длины полученного выражения. И если выражение в первой попавшейся записи окажется, скажем, длиной 3 символа, то не понятно, что Вы вообще получите в результирующей выборке!

Если бы Вы использовали функцию SYS(3054), то увидели бы, что при фиксированном значение длины полученного выражения строится временный индекс, а при переменном, объединение выполняется по принципу "Cartesian products", т.е. "тупое" сканирование всех записей, что дает необходимость просканировать 1000*1000 = 1 000 000 записей. Что без индекса выполняется ОЧЕНЬ медленно.

Другими словами VFP9 поступил абсолютно правильно, не став создавать временный индекс. Ну, а тот факт, что при этом время выполнения подобного запроса увеличилось на порядки, должно было Вам подсказать, что само условие объединения не корректно.

В ранних версиях FoxPro (VFP7) результат подобной выборки будет сомнителен. Неизвестно ведь, какое выражение ключа окажется у временного индекса. В смысле, сколько символов.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37275209
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Для быстрого поиска важно чтобы было оптимизированное выражение для рашмора.
Выражение будет Оптимизировано если левая часть от оператора "=" будет такая как при создании индекса, а правая пофиг.
Вот тогда будет летать.
И потом я не люблю все эти Джойны, не проще ли юзать фразу WHERE?
Иногда два последовательных селекта подряд работают быстрее одного закрученного в бараний рог.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37275551
Горе от ума... зачем так усложнять? Ежу же понятно, что с числами легче работать чем со строками. По-моему нужно больше искать ошибки в своих кодах, чем в чужих. А что Вы там учитываете, если не секрет, если Вам 50 разрядов нужно для хранения 10-ричного числа? (Я даже боюсь представить сколько это бит) очень смахивает на учёт молекул... или атомов... а может элементарных частиц?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37276429
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33ВладимирМ,

Для быстрого поиска важно чтобы было оптимизированное выражение для рашмора.Выражение будет Оптимизировано если левая часть от оператора "=" будет такая как при создании индекса, а правая пофиг.
Вот тогда будет летать.
Ну, для начала, в SQL-запросах не имеет значения "справа" или "слева" стоит выражение. Вы путаете SET ANSI и SET EXACT. Они похожи, но отличие как раз в том и заключается, что для SET EXACT важно положение "справа" или "слева", а для SET ANSI - нет. Кроме того, наличие индекса по обоим выражениям все-таки имеет значение. Другой вопрос, какой из них будет использоваться и будет ли использоваться вообще, зависит от конкретного запроса.

И еще, Вы собственно вопрос автора темы читали? Какое отношение это все имеет к заданному автором темы вопросу?

В данном случае индекса нет вообще. FoxPro создает временный индекс. Но! По использованному выражению в условиях объединения построить корректное выражение ключа для временного индекса нельзя (точнее, быстро нельзя). Как следствие, VFP9 и не пытается. Отсюда - тормоза. Ранние версии FoxPro строят-таки временный индекс, но не факт, что значение его ключа будет корректно. Как следствие, не факт, что результат выборки будет корректным.

Питон33И потом я не люблю все эти Джойны, не проще ли юзать фразу WHERE?
Нет. Не проще.

Во-первых, объединение двух таблиц (Join) и фильтрация записей одной таблицы (Where) - это все-таки разные процессы. И первое, что делает анализатор запроса это как раз и пытается отделить одно от другого. То, что Вам кажется "одинаковым" на самом деле таковым не является. SYS(3054,11) - это четко показывает

Во-вторых, реализовать внешнее объединение (Left, Right, Full) только через Where - невозможно в принципе. Придется делать объединение по UNION.

Питон33Иногда два последовательных селекта подряд работают быстрее одного закрученного в бараний рог.
Да. Конечно. Только ключевое слово здесь "иногда". А, кроме того, опять же, какое это имеет отношение к данному запросу? Вполне себе примитивному, если не считать совершенно бессмысленного усложнения условия объединения?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37305844
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНу, для начала, в SQL-запросах не имеет значения "справа" или "слева" стоит выражение. Вы путаете SET ANSI и SET EXACT.
В SQL запросе ВСЁ имеет значение.
Чтобы запрос был оптимизирован механизмом Rushmore, юзер обязан слева от знака "=" написать Поле базы, а справа Выражение.
ВладимирМ, начните изучение Foxpro с версии 2.5, тогда у вас в голове наконец появится ясное представление об оптимизации Rushmore.
Чтобы проверить - достаточно создать таблицу из миллиона записей и проиндексировать её по текстовому полю.
ВладимирМ, не забывайте про Rushmore даже когда вы спите! :))
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37305880
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33ВладимирМНу, для начала, в SQL-запросах не имеет значения "справа" или "слева" стоит выражение. Вы путаете SET ANSI и SET EXACT.
В SQL запросе ВСЁ имеет значение.
Чтобы запрос был оптимизирован механизмом Rushmore, юзер обязан слева от знака "=" написать Поле базы, а справа Выражение.
ВладимирМ, начните изучение Foxpro с версии 2.5, тогда у вас в голове наконец появится ясное представление об оптимизации Rushmore.
Чтобы проверить - достаточно создать таблицу из миллиона записей и проиндексировать её по текстовому полю.
ВладимирМ, не забывайте про Rushmore даже когда вы спите! :))
Долго же Вы собирались с ответом, чтобы просто поиграть словами Почти месяц. При этом так и не удосужившись прочитать исходный вопрос автора темы.

Автора не интересуют советы "общего" плана. У него вполне конкретный вопрос с просьбой объяснить конкретную "непонятку". Почему вот в этих условиях есть ускорение, а вот в этих - нет. Ваш совет просто "не по делу". А значит, скорее всего, будет просто проигнорирован автором темы. Это при условии, что он вообще все еще посещает данный форум, что весьма сомнительно. Скорее всего, "сдал и забыл"...
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37305894
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Ответ был по делу и поможет в 100% случаев решить проблему.
Мой ответ - не используйте JOIN, а используйте простую и понятную фразу WHERE.
Работает быстрее благодаря Rushmore и ошибки в программе минимизируются за счёт читабельности кода.
Ещё совет - слева пишите всегда Поле, по которому создан Индекс, а справа Выражение (может быть другим полем к примеру).
Joinы вообще придумали для совместимости со стандартом SQL, но команда SELELECT SQL была у фокса ещё со времён революции.
Хотите - пишите Joinы, только потом не спрашивайте шо за херня, да шо цэ такэ и чаго хохлы в НАТО поИхалы :)
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37306300
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33Ответ был по делу и поможет в 100% случаев решить проблему.
Какую проблему-то? Вопрос автора темы звучит так: Есть запрос. В VFP7 он оптимизируется, в VFP9 - нет. Почему?

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

PS: Если Вы до сих пор не поняли, что такое JOIN и как его использовать, то это Ваша беда. И тут вовсе нечем хвалится.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37307297
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, я предпочитаю WHERE и UNION.
Работает быстро и без ошибок.
А вы ковыряйтесь в Джопах хоть до посинения
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37312605
Olaf_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Питон33ВладимирМ, я предпочитаю WHERE и UNION.
Работает быстро и без ошибок.
А вы ковыряйтесь в Джопах хоть до посинения

Т.е. утверждаете что при связывании JOIN технология Rushmore не используеться ?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37313364
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Olaf_K
> Т.е. утверждаете ... ?


Он ничего не утверждает, он просто тролит

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37322126
valera_k2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Olaf_K,
похоже что в join оптимизация ограничено работает, самому еще пару лет назад пришлось переписать запросы на where при переходе на 9-ку с 7-ки. таблицы использовались из под приложения для fox2.5dos
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37339032
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
valera_k2000Olaf_K,
похоже что в join оптимизация ограничено работает, самому еще пару лет назад пришлось переписать запросы на where при переходе на 9-ку с 7-ки. таблицы использовались из под приложения для fox2.5dos
Правильно сделал.
фраза where работает как часы.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37351819
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33Мой ответ - не используйте JOIN, а используйте простую и понятную фразу WHERE.
Работает быстрее благодаря Rushmore и ошибки в программе минимизируются за счёт читабельности кода.


2 Питон33

Ну ка изобразите на тестовых данных как будет выглядеть select с where, что бы получить аналогичный результат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE CURSOR test1 (f1 int)

CREATE CURSOR test2 (f2 int)

INSERT INTO test1 VALUES ( 1 )

INSERT INTO test2 VALUES ( 2 )

SELECT * FROM test1;
full JOIN test2 ON f1 = f2
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37352117
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist, 10808560 - как и в майскуле - имитация фуллджойна через юнион.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37352175
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirPaulWist, 10808560 - как и в майскуле - имитация фуллджойна через юнион.

Э-э-э, а код на фоксе можно привести для приведённох курсоров?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37352265
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,
Код: plaintext
1.
2.
select a.*,b.* from a left join b on (...)
union all
select a.*,b.* from b left join a on (...) where isnull(a.somefield)
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37352865
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirPaulWist,
Код: plaintext
1.
2.
select a.*,b.* from a left join b on (...)
union all
select a.*,b.* from b left join a on (...) where isnull(a.somefield)


Ответ принимается.

Только Вы всё равно используете JOIN , а Питон33 писал дословно следующее

Питон33Мой ответ - не используйте JOIN , а используйте простую и понятную фразу WHERE

вот я и хотел посмотреть как он собирается связать две таблы без JOIN
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37353942
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWistвот я и хотел посмотреть как он собирается связать две таблы без JOIN
Хотел бы я посмотреть на постановку реальной задачи где это твоё извращение понадобится!
Если мне надо напечатать ведомость из двух таблиц,то я делаю в 1000 раз проще
При формировании ведомости используется куча полей как из f1 так из f2
- Создаём курсор уникальных значений ключа
SELECT F1 as Key ;
FROM test1 ;
UNION ;
SELECT F2 as Key ;
FROM test1 ;
INTO CURSOR keys
*UNION без ALL создаёт курсор уникальных значений - то что нам и надо, здесь же можем отсортировать по дате документа

SET RELATION TO Key INTO F1, Key INTO F1
*По полям F1,F2 разумеется нужен индекс
*Далее формируем отчёт
REPORT ...

В результате работает в 1000 раз быстрее,так как поля не надо тащить и соединять по UNION из таблиц для ведомости.
Поля по SET RELATION вытаскиваются автоматически непосредственно в процессе печати REPORT
Работает практически мгновенно.
PS.
Учиться,Учиться и ещё раз Учиться как и завещал великий Ленин, а сам подох Неучем...
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37354291
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33в 1000 раз быстрееБазист нервно курит в сторонке
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37354479
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirПитон33в 1000 раз быстрееБазист нервно курит в сторонке
Опечатка!
Не в 1000, а в 10000 раз! :)
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37354977
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33Если мне надо напечатать ведомость из двух таблиц,то я делаю в 1000 раз проще


Ещё раз.

Есть тестовые курсоры

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE CURSOR test1 (f1 int)

CREATE CURSOR test2 (f2 int)

INSERT INTO test1 VALUES ( 1 )

INSERT INTO test2 VALUES ( 2 )

Есть выборка в результате которой получается курсор из ДВУХ полей и двух записей

Код: plaintext
1.
SELECT * FROM test1;
full JOIN test2 ON f1 = f2

2 Питон33 прошу показать код на фоксе без использовния JOIN в результате которого получится аналогичный курсор, ...естественно этот код должен работать для любого количества записей/полей,... надеюсь данный код не является know how :)
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37355010
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

Ну, так он это и показал уже. Идея заключается в том, что сначала создается специфический курсор-диспетчер, который имеет всего одно поле - ключ. Это поле формируется просто объединением по UNION ключей обоих таблиц. При этом дубли исключаются.

Затем по SET RELATION этот курсор-диспетчер связывается с исходными таблицами. Собственно, все.

Главной таблицей отчета является этот самый курсор-диспетчер, а данные из основных таблиц подтягиваются в зависимости от того, какая запись связана с главной.

В принципе, если отчет не содержит сложных вычислений, вполне себе нормальный способ. Правда, утверждать, что это самый лучший из возможных способов я бы не стал. Имеет как достоинства, так и недостатки. В любом случае, настаивать на том, что Join использовать не надо - глупо.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37355432
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМНу, так он это и показал уже. Идея заключается в том, что сначала создается специфический курсор-диспетчер, который имеет всего одно поле - ключ. Это поле формируется просто объединением по UNION ключей обоих таблиц. При этом дубли исключаются.

Затем по SET RELATION этот курсор-диспетчер связывается с исходными таблицами. Собственно, все.

Главной таблицей отчета является этот самый курсор-диспетчер, а данные из основных таблиц подтягиваются в зависимости от того, какая запись связана с главной.

...

То что он показал - это один из способов постороения отчёта и это я понял,... я же у него прошу показать код, который без использования Join создал бы аналогичный курсор из двух курсоров, причём только и исключительно используя select c where как он сам писал/утверждал, а это не совсем то, что он "предоставил".
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37355991
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНу, так он это и показал уже. Идея заключается в том, что сначала создается специфический курсор-диспетчер, который имеет всего одно поле - ключ. Это поле формируется просто объединением по UNION ключей обоих таблиц. При этом дубли исключаются.

Затем по SET RELATION этот курсор-диспетчер связывается с исходными таблицами. Собственно, все.

Главной таблицей отчета является этот самый курсор-диспетчер, а данные из основных таблиц подтягиваются в зависимости от того, какая запись связана с главной.

В принципе, если отчет не содержит сложных вычислений, вполне себе нормальный способ. Правда, утверждать, что это самый лучший из возможных способов я бы не стал. Имеет как достоинства, так и недостатки. В любом случае, настаивать на том, что Join использовать не надо - глупо.
Всё верно,именно это я и хотел показать,однако должен не согласиться с тем что способ медленный.
1. Данные для формирования отчёта подтягиваются из таблиц и сразу печатаются или заносятся в результирующую таблицу.
2. Сам код выглядит проще и читабельней, за счёт чего отладка проще и ошибки минимизируются,скорость разработки выше.
В то время как JOIN работает ещё медленней,да и дров наломать легко.
Помните - Хорошая программа не имеет права на ошибку!
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356060
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон332. Сам код выглядит проще и читабельней, за счёт чего отладка проще и ошибки минимизируются,скорость разработки выше.
А как насчет сортировки в отчете? Например есть таблица с заголовками накладных (номер, дата, код клиента, сумма) и список клиентов (код, название).
Надо вывести отчет с группировкой по именам клиентов, т.е. сортировка должна быть по названию клиента.
И как тут просто и понятно написать подготовку исходных данных без селектов с джоинами?
Питон33В то время как JOIN работает ещё медленней,да и дров наломать легко.
Неадекватный замер, т.к. ты выбираешь не все а только часть результата. Остальная часть подставляется в процессе формирования отчета, т.е. время подготовки результата состоит из двух частей - предвыборка кодов до вывода отчета и довыборка из дочерних таблиц по мере показа отчета.
А если отчет не нужен? Например для экспорта куда-либо нужна последующая обработка результата SCAN`ом или COPY TO. Померь время селекта с джоинами и твоего подхода с последующей генерацией DBF или курсора. Удивишься.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356261
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TПитон332. Сам код выглядит проще и читабельней, за счёт чего отладка проще и ошибки минимизируются,скорость разработки выше.
А как насчет сортировки в отчете? Например есть таблица с заголовками накладных (номер, дата, код клиента, сумма) и список клиентов (код, название).
Надо вывести отчет с группировкой по именам клиентов, т.е. сортировка должна быть по названию клиента.
И как тут просто и понятно написать подготовку исходных данных без селектов с джоинами?
Питон33В то время как JOIN работает ещё медленней,да и дров наломать легко.
Неадекватный замер, т.к. ты выбираешь не все а только часть результата. Остальная часть подставляется в процессе формирования отчета, т.е. время подготовки результата состоит из двух частей - предвыборка кодов до вывода отчета и довыборка из дочерних таблиц по мере показа отчета.
А если отчет не нужен? Например для экспорта куда-либо нужна последующая обработка результата SCAN`ом или COPY TO. Померь время селекта с джоинами и твоего подхода с последующей генерацией DBF или курсора. Удивишься.
Ещё раз для "особо одарённых" кто читать не умеет:
- Создаём курсор уникальных значений ключа
SELECT F1 as Key ;
FROM test1 ;
UNION ;
SELECT F2 as Key ;
FROM test1 ;
INTO CURSOR keys
*UNION без ALL создаёт курсор уникальных значений - то что нам и надо, здесь же можем отсортировать по дате документа
Когда формируется этот Курсор ключей - можно и отсортировать по любому полю,но сами поля выбирать не нужно.
Если использовать Джопы, а потом ещё и SET RELATION,наломать ошибок, потом их выкалупывать - это закончится очередным нытьём на форуме sql.ru
Про угробленное время я вообще молчу - Kein Kommentar!
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356335
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33Если использовать Джо йн ы, а потом ещё и SET RELATION,наломать ошибок, потом их выкалупывать - это закончится очередным нытьём на форуме sql.ru
Про угробленное время я вообще молчу - Kein Kommentar! Ну, если после джойнов кто-то ухитряется ещё и сетрелейшен использовать... это да, это сильно
Насчёт адекватности замера (вторая часть этого поста 10989816 ) наш анонимус промолчал. Забыл ответить или просто добавить нечего?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356397
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33*UNION без ALL создаёт курсор уникальных значений - то что нам и надо, здесь же можем отсортировать по дате документа
Когда формируется этот Курсор ключей - можно и отсортировать по любому полю,но сами поля выбирать не нужно.
Только сортировка это не самая быстрая операция. И насчет простоты и читаемости кода я сомневаюсь.

Питон33Если использовать Джопы, а потом ещё и SET RELATION,наломать ошибок, потом их выкалупывать
SET RELATION зачем вообще использовать? Религия заставляет?
SET RELATION очень проблемный в плане использования, забыл отключить и начинаются глюки где-нибудь дальше в коде который проверен-перепроверен, но не предполагает что две таблицы связаны и во второй указатель начинает ездить "сам по себе".

PS Если у тебя проблемы с использованием JOIN`ов - фокс тут ни при чем.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356504
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirПитон33Если использовать Джо йн ы, а потом ещё и SET RELATION,наломать ошибок, потом их выкалупывать - это закончится очередным нытьём на форуме sql.ru
Про угробленное время я вообще молчу - Kein Kommentar! Ну, если после джойнов кто-то ухитряется ещё и сетрелейшен использовать... это да, это сильно
Насчёт адекватности замера (вторая часть этого поста 10989816 ) наш анонимус промолчал. Забыл ответить или просто добавить нечего?
Уже ответил на этот вопрос - ORDER BY и SET ORDER TO никто не отменял.
А на счёт SET RELATION после Джопов - это вопрос не ко мне а к тому кто рисует Джопы.
Не спорю что Джопы это часть мат. аппарата SQL, в математических задачках наверняка пригодится.
Пусть делает через джопы, тока потом не ноет что криво работает.
В прикладных бухгалтерских и складских задачах проще и понятней делать через SET RELATION.
Время надо ценить.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356621
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33А на счёт SET RELATION после Джопов - это вопрос не ко мне а к тому кто рисует Джопы.
Те, кто использует Join, как правило вообще не используют SET RELATION.

Питон33В прикладных бухгалтерских и складских задачах проще и понятней делать через SET RELATION.
Время надо ценить.
Лично я считаю наоборот. Одна команда Select-SQL наглядно показывает все взаимосвязи таблиц и никак не влиет на другие рабочие области.

Использование SET RELATION - это всегда настройка среды в нескольких местах и при этом надо учитывать возможное влияние подобной настройки на другие модули приложения. С точки зрения отладки, SET RELATION значительно усложняет процесс и Вы теряете время.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37356925
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

SET RELATION только в одном месте, а вычислений бывает - хренова темень.
А вот если сделать все вычисления в Джопах, тогда Джопа получится ну просто Огромная.
Например надо в зависимости от признаков и типов операций делать анализ - учитывать количество и цену товара или не учитывать.
Наворотов целая туча и даю 99.9 % что прога будет меняться.
Опять ковыряться в джопах?
Гораздо проще сделать один раз SET RELATION и думать только о прикладной задаче.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37357116
Banditos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убивал бы своих хомячков за использование "SET RELATION"!
Это не только усложняет работу с данными, но и катастрофически замедляет работу системы.

К тому же, насчет того, что типа "один раз SET RELATION и думать только о прикладной задаче" - вообще очень мало общего с программированием. Хотя бы потому, что придется постоянно, при каждом обращении к данным, бежать в это самое "один раз определенное" место и смотреть (вспоминать), как же там данные связаны. И если "вдруг" понадобиться новый вид отношений данных - добавлять новое "SET RELATION" - и так до бесконечности...

Да, и еще. Видимо, любитель "SET RELATION" никогда в своей жизни не работал с сервером БД, а только с программами, когда базы лежат локально на компе. Ну, максимум - файл-сервер. Хотя даже в случае файл-сервера при "SET RELATION" - таки тормоза более, чем гарантированны...

ЗЫ. Вот только не нужно мне рассказывать, как гигабайтные базы тянутся с сервера на локальный комп и потом "SET RELATION" - и как потом все это "быстро" работает... Ибо ТРОЙНОЙ расстрел за такое: загрузка сервера, загрузка сети, лишнее копирование данных на комп пользователя...
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37357130
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33ВладимирМ,

SET RELATION только в одном месте, а вычислений бывает - хренова темень.
А вот если сделать все вычисления в Джопах, тогда Джопа получится ну просто Огромная.
У Вас какие-то очень оригинальные представления о джойнах. Какие еще вычисления в джонах? Не из-за этого ли Вы их так не любите? Просто готовить не умеете?
Кака обычно мен нравятся такие зантоки от сохи, которые если чем-то не умеют пользоваться, то называют это ненужным,глупым и т.д. Их тесты самые правильные, их выводы самые правильные, а все несогласные - лохи. И их нисколько не смущает вопрос - но ведь зачем то это придумано и где-то это дожно быть очень полезно. Иначе бы этим просто никто бы не пользовался.
Питон33, я сильно не прав?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37358449
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey SizovПитон33ВладимирМ,

SET RELATION только в одном месте, а вычислений бывает - хренова темень.
А вот если сделать все вычисления в Джопах, тогда Джопа получится ну просто Огромная.
У Вас какие-то очень оригинальные представления о джойнах. Какие еще вычисления в джонах? Не из-за этого ли Вы их так не любите? Просто готовить не умеете?
Кака обычно мен нравятся такие зантоки от сохи, которые если чем-то не умеют пользоваться, то называют это ненужным,глупым и т.д. Их тесты самые правильные, их выводы самые правильные, а все несогласные - лохи. И их нисколько не смущает вопрос - но ведь зачем то это придумано и где-то это дожно быть очень полезно. Иначе бы этим просто никто бы не пользовался.
Питон33, я сильно не прав?
Я понимаю что тебе лень читать.
Я привёл конкретный пример и ВладимирМ понял о чём речь.
Например есть задача сделать сложный репорт - некую ведомость.
Вычисления в ней зависят от значений в связанных справочниках.
Создаём курсор ключей, делаем один раз SET RELATION и не нужны ни какие Джопы.
Концентрируемся исключительно на прикладной задаче, а не на джопах!
Более того с джопами можно наступить на грабли когда значение поля в результате соединения таблиц равно .Null.
Джопы удобны в математических задачах, например при работе с массивами.
Впрочем мне всё равно как начинающий юзер Banditos собирается использовать фокспро
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37358566
Питон33Концентрируемся исключительно на прикладной задаче, а не на джопах!
Более того с джопами можно наступить на грабли когда значение поля в результате соединения таблиц равно .Null.
Джопы удобны в математических задачах, например при работе с массивами.Ага, особенно там, где нет массивов. Большей чуши я еще не читал. Математичских! В базах данных!
И прикладные задачи состоят нетолько из отчетов. И умение пользоваться троичной логикой тоже вроде не недостаток. Впрочем, эта логика, похоже, для Вас большой темный лес. Ведь может получиться аж сам NULL! Потому джойн и не нравится. Только не надо собственную неспособность понять нечто прикрывать отговорками и поливанием грязью.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37358919
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто напомню, как всё это было...
Питон33 - http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=852767&msg=10989621 В то время как JOIN работает ещё медленней,да и дров наломать легко.Dima T - http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=852767&msg=10989816 Неадекватный замер, т.к. ты выбираешь не все а только часть результата. Остальная часть подставляется в процессе формирования отчета, т.е. время подготовки результата состоит из двух частей - предвыборка кодов до вывода отчета и довыборка из дочерних таблиц по мере показа отчета.
А если отчет не нужен? Например для экспорта куда-либо нужна последующая обработка результата SCAN`ом или COPY TO. Померь время селекта с джоинами и твоего подхода с последующей генерацией DBF или курсора. Удивишься.tanglir - http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=852767&msg=10990672 Насчёт адекватности замера (вторая часть этого поста 10989816 ) наш анонимус промолчал. Забыл ответить или просто добавить нечего?Питон33 - http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=852767&msg=10991294 Уже ответил на этот вопрос - ORDER BY и SET ORDER TO никто не отменял.
Выводы делайте сами.

PS. Джойны, применяемые к массивам... нечто отдалённо похожее было только у Дедала, что как бы намекает нам
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359288
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.Потому джойн и не нравится. Только не надо собственную неспособность понять нечто прикрывать отговорками и поливанием грязью.
1. Грязью тебя пока ещё никто не поливает,хотя всем давно известно что ты му**к.
2. Join не может нравиться или не нравиться,так как это не девушка. Может ты извращенец? Это многое объясняет
3. Если две таблицы имеют мемо поля - тоже будешь их соединять через Join? Смотри тогда не обкакайся.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359300
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirПросто напомню, как всё это было...
PS. Джойны, применяемые к массивам... нечто отдалённо похожее было только у Дедала, что как бы намекает нам
Иди в counter strike играйся ебанько.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359405
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33, то есть аргументированно ответить ты не можешь. Ни мне, ни проходящему, да, похоже, вообще никому в этом топике. Ч.т.д.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359417
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33проходящий.Потому джойн и не нравится. Только не надо собственную неспособность понять нечто прикрывать отговорками и поливанием грязью.
3. Если две таблицы имеют мемо поля - тоже будешь их соединять через Join? Смотри тогда не обкакайся.

А при чем здесь мемо поля и Join? Они в твоем понимании должны быть как-то связаны?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359443
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG, может, он имеет в виду джойнить со связью по мемо-полям?
Нет, ну я понимаю, что это бред, но единственное объяснение такое: он хотел сказать, что джойнить по мемополям нельзя, а SR-ить можно. Лично я не занимался ни тем, ни другим, так что если кто знает (или у кого есть фокс под рукой) - расскажите, так это или нет?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359461
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirон хотел сказать, что джойнить по мемополям нельзя, а SR-ить можно.
Индексы по мемо-полям не создаются, как следствие SR-ить не получиться, а селекты делаются с мемо в JOIN`е. Только зачем такой изврат в реальной жизни?
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359483
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, я тоже не знаю, зачем.
Но судя по хелпу, для SR индекс необязателен. Однако о скорости подобного "решения" страшно даже подумать. Особенно если таблицы лежат где-нибудь на шаре.
Впрочем, если джойны работают, а SR, даже если и есть, то только без индексов, то это означает, что скорости будут сравнимы, а следовательно, наш герой ещё на шажок приблизился к своему идеалу.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359511
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirНо судя по хелпу, для SR индекс необязателен.
Плохо хэлп читал:
HELPПеред созданием нового отношения между таблицами, они сначала открываются в разных рабочих областях. Дочерняя таблица должна быть индексирована по общему (для связываемых таблиц) полю, в этом случае выражение связи не является числовым. Индекс для дочерней таблицы может быть либо простым индексом (.idx), или структурированным индексом (.cdx), или любым компактным индексом. Если нужный индекс является компактным, то необходимо его активировать при помощи команды SET ORDER.

Примечание
Если вы выполняете команду SET RELATION с нечисловым реляционным выражением, а дочерняя таблица - не имеет активного индекса, то система , Visual FoxPro генерирует сообщение об ошибке.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359524
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, тогда вообще непонятно, зачем Питону33 было заводить этот разговор про мемоджойны.

PS. Я в другом хелпе смотрел (первое, что нагуглил), там неоднозначно написано:
http://msdn.microsoft.com/en-us/library/aa978414(v=vs.71).aspx Specifies the relational expression that establishes a relationship between the parent and child tables. The relational expression is usually the index expression of the controlling index of the child table.то ли " обычно главный индекс", то ли "обычно индекс". Теперь буду знать.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359545
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirDima T, тогда вообще непонятно, зачем Питону33 было заводить этот разговор про мемоджойны.

PS. Я в другом хелпе смотрел (первое, что нагуглил), там неоднозначно написано:
http://msdn.microsoft.com/en-us/library/aa978414(v=vs.71).aspx Specifies the relational expression that establishes a relationship between the parent and child tables. The relational expression is usually the index expression of the controlling index of the child table.то ли " обычно главный индекс", то ли "обычно индекс". Теперь буду знать.
В дочерней может не быть индекса, тогда родительская должна передавать число, которое означает номер записи в дочерней (RECNO()), т.е. мемо тут никаким боком не приделать.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359616
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNGПитон33пропущено...

3. Если две таблицы имеют мемо поля - тоже будешь их соединять через Join? Смотри тогда не обкакайся.

А при чем здесь мемо поля и Join? Они в твоем понимании должны быть как-то связаны?
При том что в ведомости бывает надо текст из мемо полей дорисовать.
Соединишь то ты таблицы по ключам, но остальные поля включая мемо будут попадать в результат этой Джопы - тянуться из двух таблиц,перезаписываться в новый CURSOR или DBF на диске.
Для меня очевидно что это дольше чем простой SET RELATION.
Для лохов типа tanglir,Dima T,Banditos это не очевидно
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359681
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питон33IgorNGпропущено...
А при чем здесь мемо поля и Join? Они в твоем понимании должны быть как-то связаны?
При том что в ведомости бывает надо текст из мемо полей дорисовать.
Соединишь то ты таблицы по ключам, но остальные поля включая мемо будут попадать в результат этой Джопы - тянуться из двух таблиц,перезаписываться в новый CURSOR или DBF на диске.
Для меня очевидно что это дольше чем простой SET RELATION.
И что плохого в том что мемо один раз из таблицы прочитается в курсоре закэшируется? Думаешь лучше если оно сначала при предпросмотре отчета по сетке затянется, потом еще раз при печати. Это минимум, если отчет вперед назад не полистают, а то еше при каждом отображении будет тянуть твое мемо с сервера.
У файл-сервера самое перегруженное место - трафик между сервером и клиентом, а ты его только увеличиваешь чтобы на клиенте памяти немного сэкономить.

Питон33Для лохов типа tanglir,Dima T,Banditos это не очевидно
Мальчик, хамить не надо.
...
Рейтинг: 0 / 0
SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
    #37359994
Питон33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Да иди ты Ф Пееесду!
...
Рейтинг: 0 / 0
59 сообщений из 59, показаны все 3 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL-запрос: 7-ка делает, а 9-ка виснет. ENGINEBEHAVIOR не помогает... :(
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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