powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / "длинная строка"
14 сообщений из 14, страница 1 из 1
"длинная строка"
    #35847431
q1q2q3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую вот такой код: 2.rar Ранше все нормально работал, добавил несколько поле после етого не работает. Если удалит название несколких полей из программы, тогда работает. Значить, получается "длинная строка". Помогите пожалуйста, как можно грамотно написаит такой код?
...
Рейтинг: 0 / 0
"длинная строка"
    #35847457
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1q2q3Использую вот такой код: 2.rar Ранше все нормально работал, добавил несколько поле после етого не работает. Если удалит название несколких полей из программы, тогда работает. Значить, получается "длинная строка". Помогите пожалуйста, как можно грамотно написаит такой код?

А код где ?
...
Рейтинг: 0 / 0
"длинная строка"
    #35847466
q1q2q3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
"длинная строка"
    #35847486
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сруктура Вашей таблицы - это ярчайший пример ...

нет желания что-то изменить?
...
Рейтинг: 0 / 0
"длинная строка"
    #35847494
q1q2q3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимосруктура Вашей таблицы - это ярчайший пример ...

нет желания что-то изменить?

Нет, лучше структуру таблицу не трогать.
...
Рейтинг: 0 / 0
"длинная строка"
    #35847511
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну понятно, конструируем лисапед с нажиматором и не ищем легких путей.

как пример, демонстрирующий, что проблемы
решаются просто и надежно

автор INTO CURSOR prix_ksk

ERASE prix_ksk.DBF

вот это пишется сразу

Код: plaintext
1.
 INTO table prix_ksk
...
Рейтинг: 0 / 0
"длинная строка"
    #35847535
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сведению
на 9-ке при установки set enginebehavior 70
это все отработало
...
Рейтинг: 0 / 0
"длинная строка"
    #35847839
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ыыыыыы - Мама роди меня обратно !!!
Сохранил у себя как пример "как не надо делать."

прошелмимок сведению
на 9-ке при установки set enginebehavior 70
это все отработало
Аналогично.
Так что уточните версию фокса и что значит не работает
как вариант
Код: plaintext
1.
2.
kosk=abun+FAB+ksk
kosk1=FIL11+fil12
SELECT BUX.q_kod,q_koshk,q_alish,q_ad,q_sk,sum(&kosk+&kosk1),Q_N;

Ну и все-таки стоит пересмотреть структуру таблиц , один раз переписать всё это безобразие и забыть как дурной сон.
...
Рейтинг: 0 / 0
"длинная строка"
    #35848256
q1q2q3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=-ыыыыыы - Мама роди меня обратно !!!
Сохранил у себя как пример "как не надо делать."

прошелмимок сведению
на 9-ке при установки set enginebehavior 70
это все отработало
Аналогично.
Так что уточните версию фокса и что значит не работает
как вариант
Код: plaintext
1.
2.
kosk=abun+FAB+ksk
kosk1=FIL11+fil12
SELECT BUX.q_kod,q_koshk,q_alish,q_ad,q_sk,sum(&kosk+&kosk1),Q_N;

Ну и все-таки стоит пересмотреть структуру таблиц , один раз переписать всё это безобразие и забыть как дурной сон.

У меня VFP6 и у меня этот код тоже не работает.

А в структуре таблицы что не так? Что нужно менять?
...
Рейтинг: 0 / 0
"длинная строка"
    #35848525
q1q2q3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VFP9 работает. Этот код как как можно переделать, так что и VFP6 тоже работал?
...
Рейтинг: 0 / 0
"длинная строка"
    #35848687
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда попробуйте за 2 прохода
1 получите отдельные поля по каждой из составляющей
SELECT BUX.q_kod,q_koshk,q_alish,q_ad,q_sk,sum(abun) as abun, ..... sum(fil12) as fil12 ,Q_N;
FROM BUX;
WHERE Q_SK=0;
GROUP BY BUX.q_kod,q_koshk,q_alish;
INTO CURSOR prix_ksk

2 потом сложите в одном поле все эти составляющие
select BUX.q_kod,q_koshk,q_alish,q_ad,q_sk,abun+....+fil12 ,Q_N;
*******************
А насчет того что менять - ну тут очень много писать надо.
Советую Вам сначала почитать про нормализацию БД

а кратко - вам нужно превратить ваши таблички из "горизонтальных" в "вертикальные"
ну на простейшем примере (как я понял из приложенной таблицы- у вас нечто похожее)

Пусть у нас есть 2 склада , на который мы храним что-то
делаем таблицу
Товар / количество_Склад 1 / количество_Склад 2
Радостно ведем в ней учет
общее количество по складам получаем
количество_Склад 1 + количество_Склад 2
Но в один прекрасный момент времени у нас появляеться еще один склад
ХА , не вопрос - лупим еще поле количество_Склад 3
Теперь общее количество по складам получаем
количество_Склад 1 + количество_Склад 2 + количество_Склад 2
Ищем по всем программам и отчетам правим и радуемся.

Но зловредное начальство не унимаеться , открывает все новые склады, мы матюкаемся, добавляем поля, исправляем формы ввода , программы и репорты .
Не успеваем к сроку- получаем за это "по шапке".
И это все вместо того чтобы попивая чаек-кофеек сидеть в интернете.
Короче страх и ужОс.
Собственно это то что реализовано у вас.

А что-же нужно было сделать
Да все просто
табличку создаем вида
Код_Товара / Код_Склада / Количество
Ну и таблички-справочники с названиями.

Добавляем новый склад - ничего менять не нужно , только в справочник складов добавить
Сумму по складам получаем с помощью
group by Код_Склада
общую - вообще без групировок
Сводную ведомость по складам - с помощью Cross-таблицы
Все делаем один раз .
При вводе нового склада говорим начальству - охринеть -работы навалило,
но вместо того чтобы лихорадочно рыться по проекту - сидим в интернете , читаем форум.

Все это очень сильно упрощенно , но идея думаю понятна.
...
Рейтинг: 0 / 0
"длинная строка"
    #35848712
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй разбить суммирование на части примерно так:

Код: plaintext
SELECT SUM(f1+f2) + SUM(f3+f4) FROM ...

Идея заключается в том, чтобы уменьшить количество слагаемых внутри одного выражения SUM(), а по окончании суммирования сложить результаты.

Также возможно (хотя и не уверен), может помочь SYS(3055)

q1q2q3А в структуре таблицы что не так? Что нужно менять?
"Не так" вот это безумное количество однотипных полей. "Однотипных" по той причине, что возникла необходимость в их суммировании.

Это указывает на серьезные ошибки проектирования базы данных (не данной таблицы, а всего комплекса данных в приложении). В грамотно спроектированном прилоежнии просто не должно возникать подобных задач.
...
Рейтинг: 0 / 0
"длинная строка"
    #35849580
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил на VFP6SP5

разложение на несколько SUM() дает вполне нормальный результат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
abun="abuna1+abuna2+abuna3+abuna4+abuna5+abuna6+abuna9+ABUNA10+ABUNA11+abuna7+"+;
	"aztv+SUMQ_ABUN+abuna12+abuna13+abuna14+abuna15+abuna16+abuna17+abuna18+abuna19+"+;
	"abuna20+baktom"
FAB="AGDASH+YEVLAX_AB+kanca_ab+LENK_AB+ZAQAT_AB+ALIBAY_AB+shaki_ab+"+;
	"dutyfree+ghc_vip+silk_way+elvaservis+ABUNA21+ABUNA22+ABUNA23+ABUNA24+ABUNA25"
ksk="k_12+k_14+k_16+k_17+k_19+k_2+k_20+k_21+k_35+k_26+k_27+k_29+k_3+k_30+"+;
	"k_36+k_37+k_4+k_7+k_31+k_33+k_8+k_22+k_23+k_38"
fil11="kanca+yevlax+zaqatala+quba+lankaran+shaki+kyrdamir+saatli+mingacevir+"+;
	"neftcala+salyan+balakan+sab_abad+qusar+qabala+qazax+calilabad+sumqayit+shamkir+"+;
	"naxcivan+axsu+goychay+agdam+GEDEBEY+QAX"
FIL12="goranboy+ucar+tovuz+masalli+shamaxi+barda+ismayilli+haciqabul+imishli+"+;
	"agcabedi+belasuvar+xocavend+FIZULI+XACHMAZ+beylaqan+shirvan+aasmn+cebrayil+deveci"


select q_kod,q_koshk,q_alish,q_ad,q_sk,Q_N, ;
	sum(&abun) + sum(&fab) + sum(&ksk) + sum(&fil11) + sum(&fil12) ;
from bux ;
into cursor ttt ;
WHERE Q_SK= 0  ;
GROUP BY q_kod,q_koshk,q_alish

Если делать через одно выражение SUM(), то вылет происходит при добавлении 103 слагаемого. Длина выражения из 102 слагаемых = 729 символов, а из 103 слагаемых = 737 символов

102 слагаемое - это beylagan, а 103 - это shirvan

Причем, если не использовать выражение SUM(), то вылет произойдет при превышении 254 символов в макроподстановке.

Т.е. есть какое-то внутреннее (не документированное) ограничение на длину выражения макроподстановки внутри агрегатных функций.

PS: все-равно, какое-то "безумное" выражение получается
...
Рейтинг: 0 / 0
"длинная строка"
    #36008941
TheGuest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[necropost(?)]
А мне "в наследство" похожая медвежуть досталась. Пока не нормализовал (походу проще будет с нуля всё сделать :) ), но пока что лень сподвигла написать доп. табличку с кодами полей и практически все выборки делать по ней. Типа так

//fieldnames (kod C(10))

fsum=0
select fieldnames
scan
tmpvar='имяаццкойтаблицы.'+trim(fieldnames.kod)
fsum=fsum+&tmpvar
endscan

Жесть (и у меня табличка посложней, но не в том суть), но в сравнении с тем, что было, - сказка :lol:


ВладимирМЭто указывает на серьезные ошибки проектирования базы данных (не данной таблицы, а всего комплекса данных в приложении). В грамотно спроектированном прилоежнии просто не должно возникать подобных задач. Так то в грамотно спроектированном...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / "длинная строка"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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