![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавить поля в DataSet после выборки данных [D7]
Shaman_ © (2006-09-15 16:10:00)Делаю выборку данных
в полученому DataSet нужно локально добавить еще несколько полей. Добавляю их через TFiedDefs.add... и TFieldDefs.CreateField... Перед добавлением полей, набор данных приходится переводить в неактивное состояние. Как после добавления полей можно снова вернуть его в активное состояние? Простое Active := true будет повторно запрашивать данные из базы
Shaman_ (2006-09-15 18:20:00) [1]MsGuns ©
Все вроде работет. Просто неверно указывал тип данных. Посмотрел сейчас допустимые типы CAST функции для MySQL и все встало на свои места
Спасибо за помощь!
Shaman_ (2006-09-15 18:02:00) [2]MsGuns © (15.09.06 17:50) [4]
Cуть то понятна. Зачем же так разжевывать :) Не яснен был (и есть) общий синтаксис. Наверно стоит указать что реализую это дело на MySQL. Как не извращаюсь, СУБД не понимает такого синтаксиса
MsGuns (2006-09-15 17:50:00) [3]>Shaman_ © (15.09.06 17:43) [3]
>немного не понял .
Тогда так: дополнительные поля создаются в датасете для отображения некоторых данных, непосредственно отсутствующих в таблицах БД. Например, расчетные. Вы пытаетесь создать и заполнить их "клиентским" способом, в результате чего при переоткрытии НД надо снова повторять сканирование и расчет всего НД. То же самое в 99% случаях можно "заставить" сделать сервер, должным образом модифицировав запрос к базе данных.
>Причем здесь функция CAST - преобразование типов?
Если не использовать это слово, то "сервер" интерпретирует тип полей, заданных константами, как ему заблагорассудится. Чтобы не было неожиданностей, надо явно указать тип данных каждого дополнительно создаваемого в запросе столбца. В T-SQL, Local SQL и некоторых других, для этих целей вполне подходит CAST
Shaman_ (2006-09-15 17:43:00) [4]Guns © (15.09.06 16:50) [2]
немного не понял . Причем здесь функция CAST - преобразование типов?
MsGuns (2006-09-15 16:50:00) [5]"Лишние" поля лучше создавать в самом запросе:
Select *, cast(1 as decimal(18,4)) as Quant,
cast('' as char(40)) as FIO,
.....
from table
Reindeer Moss Eater (2006-09-15 16:18:00) [6]Ну а зачем открытвать преждевременно, предварительно не добавив нужные поля?