Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) прямой запрос к бинарным данным (число прочтений - 5305 )
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
прямой запрос к бинарным данным
13. Января 2014 :: 16:56
Печать  
Пытаюсь запросом получить бинарные данные и этот запрос роняет 1С.
Если убрать из выборки бинарное поле, тогда все отлично работает.
Можно что нибудь сделать? Или только через ADO делать?
 
[code]Запрос = СоздатьОбъект("ODBCRecordset");

ТекстЗапроса = "
                 |
                 |declare @code char(14)
                 |
                 |set @code = ?
                 |
                 |exec dbo.ХранимаяПроцедура @code
                 |";
     
Запрос.Подготовить(ТекстЗапроса);
     
Запрос.ДобПараметр(1, 15, 14, 0);
Запрос.УстПараметр(1, "000123456");
     
Результат = Запрос.ВыполнитьИнструкцию();[/code]
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: прямой запрос к бинарным данным
Ответ #1 - 14. Января 2014 :: 05:20
Печать  
дык а в 1с как ты бинарное поле увидеть хочешь ?...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #2 - 14. Января 2014 :: 06:16
Печать  
хранимка выборку возвращает?
и какой тип бинарных данных интересует? image или binary
  

1&&2&&3
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #3 - 14. Января 2014 :: 07:39
Печать  
Eprst писал(а) 14. Января 2014 :: 05:20:
дык а в 1с как ты бинарное поле увидеть хочешь ?...


ага)) его сохраняю в файл и потом с ним работаю
на форуме нашел, что в наборе данных не получается вроде бинарник получить, только скалярный.

trad писал(а) 14. Января 2014 :: 06:16:
хранимка выборку возвращает?
и какой тип бинарных данных интересует? image или binary


image и varbinary ставил.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #4 - 14. Января 2014 :: 08:38
Печать  
В общем, если в выборке есть поле типа image, то он должен нормально преобразовываться в объект BinaryData. Это делается внутри 1c++ при работе метода ВыполнитьИнструкцию или ВыполнитьСкалярный. Это проверено и применяется.
Если ХП image выдает через output, то действовать надо через добавление output-параметра - ДобПараметр(2,19) Это не проверял.
  

1&&2&&3
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #5 - 14. Января 2014 :: 09:07
Печать  
trad писал(а) 14. Января 2014 :: 08:38:
В общем, если в выборке есть поле типа image, то он должен нормально преобразовываться в объект BinaryData. Это делается внутри 1c++ при работе метода ВыполнитьИнструкцию или ВыполнитьСкалярный. Это проверено и применяется.
Если ХП image выдает через output, то действовать надо через добавление output-параметра - ДобПараметр(2,19) Это не проверял.


да, сейчас пытаюсь сделать так, пока, что то файл пустым получается, видимо что то не так делаю.
а как набором можно получать бинарные данные? у меня в выборке несколько записей получается.
главное, что скалярный должен работать, уже хорошо, но не вариант, хотелось бы все выборки получать, а скалярным приходиться ограничение в хранимой процедуре ставить.

"действовать надо через добавление output-параметра - ДобПараметр(2,19)" - а потом ПолучитьЗначение(<NamePosCol>)
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #6 - 14. Января 2014 :: 09:38
Печать  
нет, ПолучПараметр
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #7 - 14. Января 2014 :: 09:40
Печать  
я так и не понял, что ХП у тебя возвращает. Рекордсет или out-параметр?
  

1&&2&&3
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #8 - 14. Января 2014 :: 10:31
Печать  
изначально делал как рекордсет, но у меня эска вылетала без слов, сделал скалярный через аутпут, но теперь на этом застрял "State 42000. The text, ntext, and image data types are invalid for local variables."
  
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #9 - 14. Января 2014 :: 10:32
Печать  
мне нужен рекордсет получить, несколько строк, а не одну запись
  
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #10 - 14. Января 2014 :: 10:33
Печать  
сейчас в ХП поставил ВЫБРАТЬ ТОП 1, но это не дело, как потом остальное получить
  
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #11 - 14. Января 2014 :: 11:02
Печать  
поспешил, не ту ошибку написал. простой запрос
CREATE PROCEDURE [dbo].[GetData]
@code char(14), 
@objname char(30),
@databin image output
AS
BEGIN
     SET NOCOUNT ON
     SELECT TOP 1 @databin = data
     FROM [database].[dbo].datagoods goods
       WHERE goods.code = @code
END
-- выдает ошибку при SELECT TOP 1 @databin = data
-- Error 409: The assignment operation cannot take a image data type as an argument.
     ТекстЗапроса = "
                             |
                             |declare @code char(14)
                             |declare @objname char(30)
                             |declare @databin image
                             |
                             |set @code = ?
                             |set @objname = ?
                             |
                             |exec dbo.GetData @code, @objname, @databin output
                             |";

     Запрос.Подготовить(ТекстЗапроса);
     
     Запрос.ДобПараметр(1, 15, 14, 0);
     Запрос.УстПараметр(1, "00001213");

     Запрос.ДобПараметр(1, 15, 30, 0);
     Запрос.УстПараметр(2, "Товары");
     
     Запрос.ДобПараметр(2, 19,,);
     Запрос.УстПараметр(3, "databin");

       Запрос.ВыполнитьСкалярный();

       Бинарник = Запрос.ПолучПараметр(3, 19);
     Бинарник.СохранитьВФайл(Путь, 0);
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #12 - 14. Января 2014 :: 11:38
Печать  
а ХП использовать принципиально?
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #13 - 14. Января 2014 :: 11:41
Печать  
сделал бы обычный запрос, да и делов
Код
Выбрать все
	ТекстЗапроса="
	|SELECT data
	|FROM [database].[dbo].datagoods goods
	|WHERE goods.code = :code
	|";
	рс=СоздатьОбъект("ODBCRecordset");
	рс.УстановитьТекстовыйПараметр("code","00001213");
	Рез=рс.ВыполнитьИнструкцию(ТекстЗапроса);
	Рез.ВыбратьСтроки();
	Пока Рез.ПолучитьСтроку()=1 Цикл
		Сообщить(Рез.data);
	КонецЦикла;
 

  

1&&2&&3
Наверх
 
IP записан
 
Andrey (sttt)
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Января 2009
Пол: Мужской
Re: прямой запрос к бинарным данным
Ответ #14 - 14. Января 2014 :: 11:58
Печать  
да, я уже лесом послал ХП, раз всякими глупостями заниматься нельзя "The assignment operator operation cannot take a text data type as an argument.")))) сделал обычной выборкой, 10 минут работы, целый день фигней занимался)))) только у меня сейчас файлы пустые получаются)) но это другая история
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать