gifts2017

Получение данных из Access

Опубликовал Дмитрий Воробьев (vde69) в раздел Программирование - Практика программирования

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

	Команда = СоздатьОбъект("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(СтрокаПод);
Исключение
	Сообщить(ОписаниеОшибки());
	Возврат;
КонецПопытки;

//
// получем таблицу с именем "Номенклатура"
//
ТабСпр = ПолучитьТаблицуАкцесса (Акцесс, """Номенклатура""");



См. также

Подписаться Добавить вознаграждение

Комментарии

1. europro (europro) 21.11.08 23:00
еще бы комментарий к каждому функциональному блоку
2. Дмитрий Воробьев (vde69) 21.11.08 23:26
чуток закоментил, но вроде и так все прозрачно
3. GSoft. (GSoft) 21.11.08 23:40
сделай комментарий более подробным
исходи из того что ее смотрят первоклассники)))
4. MagIvan (RailMen) 14.12.08 00:48
люблю когда код в студии
5. Vladimir Vladimir (greenzmo1) 07.08.09 12:07
А есть нечто похожее для 8-ки?
6. Дмитрий Воробьев (vde69) 07.08.09 13:01
(5) заменить "СоздатьОбъект" и учеть возврат булева "Пока не НаборЗаписей.EOF() Цикл"

и будет работать
Kolyasik; Jivchic; +2 Ответить
7. Arcanist (Arcanist) 21.09.09 16:14
СтрокаТаблици, СтрокаПод - офигенные названия переменных...
8. Дмитрий Фролов (Jivchic) 14.07.10 09:59
заменить "СоздатьОбъект" и учеть возврат булева "Пока не НаборЗаписей.EOF() Цикл"


можно подробнее, СоздатьОбъект заменил на Новый COMОбъект("ADODB. ")...

но что то неполучается...
9. Дмитрий Фролов (Jivchic) 15.07.10 10:57
10. Михаил Козлевич (FindSS) 27.09.10 20:29
Вышеприведенный код вполне ясен. Проблема в том, что не могу найти как получить программно все наименования таблиц в базе Акцесса.
11. genadyichnew genadyichnew (genadyichnew) 21.01.12 14:29
12. Андрей К. (andrei.k) 10.06.12 13:56
Спасибо, все понятно. Очень пригодится. Присоединяюсь к (10), не плохо бы получить список всех таблиц.
13. Константин Рыбаков (pyrkin_vanya) 08.02.16 12:53
У меня в файле несколько таблиц. Как получить имени этих таблиц?
15. Константин Рыбаков (pyrkin_vanya) 08.02.16 20:42
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа