|
1C и ACCESS | ☑ | ||
---|---|---|---|---|
0
mnail1979
26.04.12
✎
09:17
|
Получаю из аксеса данные таким образом:
СтрокаПодключения = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + Файл + ";"""; Connection = Новый COMОбъект("ADODB.Connection"); Попытка Connection.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandText = "SELECT * FROM SALES_RETURNS"; Command.CommandType = 1; RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = Command.Execute(); Мне нужно получить данные типа Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Как это сделать. Может вначале получить данные в менеджер ВТ, а потом оттуда запрос по группировкам делать? Но учтите, в таблице полтора миллиона строк. |
|||
1
vde69
26.04.12
✎
09:17
|
//
// Функция получает таблицу из базы аксесса // Функция ПолучитьТаблицуАкцесса (Подключение, ИмяТаблици) Результат = СоздатьОбъект("ТаблицаЗначений"); Результат.Очистить(); Команда = СоздатьОбъект("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(СтрокаПод); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; // // получем таблицу с именем "Номенклатура" // ТабСпр = ПолучитьТаблицуАкцесса (Акцесс, """Номенклатура"""); |
|||
2
mnail1979
26.04.12
✎
09:45
|
я хотел обойти промежуточную базу(таблица значений), так как записей слишком много
|
|||
3
mnail1979
26.04.12
✎
09:48
|
у меня ситуация такая.
В аксесе есть поля типа дата, контрагент, номенклатура, количество Я хочу получить эти данные, и на каждую дату создать документ "корректировка регистров". Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)очень бы помог. А так приходится делать запрос к аксесу, потом выгружать все в таблицу значений, а потом уже оттуда пытаться сделать запрос с обходом по группировкам |
|||
4
vde69
26.04.12
✎
09:49
|
(3) ну сделай запрос в цикле, итератором пусть будет дата....
|
|||
5
mnail1979
26.04.12
✎
09:50
|
можете привести пример?
|
|||
6
kotletka
26.04.12
✎
09:52
|
выбери все даты сначала тз, сверни и потом циклом вытягивай по датам
|
|||
7
vde69
26.04.12
✎
09:54
|
"SELECT * FROM SALES_RETURNS whele SALES_RETURNS.dddd = '#01/01/2000#'"
за точность синтаксиса не отвечаю :) |
|||
8
mnail1979
26.04.12
✎
09:54
|
т.е. опять таки сначала надо все загнать в таблицу значений
|
|||
9
vde69
26.04.12
✎
09:56
|
>>>т.е. опять таки сначала надо все загнать в таблицу значений
зачем? выбори только РАЗЛИЧНЫЕ даты... |
|||
10
mnail1979
26.04.12
✎
09:58
|
ааа, стоп. У меня практически на каждый день есть движения
Можно сделать так: Для дата="01.01.2010" по "01.01.2012" Цикл "SELECT * FROM SALES_RETURNS whele SALES_RETURNS.dddd = "+дата; КонецЦикла; |
|||
11
mnail1979
26.04.12
✎
09:58
|
интересно, дата будет в цикле прибавляться на один день?
|
|||
12
Маленький Вопросик
26.04.12
✎
09:58
|
(7) а запись и удаление есть?
|
|||
13
vde69
26.04.12
✎
09:59
|
(10) только про символ # не забудь (хотя может и так прокатит)
|
|||
14
mnail1979
26.04.12
✎
10:47
|
(13) а что это за символ. Для чего он?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |