|
|
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток всем. Помогите, плиз, делающему первые шаги. Есть таблица, допустим в 10 строк. В простом варианте надо в ячейке первой строки поставить сумму последующих девяти. Код: plaintext Данный код не работает, выдает ошибку. В более сложном варианте, надо считать не строки а столбцы, я понимаю что можно считать в курсоре Код: plaintext И еще, если можно то подскажите как присвоить переменной значение выборки ... Например: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 13:33 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
По первым двум вопросам - это надо для отчета? Если да, то лучше таким суммированием заниматься в отчете. Select SQL в фоксе - команда, а не выражение. Это касательно первого и третьего вопросов. По второму вопросу: почему решено, что в курсоре можно, а в таблице нельзя? Обходной маневр для третьего вопроса: Код: plaintext 1. Если запрос будет возвращать одно значение, то получится полная аналогия с требуемым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 13:44 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Sergey Sizov.По первым двум вопросам - это надо для отчета? Это надо в форме, в Grid Sergey Sizov. По второму вопросу: почему решено, что в курсоре можно, а в таблице нельзя? т.е. я могу написать следующее: Код: plaintext 1. 2. Sergey Sizov. Обходной маневр для третьего вопроса: Код: plaintext 1. а что б его вставить в таблицу нужно сделать так : Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 16:13 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
До чего понятливый собеседник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:22 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Если у вас VFP 8-9 - смотрите в сторону SQL комманд SELECT / INSERT/ UPDATE В них синтаксис стал побогаче. По поводу первого вопроса В принципе такие вещи можно сделать с помощью UPDATE А в гриде можно использовать самонаписанную функцию , которая считает любые суммы По второму вопросу - если это для грида то тоже можно использовать либо функцию , либо просто в источнике контрола написать =(f1+f2+f3) Третий вопрос re = select f1 from test ( если возврашаеться не одно значение - такой фокус не пройдет нигде) - для чего это нужно - если для вставки или замены в таблицы -пользуйтесь UPDATE или INSERT Ну или select f1 from test INTO cursor/array/table а потом для курсора и таблицы - обращайтесь к полю F1 , для массива- к соответствующему элементу И если это все нужно для показа - то вполне вероятно что можно просто написать SELECT , все это отображающий как надо, и никаких Replace ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:27 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Сделал вот так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:42 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
to -=AlexiS=- update - обновляет полностью столбец, а мне надо только одну ячейку ... или может я ошибаюсь??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:44 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Искать ошибку в данных для расчета и условиях их отбора. Select Into Array работатет правильно, не надо на нее грешить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:45 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Update обновляет все, что подпадает под условие выборки. Если условие пустое - то всю колонку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 17:46 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Во первых - не стоит использовать в SELECT (да и принципе везде) recno() . Судя по SELECT - что-то у вас с БД "не то". Зашиваться на физический номер записи - "кошмар !!!" Во вторых Это не массив не "обнуляется". Вы посмотрите что вы делаете: вы в массив отбираете сумму - причем первая запись тоже в этой сумме участвует, потом записываете эту сумму в таблицу в первую запись , ясное дело что в следующий раз SELECT выдаст большее значение суммы "На пальцах" Recno C 1 - 1 2 - 1 3 - 1 1 проход select ..... дает 3 таблица приобретает вид Recno C 1 - 3 2 - 1 3 - 1 2 проход select ..... дает уже 4 ну и так далее ... to -=AlexiS=- update - обновляет полностью столбец, а мне надо только одну ячейку ... или может я ошибаюсь??? Ошибаетесь - если вы читали хелп - там eсть WHERE - так что измениться то что вы укажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 18:04 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
По первому вопросу. В реляционных БД таблицы должны быть однородны. Т.е., если в девяти строках цены ряда товаров - Код товара, Его цена, то в десятой не может быть сумма этих цен, это может быть только цена чего-то. Синтаксис команды совершенно неправилен. И еще. При работе с данными ни в коем случае нельзя использовать номер записи, а нужно пользоваться уникальным кодом. В моем примере это Код товара. По второму вопросу. Данная операция допустима для таблиц, но все же лучше не записывать сумму в определенный столбец, а вычислять ее динамически в тех местах, где это потребуется. Так значительно проще и гарантирует от ошибок типа: где-то изменилось слагаемое, а сумму забыли поменять. По третьему вопросу. Он вообще бессмысленен. Переменная хранит значение, т.е число, строку и т.д. Результатом выборки в общем является некоторое множество значений, т.е. несколько чисел, строк и т.д. Ясно, что выборку никак нельзя записать в переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 18:10 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Заменил recno(), получилось: Код: plaintext 1. 2. -=AlexiS=- Судя по SELECT - что-то у вас с БД "не то". Зашиваться на физический номер записи - "кошмар !!!" 1.Спаибо, первую запись я как то пропустил ... 2.Почему на физический ??? Имя файла 1001.dbf - _1001 alias, если не прав, то объясните, пожалуйста .... ValeryL Данная операция допустима для таблиц, но все же лучше не записывать сумму в определенный столбец, а вычислять ее динамически в тех местах, где это потребуется. Так значительно проще и гарантирует от ошибок типа: где-то изменилось слагаемое, а сумму забыли поменять. Задание именно такое : "перерасчет автоматический, при изменении любого поля." ... т.е. пользователь должен сразу после изменения любой ячейки видеть результат перерасчета в этой же таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 01:29 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Уж если делать, то так: LOCAL TestArr[1] SELECT; SUM(c); FROM Test; WHERE !INLIST(Test.a, 1,7) AND Test.a<8; INTO ARRAY testarr GO TOP IN 'Test' REPLACE Test.c WITH testarr[1] IN 'Test' Алиас _1001 заменен на Test и изменены условия отбора, но смысл соответствует Вашей задаче. Ошибка, скорее всего, вызвана тем, что при выполнении GO TOP не выбрана нужная область, т.е. SELECT _1001 GO TOP или GO TOP IN '_1001' Указание индекса в массиве желательно, хотя бы для того, чтобы программу было легче читать. А теперь скажите честно. Для чего все это нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 08:47 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
2.Почему на физический ??? Имя файла 1001.dbf - _1001 alias, если не прав, то объясните, пожалуйста .... Причем тут алиас - я говорил Зашиваться на физический номер записи А физический номер записи - это recno() То что вы "отвязались" от recno() - это хорошо , но все равно зашиваться на конкретные коды (я так понимаю это у вас автоинкримент) тоже не правильно. Что будет если у вас "исключаемые" коды поменяются или добавяться - придеться прогу переписывать Чем эти записи автор_1100.a!=1 AND _1100.a!=4 and _1100.a!=5 and _1100.a!=6 and _1100.a<89 отличаются от остальных ?. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 10:41 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
ValeriyI А теперь скажите честно. Для чего все это нужно? Была таблица в Excel (см. файл), а вот теперь надо на VFP. -=AlexiS=- Чем эти записи отличаются от остальных ?. Потому как такое условие расчета ... (см.аттач) to all посадил вот такой код на активацию страницы (использую Pageframe) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 16:49 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
аттач-то где ? Если вы редактируете в гриде - то самое простое для вас - посадить пересчет на AfterRowColChange. В принципе по "хорошему" надо бы проверять - менялось или нет значение , а пересчитывать только если были изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 17:42 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
прошу прошения..... вот файлик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 17:50 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Ну елы-палы ну у вас же сейчас не Excel - если это не разовая работа - делайте уже "по нормальному" Я конечно не увидел что там и как. Но вот что говориться "в лет". Заводим еще одно поле логическое PR - в записях , значения которых - не включаються в сумму ставим .F. - включаються- .T. Тогда условие where из Код: plaintext Код: plaintext Теперь при изменении кодов "исключаемых" из расчетов нам не надо менять программу. Ну и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 18:27 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
to -=AlexiS=- не подскажите ответ вот на такой вопрос автор посадил вот такой код на активацию страницы (использую Pageframe) Код: plaintext 1. все работает, считает, но проблема в том что надо "перерасчет автоматический, при изменении любого поля." прописал это же на событие нажатия клавиши Enter, как Вы понимаете, не работает :) т.е. приходится сначала курсором сменить ячейку,а уж потом нажатие Enter, пересчитывает значения. Подскажите как программно заменить это нажатие, т.е. как я понимаю внести изменения в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 19:26 |
|
||
|
помогите с суммированием
|
|||
|---|---|---|---|
|
#18+
Мягко выражаясь, но грубо говоря, дурью Вы маетесь Вам уже намекнули, что FoxPro это не Excel. То, что Вы хотите сделать, теоретически возможно, но сопряжено с кучей сопутствующих проблем. Поэтому обычно ТАК никто не делает. Сумма строк выводится не в том же самом Grid, а в отдельных TextBox "над" или "под" Grid. Или же вообще где-то в стороне. Этот отдельный TextBox напрямую заполняется рассчитанной суммой Код: plaintext 1. 2. При изменении значения в текущей строке пересчитывать всю сумму заново особого смысла нет. Достаточно из суммы вычесть значение ДО изменения и прибавить значение ПОСЛЕ изменения в этой текущей строке. Получим новую сумму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 00:09 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34418916&tid=1589631]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 377ms |

| 0 / 0 |
