Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сортировка вычисляемых полей [D7, Access]


__dmitry ©   (2006-10-06 11:12:00) 

Суть проблемы. Есть таблица, например

ID
Name
Count
Price

мне нужно добавить в нее поле Amount =  Count * Price

И так в Access таблице есть первые 4е поля и  в ADOTable их соответственно добавил. Создал так же новый TField со свойством fkCalculated и в методе OnCalcFields делаю так

TableSampleAmount.Value = TableSampleCount.Value * TableSamplePrice.Value;

И так в гриде все нормально отображается. Но вот теперь мне нужно сделать сортировку по полю Amount. И тут проблема:

 TCustomADODataSet(dbGrid.DataSource.DataSet).Sort := 'Amount';

приводит к ошибке поскольку реально такого поля в базе не существует.

Как решается такая проблема? Есть ли возможность сортировать непосредственно в гриде или есть путь как это делается через DataSet? Возможно в Access можно реализовать вычисляемое поле которое прозрачно использовалось бы в delphi?

Очень надесь на вашу помошь!


__dmitry   (2006-10-06 14:59:00) [1]

спасибо всем!!!

все работает :)


MsGuns   (2006-10-06 12:05:00) [2]

>SELECT Name, Price*Count as Amount FROM Таблица

Не используй при именовании объектов БД (таблиц, полей, индексов и т.д.) зарезервированныхслов
А если уже "наваял", то
SELECT Name, Price*[Count] as Amount FROM Таблица


__dmitry   (2006-10-06 12:02:00) [3]

запрос
SELECT Name, (Price*Count) as Amount FROM Таблица
или такой
SELECT Name, Price*Count as Amount FROM Таблица

не проходит. Пишет ошибка синтаксиса. А в Access конструктор запросов не помог. :(

Что в таком запросе не так?


MsGuns   (2006-10-06 12:02:00) [4]

>Stanislav ©   (06.10.06 11:25) [3]
>Используй ADOQUERY,
>SELECT ..., price*count as summa
>form ...
> order by summa

не нужен.
"Стандартная" сортировка в таких случаях-по ФИО, поэтому либо сортируй в запросе по ФИО (для первичного отображения при открытии формы), либо вообще  не надо заморачивать "сервер".

Сортировка в любом порядке (в т.ч. по произвольном у набору полей) в ADO легко реализуется с помощью метода Sort ADODataSet`a без явного переоткрытия датасета.


ЮЮ   (2006-10-06 11:53:00) [5]

Select
 t.*, p.Name
FROM
 ТаблицаСПолемСсылкоойНаProducts t
 [LEFT] JOIN Products p ON t.ProductId = p.Id


__dmitry   (2006-10-06 11:47:00) [6]

ЮЮ ©   (06.10.06 11:44) [8]
не буду


ЮЮ   (2006-10-06 11:44:00) [7]

А в гриде редактировать это поле не будешь?
Если будешь, то смотри в сторону Lookup-полей


__dmitry   (2006-10-06 11:43:00) [8]

А если в таблице есть

ProductId который связан с таблицей products:

Id
Name

как мне построить запрос который бы вместо ProductId содержал бы его Name?


__dmitry   (2006-10-06 11:27:00) [9]

спасибо Stanislav!


Stanislav   (2006-10-06 11:26:00) [10]

Stanislav ©   (06.10.06 11:25) [3]  почти помог :-)
В акцесс есть конструктор.


Stanislav   (2006-10-06 11:25:00) [11]

Используй ADOQUERY,
SELECT ..., price*count as summa
form ...
order by summa
В принципе она будет и в Sort работать, только результаты вычислений после сохранения записи будешь видеть.


__dmitry   (2006-10-06 11:25:00) [12]

помогите мне составить такой запрос. Я в SQL не силен :(


Savek   (2006-10-06 11:23:00) [13]

Как вариант - плюнуть на ADOTable и использовать ADOQuery!


sniknik   (2006-10-06 11:22:00) [14]

использованием нормальных компонент, формированием в запросе того поля что нуждается в последующей сортировке. чтобы оно/его данные реально существовали в сортируемом рекордсете, а не были "миражом" который формируется только для/и того что отображается/показывается в гриде.


Наверх

Титульная страница Поиск, карта сайта Написать письмо