Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Загрузка 1cpp по ОЛЕ (число прочтений - 15373 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #15 - 04. Июня 2007 :: 10:57
Печать  
Гадать о твоем коде никто не хочет.
Приведи код с подключением к базе и код выполнения простейшего запроса.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #16 - 04. Июня 2007 :: 11:05
Печать  
ну вот что то типа такого Улыбка

Код
Выбрать все
Функция ЦеныSQL()

			ОЛЕ_DSN="NAME_BASE";
			ОЛЕ_UID="sa";
			ОЛЕ_PWD="_password_";
			Попытка
				БазаОле.CreateObject("ODBCRecordSet");
			Исключение
				regPath = "";

				Попытка
					WshShell 	= CreateObject("Wscript.Shell");
					regPath 	= 7}\\InprocServer32\\");
				Исключение
					Попытка
						WshShell 	= CreateObject("Wscript.Shell");
						regPath 	= \InprocServer32\");
					Исключение
						regPath = "";
					КонецПопытки;
				КонецПопытки;

				Если regPath = "" Тогда
					regPath = "1CPP.dll";
				КонецЕсли;

				Если Не(БазаОле.ЗагрузитьВнешнююКомпоненту(regPath)=1) Тогда
					ЗаписьВПротокол1СРР("Ошибка загрузки 1CPP.dll в рознице!");
					Сообщ("Ошибка загрузки 1CPP.dll в рознице!");
					Возврат 0;
				КонецЕсли;
			КонецПопытки;
	ТЗ = СоздатьОбъект("ТаблицаЗначений");

	//db = БазаОле.CreateObject("ODBCDatabase");
	////
	//db_local = СоздатьОбъект("ODBCDatabase");
	//
	//Если db.DriverConnect("DSN="+ОЛЕ_DSN+"; DRIVER=SQL Server; UID="+ОЛЕ_UID+"; PWD="+ОЛЕ_PWD+";")=0 Тогда
	//	Сообщ("Ошибка подключения к ODBC через ОЛЕ!");
	//	ЗаписьВПротокол1СРР("Ошибка подключения к ODBC через ОЛЕ!");
	//	Возврат 0;
	//КонецЕсли;
	//db.ПолучитьОписаниеОшибки();
	////
	//Если db_local.DriverConnect("DSN="+ОЛЕ_DSN+"; DRIVER=SQL Server; UID="+ОЛЕ_UID+"; PWD="+ОЛЕ_PWD+";")=0 Тогда
	//	Сообщ("Ошибка подключения к ODBC из локала!");
	//	ЗаписьВПротокол1СРР("Ошибка подключения к ODBC из локала!");
	//	Возврат 0;
	//КонецЕсли;
	//

	SS		= БазаОле.CreateObject("ODBCRecordSet");
	SS_local = CreateObject("ODBCRecordSet");
	//SS.SetDatabase(db);
	//SS_local.SetDatabase(db_local);

	//выбираем базовые цены
	SS.УстановитьТекстовыйПараметр("НаДату", ТекущаяДата());
	SS.УстановитьТекстовыйПараметр("КредКод", КредКод);
	SS.УстановитьТекстовыйПараметр("РозКод", РозКод);
	SS.УстановитьТекстовыйПараметр("ДатаПоследнейЗагрузки", ДатаПоследнейЗагрузки);
	SS.УстановитьТекстовыйПараметр("Нобн",Нобн);

		Запрос="
		|select
		|Номенклатура.code as Номен_Код,
		|ТипыЦен.id as ТипЦены_id,
		|ТипыЦен.code as ТипЦены_Код,
		|Курсы.kurs as Валюта_Курс,
		|$ПоследнееЗначение.Цены.Цена(Цены.id, :НаДату) as Цена
		|into #t1
		|from $Справочник.Номенклатура as Номенклатура
		|inner join $Справочник.Цены Цены on Номенклатура.id=Цены.parentext
		|inner join $Справочник.ТипыЦен ТипыЦен on ТипыЦен.id=Цены.$Справочник.Цены.ТипЦен
		|inner join #kurs Курсы on Курсы.id=Цены.$Справочник.Цены.Валюта
		|where
		ки) or (:Нобн=1))
		|and ((ТипыЦен.$Справочник.ТипыЦен.ВыгружатьВСубРозницу=1) or (ТипыЦен.code=:КредКод) or (ТипыЦен.code=:РозКод)))
		|";

		Если ПустоеЗначение(ТекстУсловия_SQL)=0 Тогда
			Запрос = Запрос + "
			|or ("+ТекстУсловия_SQL+")";
		КонецЕсли;
	КонецЕсли;
	Если SS.Execute(Запрос)=0 Тогда
		 Сообщ("Ошибка второго запроса "+SS.ПолучитьОписаниеОшибки());
		 Возврат 0;
	КонецЕсли;


	ИмяРозы = "fom_"+База.Код;

	Запрос="
	|select Т.* into ##t3"+ИмяРозы+"
	|from (select * from #t1
	|union
	|select * from #t2) as Т
	|";

	SS.Execute(Запрос);

	Запрос="
	|select * from ##t3"+ИмяРозы+"
	|order by Номен_Код
	|";

	if SS_local.ExecuteStatement(Запрос,ТЗ,1) = 0 then
		Сообщ("Запрос не выполнен!");
		Возврат 0;
	EndIf;

	Возврат 1;
КонецФункции	// ЦеныSQL
 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #17 - 04. Июня 2007 :: 11:56
Печать  
Создай новую ветку в разделе ПрямыеЗапросы и жди ответа там.
ЗЫ ИМХО приведенный код вообще не может работать, т.к. закомментарено создание ODBCDatabase.
ЗЫ приведи в новой ветке нормальный код, без лишней и ненужной регистрации ВК
и покажи код, который выполняется до первой ошибки, остальной код нам не нужен.
так же приведи код ошибки.

ЗЫ блин, ну подробнее пиши чтоли Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #18 - 04. Июня 2007 :: 15:54
Печать  
блин, ну что еще написать? то ты пишешь не нужно лишнее писать, то подробнее пиши.
ошибку я выдавал и то ее отловить можно только при ПолучитьОписаниеОшибки(), а так ничего не выдает, просто не коннектиться и потом запрос в пустую идет и пустоту возвращает, что еще писать?
Где ошибка не понятно, чтобы до нее показать, просто проверил и сикуль возвращает:
State IM002, native 0, message [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #19 - 05. Июня 2007 :: 04:29
Печать  
artbear писал(а) 04. Июня 2007 :: 11:56:
ЗЫ ИМХО приведенный код вообще не может работать, т.к. закомментарено создание ODBCDatabase.

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #20 - 05. Июня 2007 :: 04:43
Печать  
хм, а не подскажешь где бы прочесть что за чем идет?
так как не пойму с раскомменированным тем кодом выругивается как я написал, тоесть Источник данных не найден, а так тоже не пашет Печаль не пойму. и DSN строку в винде тоже прописал уже и толку ноль Печаль
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #21 - 05. Июня 2007 :: 04:50
Печать  
Как я уже говорил, тебе прямая дорога в соседний форум "Прямые запросы".
Ищи, там полно готовых примеров для скуля и ДБФ, начни с ФАКушных веток.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #22 - 05. Июня 2007 :: 04:55
Печать  
А DSN для чего создаешь? тебе точно это надо?
ODBCDatabase для чего создаешь?
Тебе известно что ODBCRecordset при создании уже "подключен" к БД, в ИБ которой создается ODBCRecordset?
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #23 - 05. Июня 2007 :: 05:42
Печать  
trad писал(а) 05. Июня 2007 :: 04:55:
А DSN для чего создаешь?

пробую все подряд Улыбка

Цитата:
тебе точно это надо?

понятия, честно говоря не имею Печаль

Цитата:
ODBCDatabase для чего создаешь?
Тебе известно что ODBCRecordset при создании уже "подключен" к БД, в ИБ которой создается ODBCRecordset?

а вот тут по подробнее если можно Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #24 - 05. Июня 2007 :: 05:45
Печать  
Модератор плизз, если возможно, перенеси полностью всю эту ветку с сообщениями в раздел "Прямы запросы".
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #25 - 05. Июня 2007 :: 05:46
Печать  
artbear писал(а) 05. Июня 2007 :: 04:50:
Как я уже говорил, тебе прямая дорога в соседний форум "Прямые запросы".
Ищи, там полно готовых примеров для скуля и ДБФ, начни с ФАКушных веток.

Печаль читай форум и доку
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #26 - 05. Июня 2007 :: 05:48
Печать  
ну пошел читать, но фак я читал и не нашел для себя понятного ответа на мою проблему Печаль
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #27 - 05. Июня 2007 :: 06:02
Печать  
pavlo писал(а) 05. Июня 2007 :: 05:42:
Цитата:
ODBCDatabase для чего создаешь?
Тебе известно что ODBCRecordset при создании уже "подключен" к БД, в ИБ которой создается ODBCRecordset?

а вот тут по подробнее если можно Подмигивание

Для доступа к данным посредством ODBC имеем в арсенале два класса ODBCDatabase и ODBCRecordset.
Первый для установки соединения с базой данных. Второй для манипулирования данными в базе данных.

Дак вот если экземпляр ODBCRecordset создается в "sql-ной" ИБ, то он уже подключен к текущей БД (которая соответствует этой ИБ). И создавать ODBCDatabase, соединять его с БД и устанавливать в ODBCRecordset в этом случае не нужно.

ODBCDatabase нужен только если хотим подключится к текущей базе dbf формата, либо если хотим подключится к любой посторонней базе данных.
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #28 - 05. Июня 2007 :: 06:17
Печать  
так а тут и пытаюсь соединится из локальной сикульной базы со второй сикульной базой и обменяться ценами
а поключен к текущей ИБ или к текущему серверу сикуля?
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Загрузка 1cpp по ОЛЕ
Ответ #29 - 05. Июня 2007 :: 06:18
Печать  
Насколко я понял тебе нужно получить данные из некоторой посторонней 1C базы данных формата sql.
Причем запросы ты хочешь писать с использованием идентификаторов метаданных.
Для этого мне известно два способа: первый через OLE (который ты пытаешься осилить) и другой (о нем позже).

По первому у тебя уже все есть, только нужно разобраться почему не работает.
Начни с простого.
1) Получаешь соединение с оле-сервером. У тебя ссылка на это соединение видимо в БазаОле.
2) На стороне оле-сервера создаешь рекордсет. Это у тебя тоже есть: SS = БазаОле.CreateObject("ODBCRecordSet");
3) Устанавливаешь текстовые параметры (в качестве значений параметров можно оперировать только простыми типами)
4) Выполняешь запрос: SS.ВыполнитьИнструкцию(ТекстЗапроса)

Все. Это должно работать.

Начни с простого запроса типа:
ТекстЗапроса="
|select
|  Номенклатура.code as Номен_Код
|from $Справочник.Номенклатура as Номенклатура (nolock)
|";
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать