![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пощитать сумму. [D7, XP]
Bogdan1024 © (2006-02-22 02:22:00)В зависимости от того какая запись выбрана в DBGrid1 нужно пощитать сумму заказов из другой таблицы, которая будет отображаться в метке или в TDBEdit. Я пытаюсь использовать TADOQuery. В справке написано что нужно использовать связку TADOQuery+TDataSource+TADOTable. Всё вроде слинковал, добавил ещё TDBGrid чтобі можно было видеть изменения; запрос посылается, но ничего не возвращается. Почему?
ADOQuery1.SQL.Add('SELECT sum(Orders.[Order Amount]) FROM Orders WHERE Orders.[Employee ID] = ' + inttostr(p^));
msguns (2006-02-22 17:46:00) [1]>Bogdan1024 © (22.02.06 13:49) [5]
>потому что эта таблица не присутствует в других датасорсах
"Датасорсы" предназначены в первую очередь для визуализации датасетов или их фрагметов (полей, записей), полученных, в свою очередь объектами доступа к БД. Такими, как TADOQuery, TADODataSet, TADOTable (сие чудище обло, озороно, стозевно и лайяй). Жмем на квадратике с датасорсом F1 и внимательно читаем.
Для того же, чтобы обратиться непосредственно к самому датасету, ничего, окромя него не нужно. Почитай о "дедушке" всех датасетов TDataSet (в частности об упомянутых в [4] свойствах и "мигом прояснится на доске" (с)
Мухи, котлеты, волосы поварихи в одной тарелке..
Ассорти, короче ;)
evvcom (2006-02-22 14:09:00) [2]
> Я пытался вернуть нужную таблицу и соответствующую записям
> таблицы сумму в один датасорс, но он выдаёт "неопознанную
> ошибку".
Повторю msguns © (22.02.06 09:40) [4]:
> Лес темный.
И мухи, и котлеты все в одно слепил и выплюнул. А вы, господа, тут разбирайте состав моего произведения.
Bogdan1024 (2006-02-22 13:49:00) [3]с указателем и с самими данными одинаково?
Спасибо, теперь понял разницу.
Почему нельзя "вытащить" "пощщитанный" агрегат, обратвшись непосредственно к датасету через Fields/FieldByName ?
потому что эта таблица не присутствует в других датасорсах.
Я пытался вернуть нужную таблицу и соответствующую записям таблицы сумму в один датасорс, но он выдаёт "неопознанную ошибку".
msguns (2006-02-22 09:40:00) [4]Лес темный.
Надо по каждой строке отображаемого датасета "пощщитать" что-то в других таблицах ? Для этого обычно используют вычисляемые поля в запросе.
Если же надо актуальное значение, которое получается отдельным запросом "по требованию", то зачем возвращаемую этим запросом единственную запись пихать в какие-то датасорсы и тем более DB-aware контролы ?
Почему нельзя "вытащить" "пощщитанный" агрегат, обратвшись непосредственно к датасету через Fields/FieldByName ?
evvcom (2006-02-22 08:53:00) [5]
> Памяти ведь одинаково выделяется
Как же одинаково? В 1 случае 4 байта на переменную-указатель + 4 байта на данные Integer, во 2-ом только 4 байта под данные.
> и программа обращается с ними одинаково...
с указателем и с самими данными одинаково? Книжку б какую почитал что ли?
Bogdan1024 (2006-02-22 03:59:00) [6]Спасибо, уже разобрался - я случайно использовал ExecSQL вместо Open.
А какая разница что использовать - указатель на переменную или саму переменную? Памяти ведь одинаково выделяется и программа обращается с ними одинаково...
ЮЮ (2006-02-22 03:29:00) [7]Где находится этот код, как формируется p^. Почему не используется просто целая переменная, а указатель на неё?
qEmployeeOrderAmountSum.SQL.Text :=
'SELECT sum([Order Amount]) FROM Orders WHERE [Employee ID] = :EmployeeId';
// можно забить в Design-е
в qEmployes.AfterScroll:
qEmployeeOrderAmountSum.Close;
qEmployeeOrderAmountSum.Parameters[0].Value :=
qEmployes.Fields[0].Value;
qEmployeeOrderAmountSum.Open;