Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема как получить таблицу (число прочтений - 3314 )
kye
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 36
Зарегистрирован: 22. Мая 2006
Пол: Мужской
как получить таблицу
20. Ноября 2006 :: 12:41
Печать  
если в запросе не только select, то результирующая таблица не выводится. Возможно ли ее получить?
Например:
Код
Выбрать все
ТекстЗапроса = "
|DROP TABLE #MyTable
|
|SELECT * FROM $Справочник.Фирмы
|";

тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
тз.ВыбратьСтроку();
 


В этом примере возвращается пустая таблица. Возможно ли получить результат не выполняя два отдельных запроса?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #1 - 20. Ноября 2006 :: 13:45
Печать  
ODBCRecordset может получить только первый результат отправленный сервером. Если текст запроса содержит несколько инструкций, то MSSQL пытается выполнить их все, и отправить результаты на клиента.
Результаты бывают только двух типов: rowcount и recordset.
Различные инструкции возвращают разные результаты:
select ... - recordset;
DML (insert, update, delete) - rowcount;
DDL (create..., drop ...) - нет результата;
различные специальные инструкции MSSQL могут формировать результат различного типа, об этом нужно читать в BOL, например fetch может формировать recordset, а может вообще не формировать результата (select в некоторых случаях (в переменные или into) тоже может не формировать результата).
Существует возможность отменить выдачу результатов типа rowcount специальной инструкцией серверу: set nocount on

В данном конкретном примере мы должны получить результат инструкции select, т.к DROP TABLE это DDL инструкция, которая результата не формирует.
  
Наверх
ICQ  
IP записан
 
kye
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 36
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #2 - 20. Ноября 2006 :: 14:14
Печать  
Понятно, сначала select, а потом drop
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #3 - 20. Ноября 2006 :: 14:22
Печать  
Дополнительные разъяснения по тому, как надо понимать фразу:
Цитата:
Если текст запроса содержит несколько инструкций, то MSSQL пытается выполнить их все, и отправить результаты на клиента.

В процессе выполнения батча (текста запроса с несколькими инструкциями), MSSQL формирует результаты, клиент их выкачивает, эти два процесса естетственно работают асинхронно. ODBC возвращает управление как только начнет получать данные первого результата. Т.к. ODBCRecordset "выкачивает" только первый результат, а в процессе выполнения могут появиться и другие, выполнение батча может быть остановлено сервером, т.к. кончится место в буфере сетевого протокола используемого на данном подключении.

Этим например объясняется эффект, когда батч выполняется не полностью, если он содержит множество инструкций insert или insert в цикле, а отправка результатов типа rowcount не отменена.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #4 - 20. Ноября 2006 :: 14:41
Печать  
kye писал(а) 20. Ноября 2006 :: 14:14:
Понятно, сначала select, а потом drop

Бедааааа..  Улыбка
Люди, объясните человеку, я видимо слабоват..
  
Наверх
ICQ  
IP записан
 
kye
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 36
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #5 - 20. Ноября 2006 :: 14:47
Печать  
Видимо я еще слабоват... Печаль Если можно получить результат, то покажи как...
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #6 - 20. Ноября 2006 :: 14:53
Печать  
Прочитай то что написано в первом моем посте во втором абзаце, это ответ на твой вопрос.
В этом примере, ты получаешь свой результат, ибо ты его видишь.
Цитата:
В этом примере возвращается пустая таблица.

Значит таблица всетаки ВОЗВРАЩАЕТСЯ! Если бы результата небыло или он был бы rowcount, была бы ошибка времени выполнения, т.к. ТЗ не вернулась бы, а вернулось бы Число, у которого нет метода ВыбратьСтроку.
  
Наверх
ICQ  
IP записан
 
kye
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 36
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: как получить таблицу
Ответ #7 - 20. Ноября 2006 :: 15:03
Печать  
Все разобрался, спасибо
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать