Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.21;
Скачать: 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 вся ветка

Текущий архив: 2002.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-69619
progger
2002-10-10 12:19
2002.11.21
Помогите с хуками...


1-69376
Ученик
2002-11-10 12:23
2002.11.21
31 число в какой декаде


1-69257
123000
2002-11-11 18:12
2002.11.21
..::PWL::.. и этим все сказано


14-69487
blackweber
2002-11-05 00:50
2002.11.21
GUID


1-69230
velk
2002-11-11 15:17
2002.11.21
Подскажите пожалуйста проблема с ошибкой EIntfCastError...