Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Одновременный запрос к 1С(ДБФ) и к  БД на MS (число прочтений - 2607 )
AHgpuXa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 08. Июня 2007
Пол: Мужской
Одновременный запрос к 1С(ДБФ) и к  БД на MS
23. Ноября 2007 :: 10:55
Печать  
Доброго времени суток!
Небходимо сварганить запрос одновременно базе 1С(ДБФ) и к сторонней БД на MS SQL.
Использую 1С++, пытаюсь через OpenRowSet.

Код
Выбрать все
База = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+                   ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
Рез = База.Соединение(Соединение);
Запрос = База.СоздатьКоманду(); 



Код
Выбрать все
СтрокаПодключенияСКЛ = "Driver={SQL Server};Server=" + сервер + ";Database="+БД+";Uid=sa;Pwd=;"; 


и собственно сам текст запроса:
Код
Выбрать все
Процедура Тест()
	ТекстЗапроса = "
	|SELECT t.Code, pr.Code, t.[Id] as [Товар $Справочник.Товары] , Pr.Descr,
	|pr.Price,Pr.Producer,Pr.Term,
	|Pr.PerPack,
	|Pr.Unit,
	|Pr.Rest,
	|Pr.NDS,  
	|Pr.Reg, pr.Id,pr.Code
	|from
	|OPENROWSET('MSDASQL','"+СтрокаПодключенияСКЛ+"','
	|(SELECT s.ID, Pi.Descr, pi.Price,PI.Price*(1-S.Modify/100) as PriceModify,Pi.Producer,PI.Term,
	|PI.PerPack,
	|PI.Unit,
	|PI.Rest,
	|PI.NDS,
	|PI.Reg, PI.Id_Price, PI.Code
	|From  Price.dbo.Suppliers S  Right join Price.dbo.PriceLists PL on PL.Id_Supplier = S.Id
	|right Join Price.dbo.PriceItems PI on PI.Id_Price = PL.Id)') as Pr Left join
	|$Справочник.ТоварыПоставщиков p on  pr.Code  = p.Code  
	|Left join $Справочник.Товары t on p.sp5970=t.id  
	|Left join sc114 c on p.[PARENTEXT]=c.id
	|ORDER By Pr.Descr
	|";
	//--where LTrim(RTrim(pr.Id_Price))=LTrim(RTrim(p.Code))
	Запрос.Отладка(1);
	Запрос.ВыполнитьИнструкцию(ТекстЗапроса,тзПодбор);
	Запрос.Закрыть();
КонецПроцедуры 



Из сиквельной версии 1С отрабатывает без проблем. Подозреваю что VFPOLEDB.1 не так работает с конструкцией OPENROWSET либо что то с подключением нужно делать по другому.
Сталкивался кто нибудь с подобным? Как решить?
Заранее благодарен.
  
Наверх
 
IP записан
 
ssv
Junior Member
**
Отсутствует



Сообщений: 16
Местоположение: Орел
Зарегистрирован: 29. Ноября 2007
Пол: Мужской
Re: Одновременный запрос к 1С(ДБФ) и к  БД на MS
Ответ #1 - 30. Ноября 2007 :: 09:49
Печать  
Есть простой вариант сделать на SQL сервере Linked Server на dbf.
Соответственно коннектишся к SQL  и пишешь запрос для SQL с обращением к dbf через прилинкованный сервер
  
Наверх
 
IP записан
 
AHgpuXa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 08. Июня 2007
Пол: Мужской
Re: Одновременный запрос к 1С(ДБФ) и к  БД на MS
Ответ #2 - 04. Декабря 2007 :: 11:01
Печать  
C таким же успехом я могу подключать SQL базу, и в запросе использовать OPENROWSER или OPENDATASOURCE к ДБФ, но в этом случае я теряю метапарсер 1С++, что не есть желательно.
Необходимо именно из контекста базы подключиться к SQL.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Одновременный запрос к 1С(ДБФ) и к  БД на
Ответ #3 - 04. Декабря 2007 :: 11:27
Печать  
AHgpuXa писал(а) 04. Декабря 2007 :: 11:01:
C таким же успехом я могу подключать SQL базу, и в запросе использовать OPENROWSER или OPENDATASOURCE к ДБФ, но в этом случае я теряю метапарсер 1С++, что не есть желательно.
Необходимо именно из контекста базы подключиться к SQL.

У Фокса есть такая вещь Remote View не знаю поддерживает ли его OLE DB Provider но поробуй покапать в этом направлении
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Одновременный запрос к 1С(ДБФ) и к  БД на
Ответ #4 - 04. Декабря 2007 :: 12:30
Печать  
Откуда в FOX OPENROWSET ???

Для аналогичных целей пользуют SQLCONNECT( )
и далее SQLEXEC( ),
не поддерживающиеся в OLEDB.
Насчет возможности использования этих операторов в хранимых процедурах - не знаю, самому было бы
интересно узнать.

Если нужен метапарсер , достаточно "отметапарсить" запрос в родной базе и передать его
SQL(кроме выходной типизации).
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать