Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle) / 12 сообщений из 12, страница 1 из 1
05.11.2009, 17:08
    #36292885
1C ник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
Помогите разобраться, пожалуйста!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Стрим = Новый COMОбъект("ADODB.Stream");  
     Стрим.Type = Тип("ДвоичныеДанные");    
     Стрим.Open();
     Стрим.LoadFromFile(ФайлШаблон);
     Стрим.Position =  0 ;  
   
     Команда = Новый COMОбъект("ADODB.Command");
     Команда.ActiveConnection = Соединение;
     
     //Команда.Properties.SPPrmsLOB = True;  // - ругаетсо!!!
     Команда.CommandText = "{CALL LOOK_NEW.UPP_REQUEST_ATTACH(?, ?, ?)}";
     //Команда.CommandType = Тип("Текст"); // - ругаетсо!!!
     
     // 1  - й параметр
     par1 = Команда.CreateParameter("parameter1"); // при попытки дописать два других вх. параметра - вылетает!!!
     par1.Value = СтрИД;
     Команда.Parameters.Append(par1); // - вылетает!!!
     // .......


Где косяки - описано в комментах кода. Что я делаю не так? И есть ли в 1С тип "параметр" или нечто подобное (входящий/исходящий параметр)?
...
Рейтинг: 0 / 0
05.11.2009, 17:42
    #36292994
слоненок
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
1C ник, если не секрет, какова цель скрещивания ужа с ежом?
...
Рейтинг: 0 / 0
05.11.2009, 17:43
    #36292997
Dolter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
поробуй так:
Код: plaintext
Команда.Properties("SPPrmsLOB") = Истина;
и не параметры создавать, а значения в строку комманды вставлять:
Код: plaintext
Команда.CommandText = "{CALL LOOK_NEW.UPP_REQUEST_ATTACH('" + СтрИД + "', " + ... + ", " + ... + ")}";
вдруг да поможет :-)
...
Рейтинг: 0 / 0
05.11.2009, 18:18
    #36293106
semyons
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
Не использовать параметры - это дурной тон.
Лучше использовать следующий вариант:
Команда.CommandType = 4; //adCmdStoredProc
Команда.CommandText = "LOOK_NEW.UPP_REQUEST_ATTACH";

ado_p1 = Команда.CreateParameter("var",200,1,50);
Команда.Parameters.Append(ado_p1);
ado_p1.value = "12345";

или

obj_ADOComm.Parameters.Append(obj_ADOComm.CreateParameter("var", 200, 1, 50, "12345"));

Соответственно, 200 - это тип параметра, 1 - это входной или выходной параметр, 50 длина.

"LOOK_NEW.UPP_REQUEST_ATTACH" - это функция, возвращающая курсор?
...
Рейтинг: 0 / 0
06.11.2009, 10:13
    #36293925
1C ник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
2semyons:
Спасибо, буду пробовать так.
semyons"LOOK_NEW.UPP_REQUEST_ATTACH" - это функция, возвращающая курсор?
Приаттачивание файла (третий параметр тут - blob).

Dolter поробуй так:

Команда.Properties("SPPrmsLOB") = Истина;

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

слоненок1C ник, если не секрет, какова цель скрещивания ужа с ежом?
Прихоть заказчика. Чтобы помимо обычной выгрузки данных из 1С в Ораклю (в таблицы). Приаттачивать макеты документа, чтобы пользователи в оракле по кнопке видели привычный макет (суть печатную форму) 1с-овского документа. (ИМХО, извращение, но что поделать)
...
Рейтинг: 0 / 0
06.11.2009, 10:19
    #36293939
1C ник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
semyonsobj_ADOComm.Parameters.Append(obj_ADOComm.CreateParameter("var", 200, 1, 50, "12345"));

Соответственно, 200 - это тип параметра, 1 - это входной или выходной параметр, 50 длина.

А вслучае blob-а, что в параметрах метода CreateParameter() писать? CreateParameter("blob", 'filename', 1, fileData) ?? (filename - имя файла, filedata - собственно сам файл двоичных данных)
...
Рейтинг: 0 / 0
06.11.2009, 11:20
    #36294124
semyons
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
в CreateParameter() первый параметр - имя параметра, второй - тип, третий - (входной/выходной), четвертый длина поля, пятый - значение.
Значение, которое нужно передавать для типа параметра blob я не нашел.
...
Рейтинг: 0 / 0
06.11.2009, 15:06
    #36294982
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
Стрим.Type = Тип("ДвоичныеДанные");
Бред какой-то. Откуда ADODB знает про типы 1цэ?
Надо так:
Код: plaintext
Стрим.Type =  1 ;// т.е. adTypeBinary

Команда.Properties("SPPrmsLOB") = Истина;
С точки зрения 1цэ это неправильный синтаксис, надо так:
Код: plaintext
Команда.Properties("SPPrmsLOB").Value = Истина; // после выполнения команды нужно установить в Ложь

BLOB параметр передаётся так (будет работать только с OraOLEDB провайдером!):
Код: plaintext
1.
2.
parBlob = Команда.CreateParameter("parBlob",  205 ,  1 , Стрим.Size);
cmdSQL.Parameters.Append(parBlob);
parBlob.Value = Стрим.Read();
...
Рейтинг: 0 / 0
08.11.2009, 23:18
    #36297648
1С ник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
//{ Загрузка двоичных данных...  					
					Стрим = Новый COMОбъект("ADODB.Stream");  
					Стрим.Type =  1 ;    
					Стрим.Open();
					Стрим.LoadFromFile(ФайлШаблон);
					Стрим.Position =  0 ;  
					//cnnOracle.Open "DBConnString" 
					Команда = Новый COMОбъект("ADODB.Command");
					Команда.ActiveConnection = Соединение;
					
					//Команда.Properties("SPPrmsLOB").Value = Истина; //для передачи двоичных данных в параметр !!! косячит			
					Команда.CommandText = "{CALL LOOK_NEW.UPP_REQUEST_ATTACH(?, ?, ?)}";
					//Команда.CommandType = Тип("Текст");
					
					// 1  - Ид заявки
					par1 = Команда.CreateParameter("par1", 139  , 1 , 50 );
					Команда.Parameters.Append(par1);
					par1.Value = СтрИД;
					

					
					// 2  - название файла
					par2 = Команда.CreateParameter("par2",  200 , 1 , 50 );
					Команда.Parameters.Append(par2);
					par2.Value = "OtchetTO.xls";
					
					// 3  - сам файл   					
					parBlob = Команда.CreateParameter("parBlob",  205 ,  1 , Стрим.Size);
					Команда.Parameters.Append(parBlob);
					parBlob.Value = Стрим.Read();
					
					Команда.Execute(); ///вылетает!!!!
					
					//Команда.Properties("SPPrmsLOB").Value = False;

Команда.Properties("SPPrmsLOB") - не находит по "SPPrmsLOB", закомментил, стало сыпаться на execute. Текст ошибки следующий:
Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.
...
Рейтинг: 0 / 0
09.11.2009, 12:02
    #36298341
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
авторПроизошла исключительная ситуация ( Microsoft OLE DB Provider for ODBC Drivers )
Уважаемый, я ведь не зря написал, что "будет работать только с OraOLEDB провайдером"...
...
Рейтинг: 0 / 0
10.11.2009, 22:08
    #36302438
1С ник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Соединение = Новый COMОбъект("ADODB.Connection");
    СтруктураДляОтбора = Новый Структура;
    СтруктураДляОтбора.Вставить("База","traf");
    ДСН = "***";
	УИД = "******";
	ПВД = "*****";
    Соединение.Provider = "MSDAORA.1";
    Соединение.ConnectionString = "DSN=" + ДСН + ";UID=" + УИД + ";PWD=" + ПВД;   
    Соединение.ConnectionTimeout =  15 ;
    Соединение. CursorLocation=  3 ;
    Соединение.Open();

При провайдере MSDASQL коннектит нормально. При попытке установить провайдер MSDAORA (как показано в листинге) вылетает в следующую ошибку:

Произошла исключительная ситуация (Microsoft OLE DB Provider for Oracle): Произошла ошибка Oracle, для которой невозможно загрузить сообщение из Oracle.

С чем это может быть связано? Ораклисты клянуться, что все, что нужно чтобы жить дружно установлено и проблем никаких быть не должно....
...
Рейтинг: 0 / 0
11.11.2009, 00:57
    #36302697
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle)
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Ошибка при перегрузке данных (1С 8.1 -/ ADO/ - Oracle) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]