Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1164213822
Сэм
2006-11-22 19:43
2006.12.10
DDR 1024Mb PC 3200 SAMSUNG


6-1152805949
Георгий А.
2006-07-13 19:52
2006.12.10
Как заставить перегрузиться сетевую карту


3-1159964469
MixAnOL
2006-10-04 16:21
2006.12.10
Запись в таблицу и поиск


15-1164140145
Jolik
2006-11-21 23:15
2006.12.10
Посоветуйте книгу по Delphi 2006...


3-1160123972
Tornado
2006-10-06 12:39
2006.12.10
Подключение к dbf-файлам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский