Страница: 1 |
Страница: 1 |
Вопрос: сумма в таблице mdb
Добавлено: 05.12.05 15:14
Автор вопроса: 050 | ICQ: 346913660
Подскажите плз, как лучше выполнить следующую задачу.
есть на форме ADO контрол, с ним связан датагрид, нужно посчитать сумму значений столбца, сравнивая с определенными критериями. Сумму отобразить на форме и
записать в результирующую таблицу.
Как лучше сделать:
1. Перебирать значения adodc контрола в цикле
считать сумму и потом открывать базу и записывать значение.
2. Или сразу открывать базу, выполнять sql select Sum()
писать в динамический рекордсет, оттуда переменной и делать update базы..
и если возможность в sql делать что-то вроде:
If Format(Adodc1.Recordset.Fields("datecash0").Value, "mm.dd.yy") >= Don1 And Format(Adodc1.Recordset.Fields("datecash1").Value, "mm.dd.yy") <= don Then
If Adodc1.Recordset.Fields("type").Value = -1 Then
SUM = SUM + Adodc1.Recordset.Fields("sumcash").Value
ac_deb = ac_deb + 1
Else
SUM1 = SUM1 + Adodc1.Recordset.Fields("sumcash").Value
ac_cre = ac_cre + 1
End If
End If
..или придется делать две sql инструкции..
sum(sumcash) where datecash0 >= .... and type = - 1
sum(sumcash) where datecash0 >= .... and type = 0
??
спасибо
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 05.12.05 16:58
Вот это код...
Взять дату, перевести в строку и потом сравнивать с датой... Это имея изначально две даты...
SELECT type, SUM(sumcash) FROM Table1 WHERE datecash0 >= #2005-12-01# AND datecash1 <= #2005-12-31# GROUP BY type
Номер ответа: 2
Автор ответа:
050
ICQ: 346913660
Вопросов: 2
Ответов: 9
Профиль | | #2
Добавлено: 08.12.05 10:16
SELECT type, SUM(sumcash) FROM Table1 WHERE datecash0 >= #2005-12-01# AND datecash1 <= #2005-12-31# GROUP BY type
Gserg....
спасибо..код подходит..
только как из полченного рекордсета вытянуть нужные значения..
У рекордсета есть метод field, но там можно получить значения только из первой строки..
Есть метод getstring где можно получить все строки, но как выбрать нужные значения и отследить нулевые значения??
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 08.12.05 13:18
050, скажи честно, ты вообще читал хоть какую-то документацию?
Например, документацию по методу .MoveNext.
Запрос возвращает готовый результат. Не нужно ничего отслеживать.
Номер ответа: 4
Автор ответа:
050
ICQ: 346913660
Вопросов: 2
Ответов: 9
Профиль | | #4
Добавлено: 08.12.05 13:49
GSerg...
прошу объяснить..
что я делаю:
формирую новый динамический рекордсет для вычислений:
Set cn = New ADODB.Connection
далее выполняю
sSQL = "SELECT SUM(sumcash) FROM firma WHERE datecash0 >= #" & Format(don1, "dd\/mm\/YY" & "#" & "and datecash1 <= #" & Format(don, "dd\/mm\/YY" & "#" & " and id_agent = " & lagent_num.Text & " GROUP BY type"
результатом заполняю рекордсет
Set rs = cn.Execute(s1SQL)
В итоге:
в рекордсете две строки, сгруппированные по type
ХХХХ - соответствующая type = -1
ХХХХ - type = 0
В итоге может быть и одна строка если, например, в таблице firm нет строк, удовлетворяющих директиве where..
а мне нужно полученные суммы записать в переменные чтобы отобразить их на фороме и далее сделать апдейт другой таблицы с результирующими значениями..
Про .movenext это надо в цикле перебирать пока не .EOF?
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 08.12.05 16:22
Да.