Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

сортировка вычисляемых полей   Найти похожие ветки 

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

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

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?

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


 
sniknik ©   (2006-10-06 11:22) [1]

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


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

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


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

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


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

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


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

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


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

спасибо Stanislav!


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

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

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

Id
Name

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


 
ЮЮ ©   (2006-10-06 11:44) [8]

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


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

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


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

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


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

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

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

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


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

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

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

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


 
MsGuns ©   (2006-10-06 12:05) [13]

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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
2-1164186409
--= Eagle =--
2006-11-22 12:06
2006.12.10
заменить текст чекбокса в OpenDialog


2-1162976091
first_may
2006-11-08 11:54
2006.12.10
Директива $IFDEF


2-1164276706
Fostr
2006-11-23 13:11
2006.12.10
Syntax Error (Missing operator) in Query expression


2-1164304730
Jimmy
2006-11-23 20:58
2006.12.10
Компонент должен потерять фокус


15-1163586904
Чапаев
2006-11-15 13:35
2006.12.10
Что сделать с дохлым приводом CD-RW?