Имя: Пароль:
1C
1С v8
ADODB: Выборка из двух файлов DBF
0 lizergin
 
11.09.11
17:13
//подключаюсь к АДО так
//путь - каталог где лежат дбф
Функция ПодключениеAdo(Путь) Экспорт
   
   ado = Новый COMОбъект("ADODB.Connection");
   Попытка
           ado.Open("Provider=Microsoft.Jet.OLEDB.4.0;" +
           "Data Source=" + Путь + ";" +
           "Extended Properties=""DBASE IV;"";");
   Возврат ado;
   Исключение
       Сообщить("Неверно указан каталог файлов. Проверьте настройки.");
       Возврат Неопределено;
   КонецПопытки;
   
КонецФункции

//затем вот так получаю записи
Процедура ЗагрузитьФайл()
   
   ado = ПодключениеAdo(ФайлыОБД);
   dbf = Новый COMОбъект("ADODB.Recordset");
   ТекстЗапроса = "Select * From [" + ИмяФайла + "] where STATUS like 'НЕОБР'";

   dbf.Open(ТекстЗапроса, ado, 3, 3);
КонецПроцедуры


Как модифицировать ТекстЗапроса, чтобы выбрать записи сразу из двух файлов?
1 gr13
 
11.09.11
17:15
a dlja chego nugen From [" + ИмяФайла + "] ?
2 lizergin
 
11.09.11
17:28
в функции подключениекado() переменная ПУТЬ -это КАТАЛОГ где лежат файлы, а не какой-то конкретный файл.  From [" + ИмяФайла + "] - выбрать записи конкретного файла из каталога ПУТЬ
3 r-d-v2008
 
11.09.11
17:33
ТекстЗапроса = "Select * From [" + ИмяФайла, ИмяФайла1 + "] where STATUS like 'НЕОБР'"; Не оно? Я правда точно уже не помню
4 Jaap Vduul
 
11.09.11
17:46
Каталог, где лежат файлы - это в данном случае "база данных".
Вот и пишешь запрос в контексте этой базы данных:
select * from dh150 inner join dt150 on dh150.iddoc = dt150.iddoc
5 lizergin
 
12.09.11
10:50
через UNION получилось.
спасибо!
6 lizergin
 
12.09.11
11:53
блин, рано радовался. выборка получилась, но записи теперь недоступны для обновления. Делаю так:


dbf = Новый COMОбъект("ADODB.Recordset");
   
   ТекстЗапроса = "Select * From [" + СтрЗаменить(ФайлДт.Имя, ",", "#") + "] where STATUS like 'НЕОБР' "
   + "UNION Select * From [" + СтрЗаменить(ФайлКт.Имя, ",", "#") + "] where STATUS like 'НЕОБР'";
   
   dbf.Open(ТекстЗапроса, ado, 2, 3);
   
   ПрочитатьЗапись();


/////////
Потом, когда пытаюсь записать, ругается вот так:

Произошла исключительная ситуация (Microsoft JET Database Engine): Обновление невозможно. База данных или объект доступны только для чтения.
7 lizergin
 
12.09.11
12:52
понял, что когда ЮНИОН, тогда создается как бы виртуальная таблица, и рекордсет бежит уже по ней. Если обновить записи методом Set, то видно их будет только при следующем получении данных запросом (а пользователь перемещается по таблице кнопками вперед-назад). наверное надо мозги не жарить, а открывать второй файл когда юзер достигает последней записи первого
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший