ADO
От: Мойша  
Дата: 25.02.03 13:35
Оценка:
ADO не позволяет мне создавать SQL-запросы такого вида

CREATE TABLE #t(...)
INSERT INTO #t ....
SELECT * FROM #t

Ругается такими словами
'Multiple-step OLE DB operation generated errors. Check OLE DB status value, if available. No work was done.'
При этом команда на выполнение на SQL-сервер уходит.

Потом выдает такой Exception
'Query1: CommandText does not return a record set'

Возможно ли обмануть коварный ADO? Как? Возможно есть патчи или более новые версии, которым чужда такая ограниченность.
Re: ADO
От: mogadanez Чехия  
Дата: 25.02.03 13:55
Оценка:
Здравствуйте, Мойша, Вы писали:

М>ADO не позволяет мне создавать SQL-запросы такого вида


М>CREATE TABLE #t(...)

М>INSERT INTO #t ....
М>SELECT * FROM #t

М>Ругается такими словами

М>'Multiple-step OLE DB operation generated errors. Check OLE DB status value, if available. No work was done.'
М>При этом команда на выполнение на SQL-сервер уходит.

М>Потом выдает такой Exception

М>'Query1: CommandText does not return a record set'

М>Возможно ли обмануть коварный ADO? Как? Возможно есть патчи или более новые версии, которым чужда такая ограниченность.


выполняй его не Execute, а ExecuteNonQuery
... << RSDN@Home 1.0 beta 6a >>
Re[2]: ADO
От: Аноним  
Дата: 25.02.03 14:06
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>выполняй его не Execute, а ExecuteNonQuery


Уточню. Компонента, которую я не могу заставить работать — это TADOquery. Метода ExecuteNonQuery я в ней почему-то не нашел... А нужны мне как раз результаты того, что селектится, так что судя по названию NonQuery вряд ли подойдет .
Re: ADO
От: Аноним  
Дата: 25.02.03 14:17
Оценка:
Здравствуйте, Мойша, Вы писали:

М>ADO не позволяет мне создавать SQL-запросы такого вида


М>CREATE TABLE #t(...)

М>INSERT INTO #t ....
М>SELECT * FROM #t
М>Возможно ли обмануть коварный ADO? Как? Возможно есть патчи или более новые версии, которым чужда такая ограниченность.
а ты 3-мя разными запросами выполни:
CREATE и INSERT по коннекшену (DDL и DML в разных batch'ах)
SELECT по query
Re[2]: ADO
От: Аноним  
Дата: 25.02.03 14:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а ты 3-мя разными запросами выполни:

А>CREATE и INSERT по коннекшену (DDL и DML в разных batch'ах)
А>SELECT по query

Уточню задачу. Таблица #t является временной, т.е. ее видно только в пределах запроса, и служит для упрощения запроса. Можно было написать один пятиэтажный запрос, выбирающий из нескольких таблиц данные в одну сводную, но не хочется. Хочется создать временную, заполнить ее данными и получить RecordSet. BDE позволял это сделать, не задавая никаких вопросов. Я хочу знать с чем я столкнулся, т.е. это принципиальное ограничение ADO или есть какой-то неочевидный способ.
Re[3]: ADO
От: Аноним  
Дата: 25.02.03 14:42
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Уточню задачу. Таблица #t является временной, т.е. ее видно только в пределах запроса, и служит для упрощения запроса.


а какой SQL-сервер, если не секрет, уж не MS ли ?
там временные таблицы создаются на соннекшн, а не на запрос.
Re[3]: ADO
От: Merle Австрия http://rsdn.ru
Дата: 25.02.03 14:42
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Уточню задачу. Таблица #t является временной, т.е. ее видно только в пределах запроса, и служит для упрощения запроса.

А>Я хочу знать с чем я столкнулся, т.е. это принципиальное ограничение ADO или есть какой-то неочевидный способ.

Во первых, не плохобы знать все-таки что за сервер БД.
Во вторых, временная таблица не в пределах запроса, а в пределах коннекшена, если ее в конце батча не грохнуть конечно.
В третьих ошибка опять же скорее всего не в ADO, а в синтаксисе SQL.
В ADO не должно быть никаких ограничений и неочевидных способов в данном случае, все должно работать, если без ошибок написано конечно...
Мы уже победили, просто это еще не так заметно...
Re[4]: ADO
От: Merle Австрия http://rsdn.ru
Дата: 25.02.03 14:50
Оценка:
Здравствуйте, Merle, Вы писали:



M>Во первых, не плохобы знать все-таки что за сервер БД.

И если это MSSQL, то запихни в хранимку все издевательства над временными таблицами и не мучайся..
Мы уже победили, просто это еще не так заметно...
Re: ADO
От: andik  
Дата: 25.02.03 15:36
Оценка:
Здравствуйте, Мойша, Вы писали:

еххх, если все таки это MSSQL Server, то

SET NOCOUNT ON

CREATE TABLE #t(...) 
INSERT INTO #t .... 
SELECT * FROM #t 

DELETE TABLE #t

SET NOCOUNT OFF


пора это как-то в факи заносить
Re[2]: ADO
От: Merle Австрия http://rsdn.ru
Дата: 25.02.03 15:43
Оценка:
Здравствуйте, andik, Вы писали:



A>DELETE TABLE #t

Наверное все-таки DROP TABLE...

A>пора это как-то в факи заносить

Хм... Только проверить надо-бы перед этим, а то не красиво получится...
Мы уже победили, просто это еще не так заметно...
Re[3]: ADO
От: andik  
Дата: 25.02.03 16:05
Оценка:
Здравствуйте, Merle, Вы писали:
A>>DELETE TABLE #t
M>Наверное все-таки DROP TABLE...
конечно DROP


A>>пора это как-то в факи заносить

M>Хм... Только проверить надо-бы перед этим, а то не красиво получится...
Re[4]: ADO
От: Аноним  
Дата: 26.02.03 05:37
Оценка:
Здравствуйте, andik.

Спасибо за дельный совет, заработало.
Однозначно такие вещи надо в факи добавлять.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.