:: Visual Foxpro, Foxpro for DOS
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
UNION ALL требует точного совпадения и порядка, и типов, и размеров полей. Особенно если среди списка полей для выбора есть выражения отличающиеся от "просто имя поля".

Поясняю. Получил две выходных таблицы. Выполнил команду LIST STRUCTURE, и разместил в два столбика результаты. Результаты абсолютно идентичны, то есть имеются две точные копии структуры выходных таблиц - по именам полей, по их расположению, по типу и размеру. То есть абсолютно идентичная структура. А вот способ формирования некоторых полей разный. В первом запросе (с одним UNION) одно из полей формируется реальным значением из входных таблиц, а во втором запросе формируется "пустышкой" spac(30) as nkod3

Вот такое различие есть. При случае проверю запрос с 2 UNION на VFP 9.

Вообще формирование этих запросов - это 1% от того, что надо сделать, а я на это потратил 2 дня, что, вообще говоря, непозволительная роскошь.
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Разве это не записано в разделе ограничений? Насколько я помню, оно со времён FPD не менялось.

Немного поменялось.

Вот что я в свое время вставил в Help FPD 2.6, когда переводил его:
Цитата:
В оригинальной документации Microsoft написано, что в вызываемую программу можно передавать до 24 параметров. На практике получалось следующее: 50 параметров передавались нормально, а при попытке передать 51-ый программа выдавала ошибку N 1308 Insufficient stack space. Параметр STACK файла CONFIG.SYS никак на эту ситуацию не влияет.

Но это количество (50) при вызове процедуры командой DO ... WITH, а при вызове ее как функции максимальное количество было 25 или 26 (недавно я писал в какой-то теме точное количество, но сейчас не помню).

А в VFP написано про 26 параметров, но как функцию можно вызывать с 27-ю.
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
По ходу, причина выяснилась - пошлая до безобразия.

Решил для начала откомпилировать подпрограмму, выполняющую запрос. Оказалось, что "Compiled code for this line too long".
Что характерно, сам FPD при запуске модуля ничего такого не сообщал (а должен был!), а выдавал правдоподобно сообщение об отсутствии какой-то колонки. Это сообщение и сбивало с толку.

Какая Мораль? Не верьте фоксу - мало ли что он пишет про ошибки. Если что-то "не так работает" - проверьте ошибки компиляции, "и будет щастье".
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Любопытно, что компиляция всё равно выполняется. Проверил при помощи refox, что же там откомпилировалось. Оказалось, что откомпилированы первые 1024 символа. Получился обрезанный "на полуслове" SQL-запрос. Такие дела... [sm128]



Исправлено 1 раз(а). Последнее : Simple777, 27.05.20 09:03
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Вообще довольно странная ситуация. Проверил рефоксом, как откомпилировался модуль с двумя отдельными запросами (комплируется без ошибок). Оказалось, что первый запрос (с одним UNION) имеет длину 1429 символов, и комплируется без проблем.

Да и вааще, насколько мне известно, ограничения на длину компилируемой строки значительно больше 1024 символов.



Исправлено 2 раз(а). Последнее : Simple777, 27.05.20 09:16
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Вопрос ставится так: есть ли какие-то ограничения на использование более одного UNION в SQL-запросе, кроме тех, что перечислены в HELP?

Без проблем я когда-то в FPD делал запросы и с 12-ю UNION (для годовой выборки).

По поводу же "длины" - ну у тебя же там и куча "излишеств всяких нехороших" (с точки зрения FPD).
В частности во FROM обычно в FPD для имени алиаса я вообще использовал одну (ну две, это от силы) букву.
Типа: FROM sour1 s1, sour3 s3, и везде вместо sour1 и sour3 - эти подстановки спереди:
SELECT s1.kod1,s1.kod2,s2.nkod2,s1.kod3,;
s3.nkod3,s1.kolvo;
и ниже соответственно:
WHERE s1.kod1=s2.kod1 AND s1.kod2=s2.kod2;
Т.е. FPD-шный стиль "экономии букв" не от блажи же какой-то возник, а по нужде как бы.
Хотя, мне кажется, у тебя где-то не там проблемы. Просто разобраться надо. [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 27.05.20 10:58
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Crispy
Просто разобраться надо. [sm128]

Просто у меня отнюдь не бухгалтерия.
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Crispy
Просто разобраться надо. [sm128]

Просто у меня отнюдь не бухгалтерия.

Консерватория что ли? Ну значит в ней проблемы. \m/


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Вот как ты представляешь себе замену имён таблиц на однобуквенные имена в SQL-запросе? Ведь в SQL-запросе указываются не алиасы, а именно имена таблиц. \m/
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Вот как ты представляешь себе замену имён таблиц на однобуквенные имена в SQL-запросе? Ведь в SQL-запросе указываются не алиасы, а именно имена таблиц. \m/

В SQL-запросе таки можно использовать свои собственные алиасы, задаваемые при указании используемых таблиц. [sm128]
Они никакого отношения ко всем "внешним" не имеют. Т.е. можно там писать a,b,с и т.д. - и они будут работать только внутри запроса.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Simple777
Вот как ты представляешь себе замену имён таблиц на однобуквенные имена в SQL-запросе? Ведь в SQL-запросе указываются не алиасы, а именно имена таблиц. \m/
Не надо путать алиасы рабочих областей и локальные алиасы в запросах. Они никак не пересекаются и никак друг на друга не влияют.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Впервые слышу о локальных алиасах в запросах. А можно небольшой пример на базе того запроса, что я тут уже приводил?
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Вроде понял. Криспа же написал.

Только не помню, чтобы где-то было написано про локальные алиасы в запросе.
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Оказывается, в Help про локальные алиасы есть.

Когда-то давным-давно разбирался, и не придал значения этим алиасам, видать. Бывает...



Исправлено 1 раз(а). Последнее : Simple777, 27.05.20 12:32
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Когда-то давным-давно разбирался, и не придал значения этим алиасам, видать.

Для SQL-запроса действует правило: "Все свое ношу с собой" ("Все свое уношу с собой"). \m/
Пришел, понаоткрывал, понаиндексировал, понаотсортировал, понавыбирал. А потом ушел - и ничего не оставил. Ну кроме результата запроса. И при этом, как будто его и не было. Ничего не испортил. Даже записи нигде не сдвинул с места.
[sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
А если даже алиасы не помогут кардинально сократить запрос, то макроподстановка точно поможет.


------------------
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Что-то припоминаю, что с макроподстановкой в SQL-запросах были какие-то заморочки. Вроде как в ехе FPD 2.6 они не канают.



Исправлено 1 раз(а). Последнее : Simple777, 27.05.20 21:09
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Построить SQL-выражение при помощи макросов ничего не мешает, как и при построении любых других выражений. Даже "современные" диалекты SQL пошли навстречу, с предикатом "WITH"

Доб. А может это не "предикат", я не знаю, вобщем эта фигня "WITH" навроде макроса в SQL-выражении, или подзапрос, обозначенный именем, и многократно (или единожды, или ни разу) примененный в выражении.
Если чё, то это ИК научил этому WITH. Говорит, что это у тебя макрос на макросе в выражении запроса, для этого есть WITH. Сам то он где-то в скрижалях вычитал, вероятно...



Исправлено 5 раз(а). Последнее : of63, 27.05.20 21:41
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Наверное, это только для VFP.



Исправлено 1 раз(а). Последнее : Simple777, 27.05.20 21:41
Ratings: 0 negative/0 positive
Re: SQL-запрос из нескольких таблиц FPD 2.6
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Нет, и не для VFP. Для T-SQL какого-то, ИК на Оракле, значит там это есть. даже Коровка использует, наверное
Но это не суть. Фоксовое выражение, VFP-шное или FPD-шное, можно строить из макросов, в т.ч и SQL-оператор. Почему нет?
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика