Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Доступ в другую базу на том же SQL-сервере (число прочтений - 7017 )
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Доступ в другую базу на том же SQL-сервере
26. Февраля 2010 :: 10:44
Печать  
Добрый день.

Есть несколько баз, часть из которых имеет одинаковую структуру, а часть - нет. Пишется обработка, которая должна выгружать данные из всех баз поочередно. На этом форуме была предложена идея (greets to Z1) о доступе к разным базам из одной. Т.е. обработка запускается в одной базе, а дальше - с помощью изменения ODBCDataBase - обрабатываются все базы подряд.

При попытке обработать первую нестандартную (в рамках моей системы) базу получаю сообщение о невозможности типизации имени документа, который отсутствует в базе, где запускается обработка. Можно ли как-то заставить 1С брать типы документов (ну и все остальное, очевидно) из той базы, к которой производится текущее подключение?

С уважением, /me.

ЗЫ: Естественно, ссылки на ФАК приветствуются в той же мере, что и прямые ответы Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #1 - 26. Февраля 2010 :: 10:55
Печать  
Лучше видеть реальный запрос
и дословно какое на него пишется сообщение.

PS для нестандартных баз не  используй метапарсер
и используй родные имена таблиц и реквизитов ( как они заданы в sql)
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #2 - 26. Февраля 2010 :: 11:22
Печать  
Делай так:
БД = СоздатьОбъект("ODBCDataBase");
Попытка
     БД.ПрисоединитьИБ(_ПутьМД, "Администратор", _пароль);
Исключение
КонецПопытки;
Если БД.ЕстьСоединение()=0 Тогда
     БД = 0;
     Сообщить("Ошибка подключения к внешней базе """+ТипБазы+"""", "!!!");
     _ПутьМД = "";
     Возврат 0;
КонецЕсли;
RS = СоздатьОбъект("ODBCRecordSet");
RS.УстБД(БД);
RS.мд.ПрисоединитьМД(_ПутьМД+"1cv7.md"); //фигня    МД-шник загружается дважды

//Строку "фигня" можно будет убрать когда исправят ошибку в 1cpp.dll (баг № 3560) ("столетней давности")

Далее можно отдавать запросы RS. Они будут обрабатываться метапарсером внешней базы.
« Последняя редакция: 26. Февраля 2010 :: 12:36 - slawa »  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #3 - 26. Февраля 2010 :: 11:35
Печать  
баг № 3560 тебе не помешает если не будешь пользоваться RS.мд
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #4 - 26. Февраля 2010 :: 11:57
Печать  
Z1, с учетом дополнения от slawa запрос выглядит так:

Код
Выбрать все
БазаДанных = СоздатьОбъект("ODBCDataBase");

СтрокаСоединения = "Driver={SQL Server};Server=BS-SERVER;Database=" + ИмяБазы + ";Uid=" + Логин + ";Pwd=" + Пароль + ";";

БазаДанных.ПрисоединитьИБ(КаталогБазы, Логин, Пароль, СтрокаСоединения);

Обработчик = СоздатьОбъект("ODBCRecordset"); Обработчик.УстБД(БазаДанных);

Обработчик.МД.ПрисоединитьМД(КаталогБазы + "1cv7.md");

ТекстЗапроса = "SELECT TOP 10 IDDoc as [ID $Документ.РеализацияТары] FROM " + ИмяБазы + ".dbo.$Документ.РеализацияТары (nolock)";

Результат = Обработчик.ВыполнитьИнструкцию(ТекстЗапроса);
	  
Результат.ВыбратьСтроки(); 



Переменные ИмяБазы, КаталогБазы, Логин и Пароль определены ранее и определены правильно. И параметры базы относятся именно к той базе, где живет нужный тип документа. Переменная КаталогБазы оканчивается на "\".

В ответ получаю: Meta name parser error: объект не найден "$Документ.РеализацияТары". Это совершенно логично для базы, из которой запускается запрос, в ней такого типа документа, разумеется, нет. Однако все-таки хочется парсить таблицу $Документ.РеализацияТары с использованием структуры базы, в которой он есть.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #5 - 26. Февраля 2010 :: 12:07
Печать  
Попробуйте все наоборот.
Сначала решите задачу в  терминах sql получите большой работающий sql запрос( в родный идентефикаторах баз желательно вообще в qa) потом уже займетесь типизацией результатов.
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #6 - 26. Февраля 2010 :: 12:18
Печать  
Код
Выбрать все
ТекстЗапроса = "SELECT TOP 10 IDDoc as [ID $Документ.РеализацияТары] FROM " + ИмяБазы + ".dbo.$Документ.РеализацияТары (nolock)";
 



"ИмяБазы+dbo." - не требуется. Это и так предполагается при присоединении базы

что-то я не могу понять, что ты хочешь получить в поле [ID $Документ.РеализацияТары] если такого документа вообще нет в локальной базе ?

хотя даже если и есть документ, с таким наименование, то типизировать, его,  все равно не получится. (коды то разные)


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


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #7 - 26. Февраля 2010 :: 12:27
Печать  
slawa писал(а) 26. Февраля 2010 :: 12:18:
что-то я не могу понять, что ты хочешь получить в поле [ID $Документ.РеализацияТары] если такого документа вообще нет в локальной базе ?

хотя даже если и есть документ, с таким наименование, то типизировать, его,  все равно не получится. (коды то разные)


Вот как раз эту типизацию я и хотел провести. А почему нет, если к рекордсету подключается мд-файл, в котором такой тип документа описан и все действия производятся с базой, в которой такие документы есть? Или я хочу невозможного?
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #8 - 26. Февраля 2010 :: 12:33
Печать  
mistyx писал(а) 26. Февраля 2010 :: 12:27:
slawa писал(а) 26. Февраля 2010 :: 12:18:
что-то я не могу понять, что ты хочешь получить в поле [ID $Документ.РеализацияТары] если такого документа вообще нет в локальной базе ?

хотя даже если и есть документ, с таким наименование, то типизировать, его,  все равно не получится. (коды то разные)


Вот как раз эту типизацию я и хотел провести. А почему нет, если к рекордсету подключается мд-файл, в котором такой тип документа описан и все действия производятся с базой, в которой такие документы есть? Или я хочу невозможного?


нужно получать не таблицу с документами неизвестного, в локальной базе, вида, а конкретные значения. (строки, числа)
и с ним дальше разбираться
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #9 - 26. Февраля 2010 :: 12:55
Печать  
slawa писал(а) 26. Февраля 2010 :: 12:33:
нужно получать не таблицу с документами неизвестного, в локальной базе, вида, а конкретные значения. (строки, числа)
и с ним дальше разбираться

Трабл заключается в том, что мне нужно на выход отдавать все ID-номера в обертке ЗначениеВСтрокуВнутр(), чтобы в них участвовал номер таблицы, по которому мы дальше производим синхронизацию данных. Соответственно, очень хочется производить эту типизацию на лету, чтобы ID-номера лежали в одном (почти уникальном) поле.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #10 - 26. Февраля 2010 :: 13:02
Печать  
mistyx писал(а) 26. Февраля 2010 :: 12:55:
slawa писал(а) 26. Февраля 2010 :: 12:33:
нужно получать не таблицу с документами неизвестного, в локальной базе, вида, а конкретные значения. (строки, числа)
и с ним дальше разбираться

Трабл заключается в том, что мне нужно на выход отдавать все ID-номера в обертке ЗначениеВСтрокуВнутр(), чтобы в них участвовал номер таблицы, по которому мы дальше производим синхронизацию данных. Соответственно, очень хочется производить эту типизацию на лету, чтобы ID-номера лежали в одном (почти уникальном) поле.

Кто то кого-то не понимает
сделайте как написано в 5.
Для типизации в общий запрос добавляем номер базы данных
select  top 100  id,1 as glob_bd from  db1.dbo.cs1
union all
select  top 100  id,2 from  db2.dbo.cs1
union all
select  top 100  id,3 from  db3.dbo.cs1213  -- нестандарная база

Когда такой запрос нужный вам со всякими ограничениями дополнениями заработает только тогда можно что-то думать о типизации результатов, используя  glob_bd или усложнив работающий запрос.
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #11 - 26. Февраля 2010 :: 13:06
Печать  
Попытаюсь промедитировать Улыбка
Все-таки ты хочешь синхронизировать базы одинаковой структуры, но с разными IDшниками объектов.
Такие могли получиться если при загрузке изменений в конфигурацию использовалась операция "Объединение баз", а не "Загрузка измененной базы"

Так ?

Тогда 1cpp.dll, в текущей реализации, тебе не поможет. ИМХО
Тебе придется самому сопоставлять разные ID, для одинаковых (по наименованию) объектов.
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #12 - 26. Февраля 2010 :: 13:20
Печать  
Z1 писал(а) 26. Февраля 2010 :: 13:02:
Кто то кого-то не понимает
сделайте как написано в 5.
Для типизации в общий запрос добавляем номер базы данных
select  top 100  id,1 as glob_bd from  db1.dbo.cs1
union all
select  top 100  id,2 from  db2.dbo.cs1
union all
select  top 100  id,3 from  db2.dbo.cs1213  -- нестандарная база

Когда такой запрос нужный вам со всякими ограничениями дополнениями заработает только тогда можно что-то думать о типизации результатов, используя  glob_bd или усложнив работающий запрос.

Однозначно, не понимаю я - потому что не работает запрос у меня Улыбка

Сожалею, что не ответил раньше на Ваше предыдущее сообщение. Запрос в виде

Код
Выбрать все
ТекстЗапроса = "SELECT TOP 10 IDDoc FROM " + ИмяБазы + ".dbo.$Документ.РеализацияТары (nolock)"; 



без типизации загружаемого поля нормально отрабатывает. Ошибка возникает именно при попытке типизации возвращаемого значения. А типизация как раз нужна для того, чтобы в одном поле получить уникальную для базы строку, совмещающую в себе номер таблицы с документом и номер самого документа. Кстати, с документами вполне можно обойтись без типизации, потому что ID документа уникален. А вот со справочниками такой финт ушами не получится, потому что нам приходится сливать в единую таблицу, например, Номенклатуру, Материалы и ОсновныеСредства. И здесь уже ни о какой уникальности, к сожалению, не может быть и речи. При этом справочники точно также будут разные в разных базах. Вот как-то так...
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #13 - 26. Февраля 2010 :: 13:23
Печать  
slawa писал(а) 26. Февраля 2010 :: 13:06:
Попытаюсь промедитировать Улыбка
Все-таки ты хочешь синхронизировать базы одинаковой структуры, но с разными IDшниками объектов.
Такие могли получиться если при загрузке изменений в конфигурацию использовалась операция "Объединение баз", а не "Загрузка измененной базы"

Так ?

Тогда 1cpp.dll, в текущей реализации, тебе не поможет. ИМХО
Тебе придется самому сопоставлять разные ID, для одинаковых (по наименованию) объектов.

Правильно медитируешь, можешь записываться в телепаты Улыбка

Базы делал не я, делали их не для меня, однако возиться сейчас приходится с ними именно мне.

Собственно, последние несколько часов я домогаюсь тебя и Z1 на тему упрощения моей работы - чтобы можно было запускать одну обработку в одной базе, которая сама подключится ко всем остальным базам и все сделает.

Может быть, есть альтернативные, более простые варианты автоматизации обработки нескольких баз, различных по структуре? Опять-таки, ссылки на ФАК вполне привествуются Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #14 - 26. Февраля 2010 :: 13:25
Печать  
да потому что неправильно фраза построена
dbo.$Документ.РеализацияТары

$Документ.РеализацияТары т.к. перед $ точка то скорее всего метапарсер это все пропускает и не подставляет нужной таблицы sql

Чтобы увидеть это используйте метод
Отладка(1)

Также можно используя отладка(1) получить в каждой базе
запрос к родной базе потом  их соеденить union all

Я совсем запутался я думал что тебе нужен общий результат на множестве баз ( ну типа сумма всех приходных накладных за период или что то такое )
я сейчас я понимаю что не понимаю зачем тебе нужен общий запрос

Так что лучше еще раз сформулируй задачу в человеческих терминах.

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


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #15 - 26. Февраля 2010 :: 13:32
Печать  
Z1 писал(а) 26. Февраля 2010 :: 13:25:
да потому что неправильно фраза построена
dbo.$Документ.РеализацияТары

$Документ.РеализацияТары т.к. перед $ точка то скорее всего метапарсер это все пропускает и не подставляет нужной таблицы sql

Чтобы увидеть это используйте метод
Отладка(1)


Нет, не совсем так. Точка стоит потому, что там еще пишется имя базы, из которой выбирается таблица.

Если имя базы и .dbo. не указывать, то ошибка возникает независимо от наличия или отсутствия типизации результатов работы запроса. Если же писать dbname.dbo.$Документ.Реализация, то метапарсер конвертирует его в dbname.dbo.dh1234, и селект без типизации проходит успешно. Если же пытаться типизировать результат, то выскакивает ошибка, описанная выше.

Кстати, в случае ошибки при парсинге запроса метод Обработчик.Отладка(1) рушится с той же ошибкой Улыбка
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #16 - 26. Февраля 2010 :: 14:02
Печать  
Z1 писал(а) 26. Февраля 2010 :: 13:25:
Я совсем запутался я думал что тебе нужен общий результат на множестве баз ( ну типа сумма всех приходных накладных за период или что то такое )
я сейчас я понимаю что не понимаю зачем тебе нужен общий запрос

Так что лучше еще раз сформулируй задачу в человеческих терминах.

ОК, давай попробую. Есть 8 баз, из которых 6 имеют одинаковую структуру и две сильно переделаны. Мне нужно из всех имеющихся баз выгрузить различные документы и справочники, на которые эти документы ссылаются. Выгрузка происходит в текстовые файлы, которые потом загружаются уже в нашу базу на SQL-сервере и нужным образом обрабатываются для собственного ERP-приложения.

Вопрос, который мы сейчас обсуждаем, относится исключительно к процессу автоматизации выгрузки данных сходного вида из разных баз. Например, в одной из "кривых" баз есть тип документа Документ.РеализацияТары, которого нет в других базах. А, например, тип УслугиСтороннихОрганизаций есть в 6 одинаковых базах, но отсутствует в "кривых" базах. У меня есть процедура, которая в зависимости от передаваемых параметров (включая вид документа) выгружает в текстовый файл указанный тип документа с указанными полями. Для всех документов сходного типа (например, расходные накладные, предоставляемые услуги, поступление товаров) текстовый файл общий. В процессе выгрузки получаемые ID-номера (например, ID самого документа или ID контрагента, к которому относится документ) типизируются с использованием соответствующих таблиц, чем достигается уникальность этих номеров (например, ID-номера номенклатуры и материалов в 1С повторяются, а с указанием таблицы - нет).

Задача, которую я хочу решить, заключается в том, чтобы не дергать каждую базу для проведения выгрузки, а подключиться к одной базе и через нее вытащить данные сразу из всех баз. Останавливает меня неумение правильно типизировать ID-номер документа, тип которого отсутствует в текущей базе. Я думал, что при подключении MD-файла к рекордсету вся типизация будет автоматически производиться с его использованием. Однако, пока у меня получается только получить правильное имя таблицы, из которой выбираются данные, а вот аналогичный текст в типизации результатов (например, ID as [Документ $Документ.Реализация]) не обрабатывается парсером. Как-то так...
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #17 - 26. Февраля 2010 :: 14:04
Печать  
mistyx писал(а) 26. Февраля 2010 :: 13:23:
slawa писал(а) 26. Февраля 2010 :: 13:06:
Попытаюсь промедитировать Улыбка
Все-таки ты хочешь синхронизировать базы одинаковой структуры, но с разными IDшниками объектов.
Такие могли получиться если при загрузке изменений в конфигурацию использовалась операция "Объединение баз", а не "Загрузка измененной базы"

Так ?

Тогда 1cpp.dll, в текущей реализации, тебе не поможет. ИМХО
Тебе придется самому сопоставлять разные ID, для одинаковых (по наименованию) объектов.

Правильно медитируешь, можешь записываться в телепаты Улыбка

Базы делал не я, делали их не для меня, однако возиться сейчас приходится с ними именно мне.

Собственно, последние несколько часов я домогаюсь тебя и Z1 на тему упрощения моей работы - чтобы можно было запускать одну обработку в одной базе, которая сама подключится ко всем остальным базам и все сделает.

Может быть, есть альтернативные, более простые варианты автоматизации обработки нескольких баз, различных по структуре? Опять-таки, ссылки на ФАК вполне привествуются Улыбка


Может помогут такие функции:
Код
Выбрать все
ИДОбъекта = RS.мд.ИДДокумента(...)
или
ИДОбъекта = RS.мд.ИДСправочника(...);
и т.д.
 



но тут прошу обратить внимание на ошибку в 1cpp.dll (баг № 3560)
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #18 - 26. Февраля 2010 :: 14:21
Печать  
mistyx писал(а) 26. Февраля 2010 :: 14:02:
... Однако, пока у меня получается только получить правильное имя таблицы, из которой выбираются данные, а вот аналогичный текст в типизации результатов (например, ID as [Документ $Документ.Реализация]) не обрабатывается парсером. Как-то так...

Потому, что имя внешней таблицы получается с помощью парсера настроенного на внешнюю базу.
А получить хочешь тип документа локальной базы, используя парсер настроенный на, туже, внешнюю базу.

не катит Улыбка
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #19 - 26. Февраля 2010 :: 14:25
Печать  
Хочу обратить внимание на то, что текущая база ни как не связана с базой подключенной с помощью метода ПрисоединитьИБ().
т.е. 1cpp.dll такой связи не поддерживает.
Это абсолютно разные базы (с точки зрения 1С++)
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #20 - 26. Февраля 2010 :: 14:58
Печать  
slawa писал(а) 26. Февраля 2010 :: 14:21:
mistyx писал(а) 26. Февраля 2010 :: 14:02:
... Однако, пока у меня получается только получить правильное имя таблицы, из которой выбираются данные, а вот аналогичный текст в типизации результатов (например, ID as [Документ $Документ.Реализация]) не обрабатывается парсером. Как-то так...

Потому, что имя внешней таблицы получается с помощью парсера настроенного на внешнюю базу.
А получить хочешь тип документа локальной базы, используя парсер настроенный на, туже, внешнюю базу.

не катит Улыбка

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #21 - 27. Февраля 2010 :: 05:54
Печать  
Из №16 я понял что Вам не нужен единый запрос к нескольким базам.
Т.е. каждую базу Вы обрабатываете последовательно и все деййствия записываете в один или несколько файлов.

Так сделайте в каждой базе запросы через метапарсер.После этого
прогоните либо через отладка(1) либо через ОбрМетаСКЛ чистый sql
( в этом чистом sql должны быть полными с именем базы и владельцем). сохраните эти сценарии в файл ( один файл на одну базу ) и после выполняйте запросы из этих файлов
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #22 - 02. Марта 2010 :: 21:54
Печать  
Доброго времени суток. у меня схожая но несколько другая задача

Задача такая

есть 7 баз данных на основе ТиС (6 скульных и одна - dbf). размеры от 500 Мб до 10 Гб. Во всех базах делаются одни и те же отчёты (продажи, долги и т.п.). базы чуть отличаются по структуре.

надо получить консолидированные данные из всех баз или из конкретной базы.

для реализации думаю создать ещё одну базу и в неё тянуть данные из необходимой (необходимых) баз. По ольке можно но чего то мне не понравился единственный мой опыт - плохо летает - дымит. вопрос - можно ли для этого заюзать 1С++ и её вкусности? буду благодарен за примеры или пинки в нужном направлении. Если не сложно - и за алгоритм тоже буду благодарен
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #23 - 03. Марта 2010 :: 06:04
Печать  
Стрелок писал(а) 02. Марта 2010 :: 21:54:
Доброго времени суток. у меня схожая но несколько другая задача

Задача такая

есть 7 баз данных на основе ТиС (6 скульных и одна - dbf). размеры от 500 Мб до 10 Гб. Во всех базах делаются одни и те же отчёты (продажи, долги и т.п.). базы чуть отличаются по структуре.

надо получить консолидированные данные из всех баз или из конкретной базы.

для реализации думаю создать ещё одну базу и в неё тянуть данные из необходимой (необходимых) баз. По ольке можно но чего то мне не понравился единственный мой опыт - плохо летает - дымит. вопрос - можно ли для этого заюзать 1С++ и её вкусности? буду благодарен за примеры или пинки в нужном направлении. Если не сложно - и за алгоритм тоже буду благодарен


Два способа
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )
2. Есть ТЗ сначала она пустая формируем запрос к каждой базе
и дописываем результат ( без затирания ) в эту ТЗ. Наверное можно и dbf сделать в этом варианте сам так ни разу не делал.

Если нужен скажем результат отгрузок в разрезе клиентов по всем базам то должна быть стыковочная таблица по Клиентам

Табл
ID_glob,ИмяКл, база1, ID_в_базе1
ID_glob,ИмяКл, база2, ID_в_базе2
...
ID_glob,ИмяКл, базаn, ID_в_базеn
Для клиентов в принципе в качестве ключа может подойти  ИНН-КПП

Аналогично стыковочные таблицы нужны и по товарам и
по всем разрезам по каким делается отчетность.
Также что достаточно сложная задача эти таблицы надо поддерживать в актуальном состоянии.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #24 - 03. Марта 2010 :: 06:15
Печать  
Цитата:
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )

ну почему же - можно использовать linked servers
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #25 - 03. Марта 2010 :: 06:19
Печать  
leshik писал(а) 03. Марта 2010 :: 06:15:
Цитата:
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )

ну почему же - можно использовать linked servers

я даже и не подозревал что такое возможно.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #26 - 03. Марта 2010 :: 06:56
Печать  
Z1 писал(а) 03. Марта 2010 :: 06:19:
leshik писал(а) 03. Марта 2010 :: 06:15:
Цитата:
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )

ну почему же - можно использовать linked servers

я даже и не подозревал что такое возможно.

http://social.technet.microsoft.com/Forums/ru-RU/sqlru/thread/043f7101-4c7b-4ccb...
  
Наверх
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #27 - 03. Марта 2010 :: 15:22
Печать  
наверное надо уточнить

перетащить единственную базу dbf на скуль - дело полу часа - это не проблема. по стыковочной таблице есть мысли (есть несколько разработок по обмену данными и соответственно синхронизации справочников). дело за малым - мне бы хоть куски кода запроса глянуть одним глазком.....

и ещё что значит "формируем запрос к каждой базе"? это в каждой базе формировать запрос и потом выгружать во внешнюю ТЗ? или я чего то не понял. мне в общем то и не надо одним запросом сразу все базы обработать. товарные группы совершенно разные а складывать апельсины с крокодилами меня ещё в школе отучили. но должно быть (грубо говоря) 7 ТЗ которые отражают продажи (вместо сложных типов данных - простые - строки), 7 ТЗ с дебиторкой ну и т.д. а уж обработать их я соображу как
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #28 - 03. Марта 2010 :: 15:39
Печать  
Автор, Вам говорят что можно построить 1 запрос в как в пределах одного SQL сервера и разных баз, так и с использованием linked servers к каталогу DBF.
То есть перетаскивать что-то из DBF в SQL не требуется. - надо просто создать linked server и обращаться к нему в контексте одного запроса.
  
Наверх
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #29 - 03. Марта 2010 :: 17:08
Печать  
а по нику нельзя было написать? чтобы не гадать кому адресовано?

когда я написал что "перевести базу на скуль - не проблема" я имел в виду что то что одна база формата dbf - не проблема.

добавлю - скуль стоит 2003

поставлю вопрос ребром - как из одной базы сделать запрос к данным другой базы данных. всё. остальное - сам додумаю. потому как в дебри типа "linked server" сейчас лезть не буду - есть болие приоритетные вопросы по теме
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #30 - 04. Марта 2010 :: 21:58
Печать  
Стрелок писал(а) 03. Марта 2010 :: 17:08:
...
добавлю - скуль стоит 2003

поставлю вопрос ребром - как из одной базы сделать запрос к данным другой базы данных. всё. остальное - сам додумаю.
...

как вариант
Код
Выбрать все
--use master
SELECT     *
FROM         pubs.dbo.sales
 

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