Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Внизсортировка вычисляемых полей Найти похожие ветки
← →
__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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c