![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужно добавить в DBGrid поле не содержащееся в Recordset [D7, MSSQL]
Йурий © (2003-09-16 12:12:00)
Такая проблема, мне нужно добавить поле в DBGrid не связанное с конкретным полем reordset, вычесляемое не подойдет...
Скажем, после открытия ADOQuery я вычисляю значения для этого поля один раз и они(значения) существуют до следующего открытия, а не как в вычисляемом поле вычесляются при каждой отрисовке данных...
На это поле нужно накладывать фильтры, сортировать на клиенте, с вычисляемыми это не проходит...
Спасибо!
Йурий (2003-09-16 14:54:00) [1]
А где взять?
Nikolay M. (2003-09-16 14:49:00) [2]
Вообще - библиотека RxLib, а конкретно для Д7 - в библиотеке JEDI, например.
Йурий (2003-09-16 14:47:00) [3]
А где взять RxMemoryData?
Nikolay M. (2003-09-16 14:11:00) [4]
> икать по нему
:))) LOL :)
По сабжу:
ClientDataSet, RxMemoryData/MemoryTable?
Йурий (2003-09-16 14:04:00) [5]
сортировать еще надо, икать по нему...
Nikolay M. (2003-09-16 13:58:00) [6]
Проблема только в том, чтобы фильтровать некоторое трудновычислямое поле не клиенте? Ну так а OnFilterRecord - не выход?
Йурий (2003-09-16 13:47:00) [7]
Временная таблица конечно выход, но как-бы было здорово создавать дополнит. поля на клиенте... :)
Hooch (2003-09-16 13:43:00) [8]
если смущает явное создание временной таблицы, можно "завуалировать"
adoDataSet.Commandtext =
"DECLARE TABLE @Data(....) "+
"INSERT INTO @Data ... " +
"SELECT * FROM @Data..."
:-)
Sandman25 (2003-09-16 13:41:00) [9]
[19] Йурий (16.09.03 13:34)
Так если у Вас и так временная таблица, так в чем проблема. Пускай себе записывает обратно в нее? Кстати, с чего Вы взяли, что сервер нужно беречь? Обычно его используют по максимуму, чтобы не нагружать клиента и сеть. Не на каждом рабочем месте стоит PentiumIV :)
Йурий (2003-09-16 13:36:00) [10]
Узнать бы еще как этот recordset создавать? :)
Йурий (2003-09-16 13:34:00) [11]
Он, по сути, так и работает, поскольку запрос сложный и все в результате берется из временной таблицы... Но он же все равно собирается во временную таблицу сохранить, а держать ее в памяти неохото...
Sandman25 (2003-09-16 13:33:00) [12]
[17] ZrenBy © (16.09.03 13:27)
Точно! Можно создавать какие угодно поля и не беспокоиться об их сохранении на сервер...
ZrenBy (2003-09-16 13:27:00) [13]
Все элементарно делается классическим методом -
использованием временных таблиц
if(object_id("tempdb..#temp_M") is not null)drop table #temp_M
create table #temp_M (
M_ID int,
. . .
Z_1 smallint,
Z_2 smallint
)
insert into #temp_M
select
M_ID,
. . .
Z_1 = cast(0 as smallint),
Z_2 = cast(0 as smallint)
from . . .
left outer join
. . .
where
. . .
order by
. . .
select * from #temp_M
Йурий (2003-09-16 13:24:00) [14]
Во! А ктонить структуру _recordset знает? Может создавать _recordset на клиенте и присваивать ADOQuery?
Йурий (2003-09-16 13:21:00) [15]
В том-то и проблема, если на SQL вычислять сильногрузит сервак, поскольку запросец нехилый... Похоже решения к сож. пока нет... Эх-хе-хе
Sandman25 (2003-09-16 13:19:00) [16]
Йурий
А возможно ли вычислить значение этого поля в SQL? В чем смысл поля?
Sandman25 (2003-09-16 13:17:00) [17]
[9] Nikolay M. © (16.09.03 13:10)
Массив в памяти ему не подойдет. Ему же фильтровать и сортировать по этому полю надо.
Йурий (2003-09-16 13:17:00) [18]
Nikolay M. © Не, другое(а что кроме вычисляемых) все перепробывал, ничо не подходит поскольку надо ставить фильтры, сортировать на клиенте по этому полю...
Sandman25 (2003-09-16 13:12:00) [19]
>И еще, при изметнении, он попытается отправить все это на сервер... Т.е. сохранить...
Естественно. Получается, что надо либо использовать вычисляемое поле, либо CashedUpdates := True (если такое есть у ADOQuery).
А возможно ли вычислить значение этого поля в SQL? В чем смысл поля?
Йурий (2003-09-16 13:11:00) [20]
Вот код...
ADOQuery1.First;
for i:=1 to ADOQuery1.RecordCount do
begin
DataSource1.Edit;
ADOQuery1new_field.AsInteger:=i;
ADOQuery1.Next;
end;
Он пытается сохранить все это на сервак, а поле-то виртуальное...