Имя: Пароль:
1C
1С v8
Как можно прочитать файл mdb (MS Access)?
0 YauheniL
 
07.12.09
23:18
Столкнулся с необходимостью читать данные из Аксесс. Можно ли такое сделать в 1С? Киньте парой строчек примера, плиз
1 Rie
 
07.12.09
23:18
(0) Можно. Через ADO.
2 shuhard
 
07.12.09
23:19
(0) MyCon = Новый COMОбъект ("ADODB.Connection");
           MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\1c_common\Реальный_сектор\TEL_BASE2006.MDB");
           MyRst = Новый COMОбъект ("ADODB.Recordset");
           MyStr = "select * from zdania where NOM_REG_VI=1 and id_predpr=1 and id_ik=1 and id_zdan=1";
           MyRst.Open (MyStr, MyCon, 2, 3);//adOpenDynamic, adLockOptimistic
           Сообщить("До->"+Строка(MyRst.Fields("Resultat").Value));
           MyRst.Fields("Resultat").Value="Киргуду"; // Присвоение
           MyRst.Update(); //Запись
           Сообщить("После->"+Строка(MyRst.Fields("Resultat").Value));
           MyRst.Close();
           MyCon.Close();
3 YauheniL
 
07.12.09
23:20
(2) Нужно ли иметь Acess на компе? Или достаточно драйвера ODBC?
4 vde69
 
07.12.09
23:22
http://infostart.ru/public/57426/

//
// Функция получает таблицу из базы аксесса
//
Функция ПолучитьТаблицуАкцесса (Подключение, ИмяТаблици)
   Результат = СоздатьОбъект("ТаблицаЗначений");
   Результат.Очистить();

   Команда = СоздатьОбъект("ADODB.Command");
   Команда.ActiveConnection=Подключение;
   ТекстСелект = "SELECT * FROM " +  ИмяТаблици;
   НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");
   Команда.CommandText=ТекстСелект;
   Попытка
       НаборЗаписей=Команда.Execute();
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат -1;
   КонецПопытки;
   
   // надо создать колонки
   Для е = 0 по (НаборЗаписей.Fields.Count - 1) Цикл
       Результат.НоваяКолонка(СокрЛП(НаборЗаписей.Fields(е).Name));
   КонецЦикла;
   
   Попытка
       НаборЗаписей.MoveFirst();
   Исключение //нет записей в рекордсете
       НаборЗаписей.Close();
       Возврат Результат;
   КонецПопытки;
   
   НаборЗаписей.MoveFirst();
   Пока НаборЗаписей.EOF() = 0 Цикл
       // тут имеем строку записи
       //ОбработкаПрерыванияПользователя();  
       Состояние("Идет чтение таблицы <" + ИмяТаблици + "> - " + Обмен_Индикатор(Счетчик, МаксСчетчик));

       Результат.НоваяСтрока();
       Стр = "";
       Для е = 0 по (НаборЗаписей.Fields.Count - 1) Цикл
           Результат.УстановитьЗначение(Результат.КоличествоСтрок(), СокрЛП(НаборЗаписей.Fields(е).Name), НаборЗаписей.Fields(е).Value);
           Если ВыводитьДанныеВСтрокуСообщений=1 Тогда
               Стр = Стр + "; " + НаборЗаписей.Fields(е).Name + "=" + НаборЗаписей.Fields(е).Value;
           КонецЕсли;
       КонецЦикла;
       
       Если ВыводитьДанныеВСтрокуСообщений=1 Тогда
           Сообщить (Стр);
       КонецЕсли;
               
       НаборЗаписей.MoveNext();
   КонецЦикла;
           
   НаборЗаписей.Close();
   
   Возврат Результат;
КонецФункции

// *******************************
// пример вызова
//


//
// подключаемся
//
СтрокаПод="Driver={Microsoft Access Driver (*.mdb)};Dbq=" + ИмяФайла + ";";
Акцесс = СоздатьОбъект("ADODB.CONNECTION");
Попытка
   Акцесс.Open(СтрокаПод);
Исключение
   Сообщить(ОписаниеОшибки());
   Возврат;
КонецПопытки;

//
// получем таблицу с именем "Номенклатура"
//
ТабСпр = ПолучитьТаблицуАкцесса (Акцесс, """Номенклатура""");
5 shuhard
 
07.12.09
23:22
(3) не путай ODBC и OLEDB
Access не обязательно
6 shuhard
 
07.12.09
23:23
(4) код часом не от 7.7 ?
7 vde69
 
07.12.09
23:24
(6) 7.7 а какая разница? переделка 2-3 минуты
8 YauheniL
 
07.12.09
23:25
Спасибо, буду лопатить
9 shuhard
 
07.12.09
23:26
(8) лапать, MDAC свежий не забудь
10 YauheniL
 
07.12.09
23:27
(9) MDAC -- was ist das?
11 shuhard
 
07.12.09
23:28
(10) das ist wunderschone SDK
12 YauheniL
 
07.12.09
23:29
(11) Без SDK не взлетит?
13 vde69
 
07.12.09
23:31
(12) в нем драйвера, для аксесса можно установить DAO 3.5 (3.6)
14 shuhard
 
07.12.09
23:33
(12) MDAC качается и ставиться автономно,если в лом ставить офис.
можешь последовать совету vde и юзать DAO
15 vde69
 
07.12.09
23:39
(14) DAO - маленький, примерно 500к, а мкдак - здоровенный :)

можно просто чисто драйвер аксесовский юзать, а можно вообще универсальным драйвером АДО (там вообще ничего доставлять не надо)...
16 shuhard
 
07.12.09
23:57
(15)[DAO - маленький, примерно 500к]
это так, но многое, что есть в ADOX, через DAO делается "сложнее" через  TableDef
17 YauheniL
 
15.12.09
09:31
Не совсем по теме, но очень близко: как мне посмотреть в MS Access ключи таблиц и связи между ними? Спрашиваю, т.к. это мой первый опыт с MS Access
18 YauheniL
 
15.12.09
18:34
^
19 Живой Ископаемый
 
15.12.09
18:39
2(17) только если в файле нарисована схема...
20 YauheniL
 
15.12.09
18:41
(19) А ключи же должны храниться? Схемка-то Бог с ней -- сам накидаю. Мне бы в связи таблиц разобраться
21 Joint
 
15.12.09
18:44
так ключи это поля, сервис - схема данных
22 los_hooliganos
 
15.12.09
18:51
(21) нет, ключи это индексы.
кто прав?)))
23 shuhard
 
15.12.09
18:51
(21)[нет, ключи это индексы]
ты про внешние или про внутренние ?
24 Joint
 
15.12.09
18:52
25 los_hooliganos
 
15.12.09
18:52
(23) допустим внутренний праймари.
26 Joint
 
15.12.09
18:53
да пофигу, поля они и есть поля, хоть задницей назови
27 shuhard
 
15.12.09
18:53
(25) [допустим внутренний праймари]
а челу нужно внешние
28 los_hooliganos
 
15.12.09
19:00
(27) а... ну тогда понятно.
29 Joint
 
15.12.09
19:02
http://alibek09.narod.ru/vb/articles/dba/

Коллекция Relations определяет отношения между объектами БД
30 YauheniL
 
15.12.09
21:05
Спасибо, добрые люди
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс