Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Invalid parameter type у ADODB.Command (число прочтений - 10735 )
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Invalid parameter type у ADODB.Command
05. Июля 2012 :: 16:55
Печать  
Добрый день!
Пишу загрузку файлов в MediumBLOB-поле на vbscript:

[code]...
oStream.LoadFromFile(FileName)
P_ = oStream.Read(oStream.Size)
...
With oCommand
   .CommandText = "INSERT INTO files.f_temp (data) VALUES (@p1)"
   .CommandType = 1
   .Parameters.Append     .CreateParameter("@P",205,1,oStream.Size,P_)
   .NamedParameters = 1
   .Execute , , 128
End With[/code]
Выдает ошибку:
[quote][MySQL][ODBC 5.1 Driver][mysql-5.1.46-community-log]Invalid parameter type
[/quote]
Даже если делаю параметр строковым:
[code].Parameters.Append .CreateParameter("@P",200, ,5000,"testvarchar")[/code]
все равно ругается на тип параметра.

Ни кто подробно не копался в параметрах?
А то меня уже заклинило
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #1 - 05. Июля 2012 :: 18:11
Печать  
Тогда изменю вопрос.

Подскажите, как из 7.7 в поле BLOB MySQL загрузить файл?
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #2 - 06. Июля 2012 :: 05:26
Печать  
1С не дружит с блобами - это факт.
Сохранить блоб легко через УстановитьТекстовыйПараметр, а вот прочитать я смог только через скрипт на вижуалвасике. Сама 1С нивкакую не согласилась читать блоб.
Где-то тут на форуме видел упоминание об объекте BynaryData. Вроде бы его можно для этого использовать. Поищи.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #3 - 06. Июля 2012 :: 09:56
Печать  
Dmitry The Wing писал(а) 06. Июля 2012 :: 05:26:
1С не дружит с блобами - это факт.
Сохранить блоб легко через УстановитьТекстовыйПараметр, а вот прочитать я смог только через скрипт на вижуалвасике. Сама 1С нивкакую не согласилась читать блоб.
Где-то тут на форуме видел упоминание об объекте BynaryData. Вроде бы его можно для этого использовать. Поищи.


через BynaryData все работает.
1с считает 0x00 концом строки в этом вся и проблема.

PS (0)  тебе тоже наверное надо пробовать через BynaryData.
Обычные данные вполне успешно читал из MySQL через ODBC. bblob не пробывал.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #4 - 06. Июля 2012 :: 11:28
Печать  
читать не проблема:[code]Stream=СоздатьОбъект("ADODB.Stream");
Stream.Mode=3;
Stream.Type=1;
Пока Rst.EOF=0 Цикл
     Stream.Open();
     p=Rst.Fields("picture");
     Stream.Write(p);
     ИмяРисунка="pic"+Преф+"_"+СокрЛП(Сч)+".jpg";
     Stream.SaveToFile(КаталогВременныхФайлов()+ИмяРисунка,2);
     Stream.Close();[/code]Закинуть как?
Когда то видел пример кода, где файл перебирался построчно бинарно. Так формировался поток, который из 7.7 можно закинуть в любой SQL.
Но найти его не могу.

Понял, почему перебирали - подменяли 0х00
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #5 - 06. Июля 2012 :: 11:32
Печать  
Dmitry The Wing писал(а) 06. Июля 2012 :: 05:26:
1С не дружит с блобами - это факт.
Сохранить блоб легко через УстановитьТекстовыйПараметр, а вот прочитать я смог только через скрипт на вижуалвасике. Сама 1С нивкакую не согласилась читать блоб.
Где-то тут на форуме видел упоминание об объекте BynaryData. Вроде бы его можно для этого использовать. Поищи.

Поэтому я и пробую через wsc. Но не выходит.

С типом параметра (криво, но) можно разобраться. Поток в blob все равно не пишется.
Мой начальник в VBA это делает, а в wsc не получается. Возможно wsc тоже глючит, как 7-ка
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #6 - 06. Июля 2012 :: 13:47
Печать  
А в 8.2 возможно загрузить файл в BLOB?
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #7 - 06. Июля 2012 :: 16:14
Печать  
Стало любопытно, что получится, если попробую вставить через 1С++ ODBCRecordSet.
Вопрос: мне понадобится для работы с blob-полем класс BinaryData?
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #8 - 09. Июля 2012 :: 15:16
Печать  
simply писал(а) 06. Июля 2012 :: 16:14:
Стало любопытно, что получится, если попробую вставить через 1С++ ODBCRecordSet.
Вопрос: мне понадобится для работы с blob-полем класс BinaryData?

да именно с помощью него BinaryData и надо делать.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #9 - 09. Июля 2012 :: 15:17
Печать  
Спасибо, попробую.
Обязательно сообщу результаты.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #10 - 09. Июля 2012 :: 19:06
Печать  
не получилось через odbc-driver передать из памяти бинарный файл.

За то получается загрузить через любые ODBC-драйверы с помощью функции "LOAD_FILE()"
Код
Выбрать все
INSERT INTO files.f_temp (`data`) VALUES (LOAD_FILE('c:\\mysql\\tmp\\test.txt')) 

Два ограничения - файл должен быть на локальном сервере и "file" привилегия должна быть включена.

Столько промучаться, чтобы так примитивно ...
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #11 - 10. Июля 2012 :: 08:26
Печать  
вот нашел работающий код через 1cpp для MS SQL

Код
Выбрать все
	Глоб_meta = СоздатьОбъект("MetaDataWork");
	Данные=СоздатьОбъект("BinaryData");
	Данные.ЗагрузитьИзФайла(ИмяФайла);
	Зн_Док_sql = "'" + Глоб_meta.ЗначениеВСтрокуБД(Док_1с) + "'";

	rc.Подготовить("
	|insert into f_file(iddoc,dop_info)
	| values( "+ Зн_Док_sql + "  ,?  )
	|");
	rc.ДобПараметр(1,19,0,0);
	rc.УстПараметр(1,Данные);
	Попытка
	rc.ВыполнитьИнструкцию();
	Исключение
		сообщить("Не удалось сделать insert !!!");
		return;
	КонецПопытки;



таблица имеет структуру


create table f_file(
iddoc char(9) not null,  -- iddoc документа 1c
dop_info image,
CONSTRAINT PK0_f_file  PRIMARY KEY (iddoc)
)
 

  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #12 - 10. Июля 2012 :: 10:03
Печать  
Огромное спасибо, Z1!  Очень довольный

Работает безотказно даже с использованием MSSQL-го обозначения параметра "?".

P.S.: не знал, что есть такой тип "image". Не работаю с MS, только MySQL. И зачем мелокософт выпендривается? Обыкновенный blob.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #13 - 10. Июля 2012 :: 16:02
Печать  
Все таки любопытно, почему параметр LongVarBinary через ODBCRecordSet устанавливается, а через ADODB.Command - выдает ошибку?

Вот узнать бы, как автор этого класса это делает.
Ведь у ADO RecordSet-а параметров нет. Значит это делается через ADO Command.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Invalid parameter type у ADODB.Command
Ответ #14 - 11. Июля 2012 :: 11:56
Печать  
отлично работает по #11!
но остановился на решении #10 - на восьмерку будет легче перенести. У 8.2 - 1С++ нет  Злой

и хотелось бы, хотя бы, предположения услышать - по вопросу #13
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать