Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема BinaryData должна ли работать такая конструкция? (число прочтений - 5499 )
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
BinaryData должна ли работать такая конструкция?
07. Июня 2008 :: 05:43
Печать  
Пытаюсь попробовать записать файл в БД
пробую пока на PostgreSQL (драйвер доступа ODBC PostgreSQL ANSI 8.03.02.00) и сервер PostgreSQL 8.3

таблица на сервере (test_table) состоит из двух колонок id (integer on id_seq) и file_in_base (bytea)

пробую построить параметризированный запрос и выполнить его
Код
Выбрать все
_ПодготовленныйЗапрос.Подготовить("
|INSERT INTO test_table (file_in_base) VALUES
|	(?)
|RETURNING id
|");
 



далее иду по логике вещей - если при SELECT'е в результатах приезжает BInaryData, тогда и INSERT необходимо делать с тем же BinaryData

Код
Выбрать все
_БинарныйОбъект = СоздатьОбъект("BinaryData");
_БинарныйОбъект.ЗагрузитьИзФайла(КаталогИБ()+"\"+ИмяТекущегоФайла,1);

_ПодготовленныйЗапрос.ДобПараметр(1, 17,_БинарныйОбъект.Размер(),0);
_ПодготовленныйЗапрос.УстПараметр(1,_БинарныйОбъект);

тзРезультатаВыполнения = _ПодготовленныйЗапрос.ВыполнитьИнструкцию();
Если тзРезультатаВыполнения.КоличествоСтрок()=0 Тогда
	Сообщить(_ПодготовленныйЗапрос.ПолучитьОписаниеОшибки());
КонецЕсли;
 



И вот на ВыполнитьИнструкцию у меня 1С-сина падает с предложением оправить отчет об ошибке

Видимо где-то я чего то не понимаю  Улыбка

Вопрос - каким должен быть параметр (тип и значение) параметризированного запроса чтобы добавить файл в БД ?
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #1 - 07. Июня 2008 :: 06:05
Печать  
нашел тему  http://www.1cpp.ru/forum/YaBB.pl?num=1178538146/2

сменил параметр на тип 19
вылет прекратился - но
Цитата:
State 23502, native 7, message ERROR: null value in column "file_in_base" violates not-null constraint;
Error while executing the query


такое впечатление что файл пустой  Улыбка
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #2 - 07. Июня 2008 :: 06:30
Печать  
скачал утилиту trad'а - base64.exe - преобразую файл через неё и только потом скармливаю BinaryData

только при указании типа параметра равным 19 (19 - SQL_LONGVARBINARY)
получаем
Цитата:
State 42704, native 7, message ERROR: тип "lo" не существует;
Error while executing the query

при указании 17 и 18 (17 - SQL_BINARY  и 18 - SQL_VARBINARY ) получаем вылет 1С

попробуем перебрать строки

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #3 - 07. Июня 2008 :: 07:41
Печать  
продолжаем исследование
ситуация всё круче и круче


Скрипт создания таблицы на сервере
Код
Выбрать все
CREATE TABLE test_table
(
  id integer NOT NULL DEFAULT nextval('test_table_id_seq'),
  file_in_base bytea NOT NULL,
  CONSTRAINT id_pkey PRIMARY KEY (id)
)
WITH (OIDS=FALSE);
ALTER TABLE test_table OWNER TO postgres;
 




а вот такой код на клиент
Код
Выбрать все
_ПодготовленныйЗапрос.Открыть("SELECT * FROM test_table");

ТипSQL= "";
ДлинаSQL= "";
ТочностьSQL= "";
МожетБытьNULL = "";

ИмяПоля = _ПодготовленныйЗапрос.ПолучитьПараметрыПоля(
	2,,,,ТипSQL, ДлинаSQL, ТочностьSQL, МожетБытьNULL);
Сообщить("Имя - "+ИмяПоля+" тип "+ТипSQL+" длина "+ДлинаSQL+" точность "+ТочностьSQL+" ISNULL "+МожетБытьNULL);
 



возвратит следующее
Цитата:
Имя - file_in_base тип -3 длина 16 точность 0 ISNULL 0


Ужас - кажется драйвер то какой-то не такой
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #4 - 08. Июня 2008 :: 06:03
Печать  
Цитата:
State 42704, native 7, message ERROR: тип "lo" не существует;
Error while executing the query

есть у меня предположение что это всё таки баг  1С++ Улыбка

может зарегистрировать в Багзилле - глянет кто-нибудь ? Смущённый
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #5 - 08. Июня 2008 :: 06:38
Печать  
И еще один баг при работе с PostgreSQL

падение 1С на селекте  Плачущий

как повторить


создаем таблицу на сервере
Код
Выбрать все
DROP TABLE test_table;

CREATE TABLE test_table
(
  id integer NOT NULL,
  file_in_base bytea NOT NULL,
  CONSTRAINT id_pkey PRIMARY KEY (id)
)
WITH (OIDS=FALSE);
ALTER TABLE test_table OWNER TO postgres;

INSERT INTO test_table(
            id, file_in_base)
    VALUES (1, 'testtesttesttesttest1');
 




в 1С через обычный Рекордсет
делаем
Код
Выбрать все
СтрокаПодключения = "Driver={PostgreSQL ANSI};Server=localhost;Port=5432;Database=chimera;Uid=postgres;Pwd=test;";

_Содинение = СоздатьОбъект("ODBCDataBase");
_Содинение.Соединение(СтрокаПодключения);

_ЗапросКПостГрессу = СоздатьОбъект("ODBCRecordSet");
_ЗапросКПостГрессу.Отладка(1);
_ЗапросКПостГрессу.УстБД(_Содинение);

тз = _ЗапросКПостГрессу.ВыполнитьИнструкцию("select * from test_table");
 




И вот какой момент
Цитата:
AppName: 1cv7s.exe       AppVer: 7.70.0.25       ModName: 1cpp.dll
ModVer: 3.0.0.0       Offset: 000c6296


тестировалось на последнем "ночнике" из ветки icpp
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #6 - 08. Июня 2008 :: 06:43
Печать  
то есть подытожу

1. при устанавке типа параметра 19 в параметризированном запросе - на ODBC драйвер уходит "непонятный" тип

2.  при устанавке типа параметра 17 и 18 в параметризированном запросе и значении параметра типа BinaryData - вылетает 1С

3. при попытке получить выборку где типом поля на сервере является bytea - происходит вылет 1С

Вопросов два:
1. регить ли в "багзилле"
2. to Arta - вроде ты работал с postgres'ом - неужели проблем не было
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: BinaryData должна ли работать такая конструкци
Ответ #7 - 10. Июня 2008 :: 20:43
Печать  
lustin писал(а) 08. Июня 2008 :: 06:43:
2. to Arta - вроде ты работал с postgres'ом - неужели проблем не было

Не работал из 1С. Только приложения в линухе.

Давай спросим у vip'а, он работает с ораклом. Постгре тот же оракл, только попроще Улыбка

P.S. Чую я что типы параметров опробованы и номально работают только для mssql
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: BinaryData должна ли работать такая конструкци
Ответ #8 - 15. Июля 2008 :: 10:23
Печать  
Arta писал(а) 10. Июня 2008 :: 20:43:
lustin писал(а) 08. Июня 2008 :: 06:43:
2. to Arta - вроде ты работал с postgres'ом - неужели проблем не было

Не работал из 1С. Только приложения в линухе.

Давай спросим у vip'а, он работает с ораклом. Постгре тот же оракл, только попроще Улыбка

P.S. Чую я что типы параметров опробованы и номально работают только для mssql


Работаю с Ораклом - это громко сказано.
С Ораклом связался по необходимости. Нужна была связь с ораклавой базой на управляющем сервере цифрового ТВ. Разработчики-китайцы дали мне протокол связи с базой через сокеты, а напрямую лезть в таблицы запретили.
Когда я изрядно помучался с их разработкой, то плюнул на их запреты и Оракл поковырял.
И теперь работаю напрямую с их таблицами.
Ничего там особенного не делаю - простейшие селекты, массовое добавление, изменение данных и т.п.

Проблемы были с драйвером ODBC от Майкрософт. С родным все работает из 1С нормально.
Влазить в тонкости Оракла желания нет. Так что чем могу помочь, даже не знаю.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать