Вниз
Скачать: CL | DM;

Как добавить новое поле в заполненный датасет ?   Найти похожие ветки 

← →
Махно   (2002-10-31 08:26) [0]

Здравствуйте,
работаю с MSSQL2000 через ADO.
Выбираю некоторое количество записей, например, вот таким образом:

ADODataSet1.CommandText := "SELECT * FROM MYTABLE";
ADODataSet1.Open;


В результате получаю датасет.
Так вот вопрос, как мне добавить новой поле в этот же самый датасет ?


← →
Delirium ©   (2002-10-31 10:48) [1]

Никак


← →
Tundra   (2002-10-31 11:10) [2]

ADODataSet1.CommandText := "SELECT *,"" as NewField FROM MYTABLE";
ADODataSet1.Open;


← →
Махно   (2002-10-31 11:53) [3]

2 Tundra

Хм...
Спасибо. Это действительно решение.

Правда есть одно НО.
Как быть если

ADODataSet1.CommandText := "EXEC dbo.prMyStoredProc";

???




← →
Махно   (2002-10-31 13:27) [4]


Господа, неужели Delirium прав ?


← →
Андрей Прокофьев ©   (2002-10-31 13:34) [5]

Никак не добавить, не закрывая при этом.
SELECT *,"" as NewField FROM MYTABLE можно, но поле NewField будет ReadOnly



← →
ЮЮ ©   (2002-10-31 13:39) [6]

Тогда встречный вопрос? Для каких целей в выборке необходимо поле, не существующее в таблице?


← →
sniknik ©   (2002-10-31 13:41) [7]

Махно (31.10.02 13:27)
смотря что ты имееш ввиду (сначала я вопрос совсем по другому понял)
можно через временную таблицу выкрутится
ADODataSet1.CommandText :=
"CREATE TABLE #TempTable (....) "+
"INSERT INTO #TempTable EXEC dbo.prMyStoredProc "+
"SELECT *,"""" as NewField FROM #TempTable";



← →
Delirium ©   (2002-10-31 14:59) [8]

> sniknik ©

Существует ещё один способ помещения выборки из процедуры в таблицу. Первое что надо сделать - указать в системной таблице master.dbo.sysservers для локального сервера srvstatus=1440, тем самым ядро MSSQL будет обращаться к локальному серверу как к linked. Значение достаточно внести один раз, само оно не измениться. После этого становятся возможными такие запросы:
select * from OpenQuery(MyServer, "exec MyProc")
и разумеется
select * into NewTable from OpenQuery(MyServer, "exec MyProc")
Преимущество этого подхода - нет необходимости заранее знать структуру получаемых данных.


← →
sniknik ©   (2002-10-31 16:44) [9]

правильней наверно будет не править таблицу а запустить
EXEC sp_addlinkedserver "MyServer", "SQL Server"
и srvstatus у меня получается = 1249 почемуто, но у меня предубеждение против линков, зря наверное, т.к. преимущества очевидны.


← →
Delirium ©   (2002-10-31 18:17) [10]

Всё нижеследущее IMHO и неточная, субъективная информация.

Я столкнулся с этой задачей довольно давно, с тех пор много экспериментировал, результаты и самостоятельные умозаключения таковы: если создать linked server сам к себе, то при обращении к функции OpenQuery MSSQL задействует свои сетевые службы, тем самым существенно (37 сек. против 25) затормаживает большие выборки. Никаким иным способом, кроме как исправление статуса "руками", обойти эту неприятность мне не удалось.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
3-69127
Shatun
2002-11-01 09:40
2002.11.21
Помогите с подставными полями d DBGrid.


6-69461
NickS
2002-09-25 13:06
2002.11.21
Игравой зал


4-69634
relict
2002-10-11 14:07
2002.11.21
копирование файла


1-69311
iNew
2002-11-12 16:34
2002.11.21
Кто пользовался компонентой AsyncPro отзовитесь.


7-69586
USTAS
2002-09-19 10:09
2002.11.21
Как убрать Popup меню с десктопа?




   Наверх