Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Ид ЭЛЕМЕНТА из другой базы (ДБФ) (число прочтений - 4407 )
novichek
Экс-Участник


Ид ЭЛЕМЕНТА из другой базы (ДБФ)
19. Мая 2008 :: 03:35
Печать  
пытаюсь так:

     БД=СоздатьОбъект("OLEDBData");
     СтрокаСоединения=Шаблон("Provider=VFPOLEDB.1; Mode=ReadWrite; Data Source=[ПутьКБазе];");
     Рез=БД.ПрисоединитьИБ(ПутьКБазе+"\",СтрокаСоединения);
     РС=БД.СоздатьКоманду();
     
     //Сообщить(рез);
     
     ЧужойМД = СоздатьОбъект("MetaDataWork");
     ЧужойМД.ПрисоединитьМД(ПутьКБазе+"\1cv7.md");

     Открыта=V7.Initialize(V7.RMTrade,"/D"+ПутьКБазе+" /N","");
     Товары = V7.CreateObject("Справочник.Товары");

     ...
     Сообщить(Товары.ТекущийЭлемент().Наименование);
     Сообщить(ЧужойМД.ЗначениеВСтрокуБД(Товары.ТекущийЭлемент());

Элемент есть, а ида нет Печаль
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #1 - 19. Мая 2008 :: 05:00
Печать  
Мне кажется дело в том, что "MetaDataWork" находится в разделе справки в группе "Прямой доступ через ODBC". Хотя странно это, ушел тестить.
  
Наверх
ICQ  
IP записан
 
novichek
Экс-Участник


Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #2 - 19. Мая 2008 :: 05:14
Печать  
Nick писал(а) 19. Мая 2008 :: 05:08:
Товары.ТекущийЭлемент() - вот такое выражение будет иметь тип OLE естествено ничего не получится


а как тогда иначе получить ид элемента другой базы?

сдается мне что чтото с метапарсером в случае подключения к другой базе DBF...

     БД=СоздатьОбъект("OLEDBData");
     Соединение = "Provider=VFPOLEDB.1;Data Source=" + ПутьКБазе+ "\;Mode=ReadWrite";
     Рез = БД.Соединение(Соединение);
     РС=БД.СоздатьКоманду();
     
     ТекстЗапроса = "
     |Select
     |      ID as ID,
     |      $спрТов.СтарыйКод as СтарыйКод -- SP15221
     |From $Справочник.Товары as спрТов -- SC302
     |";
     тз = РС.ВыполнитьИнструкцию(ТекстЗапроса);
в таком виде запрос не работает: Meta name parser error: объект не найден "$Справочник.Товары"  
Работает только если заменить на явное указание идов  Озадачен

ЗЫ: 1с++ V:2.5.0.6 от 2008-01-11
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #3 - 19. Мая 2008 :: 05:21
Печать  
А тут надо делать
Код
Выбрать все
Рез = БД.ПрисоединитьИБ(ПутьКБазе, Соединение);  

  
Наверх
ICQ  
IP записан
 
novichek
Экс-Участник


Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #4 - 19. Мая 2008 :: 05:28
Печать  
Точно! Спасибо! В таком виде запрос заработал.  Очень довольный
C MetaDataWork вопрос пока открыт...
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #5 - 19. Мая 2008 :: 05:33
Печать  
И еще вопрос, как правильно составить запрос по двум базам, чтобы метапарсер не заблудился? Улыбка
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #6 - 19. Мая 2008 :: 05:33
Печать  
Хотя бы так:
Код
Выбрать все
	спис = СоздатьОбъект("СписокЗначений");
	спис.ИзСтрокиСРазделителями(ЗначениеВСтрокуВнутр(СПр.ТекущийЭлемент()));
	ИД = спис.ПолучитьЗначение(спис.РазмерСписка(),"");
	ИД = Лев(ИД,СтрДлина(ИД)-2);
	Сообщить("'"+ИД+"'");
 

  
Наверх
ICQ  
IP записан
 
novichek
Экс-Участник


Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #7 - 19. Мая 2008 :: 06:42
Печать  
Salimbek писал(а) 19. Мая 2008 :: 05:33:
Хотя бы так:
...

Это был ответ на какой вопрос? Улыбка

1.По поводу запроса по двум базам, где-то что-то встречал, а теперь найти не могу. Ткните носом плиз...
2.Несмотря на
Код
Выбрать все
МД = СоздатьОбъект("MetaDataWork");
     МД.ПрисоединитьМД(ПутьКБазе+"\1cv7.md");
  


Преспокойно выдает идентификаторы текущей базы (ЗначениеВСтрокуБД(...)), и не выдает из присоединямой. Все таки баг?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #8 - 19. Мая 2008 :: 06:45
Печать  
Цитата:
1.По поводу запроса по двум базам, где-то что-то встречал, а теперь найти не могу. Ткните носом плиз...


Лучше сделай два запроса а данные объедини при помощи ИТ
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #9 - 19. Мая 2008 :: 07:03
Печать  
Цитата:
Это был ответ на какой вопрос? Улыбка

Это на вопрос "а как тогда иначе получить ид элемента другой базы?"
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #10 - 19. Мая 2008 :: 07:04
Печать  
kiruha писал(а) 22. Февраля 2008 :: 12:01:
10.      Могу ли я писать запрос сразу к двум базам?
Я использую OLE-соединение, но это очень медленно, что можно сделать?
http://www.1cpp.ru/forum/YaBB.pl?num=1182497837/19#19


Ну народ - читайте FAQ
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #11 - 19. Мая 2008 :: 08:21
Печать  
Если надо запросы по нескольким базам, то лучше использовать не объекты, а их представления, например "Наименование", и проблем меньше с преобразованием и MetaDataWork не надо напрягать.
Но в принципе интересно, зачем вам доступ к двум базам по разным ИД, в чем смысл задачи?
  
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #12 - 19. Мая 2008 :: 08:32
Печать  
pvase писал(а) 19. Мая 2008 :: 08:21:
Если надо запросы по нескольким базам, то лучше использовать не объекты, а их представления, например "Наименование", и проблем меньше с преобразованием и MetaDataWork не надо напрягать.
Но в принципе интересно, зачем вам доступ к двум базам по разным ИД, в чем смысл задачи?


По Id лучше всего проводить синхронизацию баз, например по справочнику Номенклатура.
В синхронизируемой базе это будет что типа реквизита IdОсновнойБазы.
Соответственно если запрос из синхронизируемой - нужен Id.
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #13 - 19. Мая 2008 :: 08:46
Печать  
pvase: в принципе kiruha уже все описал. Да, нужно синхронизировать две базы. Связаны они через ид "ведущей базы".
Кстати, kiruha, спасибо, именно эту ветку я и мел ввиду Улыбка
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ид ЭЛЕМЕНТА из другой базы (ДБФ)
Ответ #14 - 19. Мая 2008 :: 10:15
Печать  
Понятно. Я обошел это созданием view-ов в обеих базах, тогда не надо прибегать к парсеру, все имена доступны и так на русском как в метаданых.
ЗЫ
А что если 3,4 базы?
ЗЫ
Есть технолгия для таких целей, делать витрину данных, и в нее загружать необходимые данные, но тогда может быть запаздывание оперативных данных. (Загрузка через DTS если это SQL2000) ну и конечно база общая должна быть на SQL.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать