|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Есть два xls файла. В каждом (как ни странно) есть таблица. Первый файл - это прайс-лист вида: [номер товара] - [цена] Второй файл - факт наличия вида: [номер товара] - [остаток] Задача простейшая: во второй файл переместить свежие цены. Эта задача решена и работает. Всё было хорошо, пока менеджеры не вошли во вкус и не стали гонять прайсы по 8000-10000 наименований. Сейчас скрипт берет номер товара из файла-остатков, ищет полным перебором совпадение номера в файле-прайсе и при совпадении переносит цену. Посовейтуйте что-нибудь. А то у меня мысли уже остановились... Требуется оптимизация скрипта: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:14 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
может коллекции? мысли вслух... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:27 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
метод Find не пытался использовать ? поиск значения в Range ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:31 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
michael Rметод Find не пытался использовать ? поиск значения в Range о! сдвинулись с мертвой точки. Вам спасибо! пока я переписываю - еще подкиньте идей плз. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:57 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
rashman, Надо отсортировать обе таблицы по полю "номер товара" После этого сделать один проход, перемещая цены. Сортировку сделать стандартными возможностями эксель - это быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:06 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
rashman забыл добавить поиск делай по полному совпадению текста есть такая константа в методе Find ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:11 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Есть еще вариант - сделать SQL-запросом. Это будет эффективно и эффектно. Вот у AndreTM рука набита... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:15 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Shocker.Pro а как SQL запрос в Excel-e сделать? c SQL знаком ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:18 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
michael RShocker.Pro а как SQL запрос в Excel-e сделать? c SQL знаком открыть через ADO ща поищу пример, недавно тут был ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:18 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Shocker.Proоткрыть через ADO ща поищу пример, недавно тут был вот 9847080 надо просто на UPDATE элементарный запрос сделать с JOIN-ом ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:22 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Результат превзошел мои ожидания! Раньше на обработку 8000 позиций уходило 10 с лишним минут и более (в зависимости от размера прайса). Сейчас выполнилось за ~20 секунд! ОГРОМНЕЙШЕЕ СПАСИБО! Shocker.Pro, Вам спасибо за комменты. Сортировку таблиц делал. С SQL-запросами знаком. ADO - одна из моих любимых библиотек ;) Но для этой задачи хочется чего-то попроще и побыстрее. На данном этапе меня вполне удовлетворил Find :) Но всё равно - Спасибо за идеи! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:42 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Shocker.Pro а прикольненько SQL в Excel-е использовать надо эту идею Эндрю кинуть с его массивами там и group by + count можно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:44 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
rashman, выложите плз, Ваши таблички, - хочу одну идею проверить. Возможно будет быстрее работать, чем с .Find ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:57 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Берите ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 19:03 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
rashman, мало похоже на прайс Хотел сравнить, будет ли ADO отрабатывать быстрее, чем экселевский .Find, - видно не судьба :( Может Вы сравните на реальных данных? Процеду вставить в модуль книги-приемника, подправить константы, чтобы соответствовали действительности. Код писался в предположении, что пр.xls - прайс-лист, 38.xls - "факт наличия". Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 22:56 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
> Автор: rashman А ВПР уже не канает? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 00:30 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
хм очень долгий update получается через SQL интересно а какие то индексы или ключи можно засобачить на такую таблицу ? чисто из интереса спрашиваю ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 00:42 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
michael R, если не затруднит, приведиты цифры (кол-во записей в исходной и обновляемой таблицах, ЦПУ, оператива). У меня на примере ТС - менее 4c (Pentium Dual-Core T2370 @1.73 GHz, 2 GB DDR2-667 SDRAM) michael R... интересно а какие то индексы или ключи можно засобачить на такую таблицу ? ...нет, к сожалению(?) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 01:10 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
пробуй камнем ну в принципе записей не много 6 тыс на 8 тысяч SELECT быстрый а Update медленный я смотрю идея плохая если нужна скорость лучше стандартными средствами ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 09:46 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
michael R, полуОФФ: согласен, в данном случае "стандартные" методы лучше. Заметил ещё баг - при многократном выполнении моего кода на одних и тех-же данных увеличивается время выполнения апдейта и занимаемая Excel-ем память. Много думал(с) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 09:55 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
пробуй камнем так маленький вопрос а как в SQL запросе EXCEL-а получить числовое значение в подзапросе Select cast(F1 as int) NEWVAL не срабатывает ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 09:55 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
michael R, принудительно никак, - Jet сканирует первые N записей источника и самостоятельно определяет тип даных. Можно извращаться с функциями приведения типов Код: plaintext
ЗЫ: профи, поправьте, если не прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 10:02 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
Я выложил реальные файлы, присланные из отдела продаж. 38 - факт наличия на точках. пр - это прайс. Только сейчас обратил внимание, что там цен нет :) Но это не влияет на выполнение задачи. Можно брать любую колонку для теста. Игорь Горбонос> Автор: rashman А ВПР уже не канает? Что такое есть ВПР? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 10:10 |
|
Оптимизация кода переноса данных между таблицами
|
|||
---|---|---|---|
#18+
rashman, встроенная функция ВПР Ищет значение в крайнем левом столбце таблицы и возвращает значение в той же строке из указанного столбца таблицы. Функция ВПР используется вместо функции ГПР, когда сравниваемые значения расположены в столбце слева от искомых данных. Буква «В» в имени функции ВПР означает «вертикальный». Синтаксис ВПР(искомое_значение;таблица ;номер_столбца ;интервальный_просмотр) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 10:15 |
|
|
start [/forum/topic.php?fid=60&msg=37016674&tid=2159144]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 156ms |
0 / 0 |