![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сортировка вычисляемых полей [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]использованием нормальных компонент, формированием в запросе того поля что нуждается в последующей сортировке. чтобы оно/его данные реально существовали в сортируемом рекордсете, а не были "миражом" который формируется только для/и того что отображается/показывается в гриде.