Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Не выполняется инструкция... (число прочтений - 3377 )
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Не выполняется инструкция...
22. Января 2010 :: 14:44
Печать  
Ребят, не пойму что за фича... Помогите разобраться..
Есть инструкция

|EXEC master.dbo.sp_addlinkedserver
|@server='192.168.0.1',
|@srvproduct='SQL Server'

В QA выполняется на ура, а из запроса никак.. Выдает ошибку "Связанная инструкция не подготовлена".

Выполняю через ODBCREcordSet методом "ВыполнитьИнструкцию"


1С 7.7, версия 1СPP 2.0.3.1
SQL Server 2005
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #1 - 22. Января 2010 :: 14:48
Печать  
Выполняй методом Выполнить
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #2 - 22. Января 2010 :: 14:57
Печать  
В 3.0 этот запрос выполняется без ошибок.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #3 - 22. Января 2010 :: 15:11
Печать  
Нет вариантов менять на 3.0
В текущей версии пол конфы написано.. (((

А если методом "Выполнить" - тож самое только без сообщений об ошибках.. То есть результат нулевой. Что делать?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #4 - 22. Января 2010 :: 15:17
Печать  
Цитата:
В текущей версии пол конфы написано.. (((

Может не так черт страшен как кажется?
  
Наверх
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #5 - 22. Января 2010 :: 15:21
Печать  
leshik писал(а) 22. Января 2010 :: 15:17:
Цитата:
В текущей версии пол конфы написано.. (((

Может не так черт страшен как кажется?

Ну это как сказать... Хорошо если ошибки сразу видны будут, а если накопительно? Базе 6 лет.... Если что то потянется - это пипец будет
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #6 - 22. Января 2010 :: 16:40
Печать  
1. Попробуй метод ВыролнитьСкалярный()
2. Приведи текст 1с процедуры полностью.
  
Наверх
 
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #7 - 25. Января 2010 :: 06:57
Печать  
ВыполнитьСкалярный() дал тот же эффект. Ошибка "Связаная инструкция не подготовлена".

А текст процедуры:

Код
Выбрать все
Процедура 123()
        База = Новый COMОбъект("V77S.Application");
	СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(ИмяПользователя)+""" /P"""+СокрЛП(Пароль)+"""";
	Рез = База.Initialize(База.RMTrade,СтрокаПодключения,?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));

	Если Рез <> Истина Тогда
		Предупреждение("Не удается подключиться к базе!"+Символы.ПС+ "Проверьте параметры соединения!");
		ЭтаФорма.ЭлементыФормы.Результ.Заголовок = "Ошибка соединения с базой!";
		Возврат;
	Иначе
		ЭтаФорма.ЭлементыФормы.Результ.Заголовок = "Соединение установлено.";
	КонецЕсли;

        Запрос = База.CreateObject("ODBCRecordSet");
	Запрос.УстБД1С();

        Запрос.ВыполнитьСкалярный("
	|EXEC master.dbo.sp_addlinkedserver
	|@server='192.168.0.1',
	|@srvproduct='SQL Server'";

КонецПроцедуры 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #8 - 25. Января 2010 :: 08:01
Печать  
SKOmen писал(а) 25. Января 2010 :: 06:57:
ВыполнитьСкалярный() дал тот же эффект. Ошибка "Связаная инструкция не подготовлена".

А текст процедуры:

Код
Выбрать все
Процедура 123()
        База = Новый COMОбъект("V77S.Application");
	СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(ИмяПользователя)+""" /P"""+СокрЛП(Пароль)+"""";
	Рез = База.Initialize(База.RMTrade,СтрокаПодключения,?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));

	Если Рез <> Истина Тогда
		Предупреждение("Не удается подключиться к базе!"+Символы.ПС+ "Проверьте параметры соединения!");
		ЭтаФорма.ЭлементыФормы.Результ.Заголовок = "Ошибка соединения с базой!";
		Возврат;
	Иначе
		ЭтаФорма.ЭлементыФормы.Результ.Заголовок = "Соединение установлено.";
	КонецЕсли;

        Запрос = База.CreateObject("ODBCRecordSet");
	Запрос.УстБД1С();

        Запрос.ВыполнитьСкалярный("
	|EXEC master.dbo.sp_addlinkedserver
	|@server='192.168.0.1',
	|@srvproduct='SQL Server'";

КонецПроцедуры 



Вы из v8 вызываете 1с 77 через OLE и дальше создаете в пространстве 1с v8 объект 1cpp получиться но вот вызвать
метод объекта как то очень сомнительно.
Надо  из v8 вызывать глобальную функцию v7 ( спризнаком Экспорт) и в этой функции все делать.
Еще лучше чтобы Вам помочь надо точно знать постановку Вашей задачи.

  
Наверх
 
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #9 - 25. Января 2010 :: 08:22
Печать  
Создать процедуру попробую..

А постановка задачи = выполнение запроса в 7.7, если не существует, то создать линкованый сервер для доступа к базе 8.1 и сохранить результаты запроса туда через перебор получившейся таблицы и выполнения криеэт тэйбл инсерт инсерт инсерт..
В дальнейшем запрос из 8.1 к таблице, хранящейся уже на том же сервере что и база 8.1 и обработка..

Выполнить таким образорм select ..  from.. удается.. запрос в 7.7 из под 8.1 через ОЛЕ получается.. а вот создать линкованый сервер как видите не особо... (( Можно конечно вручную создать, но УРИБ. На каждом филиале мудиться не оч удобно и правильно.. Лучше на автомате чтоб создавалось
  
Наверх
 
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #10 - 25. Января 2010 :: 13:36
Печать  
Спасибо, создал процедуру, все "взлетело".
Правда "GO" не хочет обрабатывать корректно. Толи точки с запятой не хватает то ли еще чего то.. не стал разбираться...
Просто вызывал "ВыполнитьСкалярный()" последовательно для каждой инструкции. Линкованый сервачок создался Улыбка
Буду дальше по нему курить маны))
Всем спасибо! С уважением...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #11 - 25. Января 2010 :: 14:38
Печать  
go это не инструкция t-sql  это разделитель пакетов.
В 77 неявная транзакция и  логическое действие идет до фиксации или отката транзакции и смысла особого в пакете нет.
  
Наверх
 
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #12 - 25. Января 2010 :: 15:06
Печать  
Ага, мне уже коллеги разжевали)))
Уже запросы делаю в линкованый сервер и таблички создаю)))
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не выполняется инструкция...
Ответ #13 - 26. Января 2010 :: 06:09
Печать  
SKOmen писал(а) 25. Января 2010 :: 15:06:
Ага, мне уже коллеги разжевали)))
Уже запросы делаю в линкованый сервер и таблички создаю)))

Напиши кратко что получилось с примером, чтобы другие могли воспользоваться твоим результатом а не "открывать Америку" заново
  
Наверх
 
IP записан
 
SKOmen
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 22. Января 2010
Re: Не выполняется инструкция...
Ответ #14 - 26. Января 2010 :: 08:31
Печать  
Вобщем что сделал. В интерпрайз менеджере создал линкованый сервер. после создания посмотрел скрипт, который его создал.
Переписал этот скрипт в 1С попакетно. На каждую инструкцию отдельный "Запрос.ВыполнитьСкалярный()". Проверить наличествует ли уже линкованый сервер или нет можно построив запрос в sys.servers, колонка "name", если не создан - то создаем запуская скрипты. Имя сервера которого надо залинковать получил из СтрокаСоединенияИнформационнойБазы() в 1С 8.1. Его и линкуем если не прилинкован уже. Далее курим маны по работе с линковаными серверами ))
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать