Показать сообщение отдельно
Старый 19.10.2006, 19:24   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
2 blokva: предлагаю радикально иной подход
Цитата:
Сообщение от blokva Посмотреть сообщение
Да это тупое последовательное открытие листов, пробегание по строкам, проверка на наличие такой строки в таблице Аксапты и в случае отсутствия, инсерт строки в таблицу.
Я думаю, что можно обойтись без "тупого перебора" пяти листов, а воспользоваться всей мощью нормального SQL по отношению к листам Excel и получить весь желаемый рекордсет перед загрузкой в Аксапту - сразу по всем листам и в уникально-сгруппированном виде. Правда, придется философски переосмыслить и видоизменить класс gl00mie, потому что нужно иметь возможность задания произвольной строки SQL, а в данный момент класс пока ориентирован на пробег по одному листу, имя которого подставляется в зашитый SELECT:
Код:
rstExcel.Open(@"SELECT * FROM [" + strSheetName + @"$]", 
cnnExcel, nCursorType)
а нам нужно иметь возможность придать этому оператору примерно следующий вид (для данного конкретного случая):
Код:
rstExcel.Open(@"SELECT * FROM [Лист1$] UNION " +
              @"SELECT * FROM [Лист2$] UNION " +
              @"SELECT * FROM [Лист3$] UNION " +
              @"SELECT * FROM [Лист4$] UNION " +
              @"SELECT * FROM [Лист5$] ", 
cnnExcel, nCursorType)
В общем, стратегия такая. Воплотите и будет вам хорошее счастье, думаю, существенно более быстрое, чем 790 секунд

Последний раз редактировалось Gustav; 20.10.2006 в 08:49.