Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 805

Оптимизация кода

04.07.2020, 14:07. Показов 3155. Ответов 29

Студворк — интернет-сервис помощи студентам
Доброго дня
В Excel создаю массив данных (tmp) и построчно вставляю эти данные в Access.
Можно ли как-то не построчно , а сразу массивом вставить данные в Access?
Спасибо
Visual Basic
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
Sub InsertDB()
' В редакторе VBA подключаем последнюю версию библиотеки: Microsoft ActiveX Data Objects Library
    
    Dim cn As ADODB.Connection
    Dim cmd As ADODB.Command
    
    Set cn = Nothing
    Set cn = New ADODB.Connection
    Set cmd = New ADODB.Command
        
    R = ThisWorkbook.Sheets(1).UsedRange.Rows.Count
    C = ThisWorkbook.Sheets(1).UsedRange.Columns.Count
    tmp = ThisWorkbook.Sheets(1).Range(Cells(1, 1), Cells(R, C)).Value
    
    cn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=G:\Database777.accdb;Uid=Admin;Pwd=;"
    cn.Open
    
    For i = 1 To R
    Sql = "INSERT INTO T1(AAA, BBB) VALUES("
        
        For j = 1 To C
            If j < C Then
                Sql = Sql & tmp(i, j) & ","
            Else
                Sql = Sql & tmp(i, j) & ")"
            End If
        Next j
        cmd.ActiveConnection = cn
        cmd.CommandText = Sql
        cmd.Execute Sql
    Next i
    
    cn.Close
    Set cn = Nothing
 
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2020, 14:07
Ответы с готовыми решениями:

Оптимизация кода
Всем привет! Макрос будет обрабатывать параллельный диапазон из двух столбцов n1:n4000 и nn1:nn4000. Посмотрите, пожалуйста, какой из двух...

Оптимизация кода
Доброе время господа программеры! В следствии своих скудных познаний в VBA (да и в программировании в целом) нагородил много страшного...

Оптимизация кода
Есть ли у кого будет свободная минутка - подскажите, что можно изменить, чтобы уменьшить время выполнения. В среднем время выполнения 3-5...

29
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 805
13.07.2020, 12:22  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от amd48 Посмотреть сообщение
Лучше день потерять,
Понимаю
Да, ошибка на этой строк: cmd.Execute Sql
Пробел убрал.
Путь к файлу в апострофах
Visual Basic
1
"F22, F23, F24, F25, F26, F27 FROM [Лист1$] AS x IN '" & ThisWorkbook.Path & "\tmp.xlsx' [Excel 16.0; HDR = no;];"
Источник у меня другой файл, просто в этой же папке
Visual Basic
1
IN '" & ThisWorkbook.Path & "\tmp.xlsx'
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
13.07.2020, 12:28
А. Точно. Сам что-то тупить начинаю. Это же путь не к файлу, а к папке, где он лежит.
И как в итоге? Та же проблема?
0
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 805
13.07.2020, 12:41  [ТС]
Цитата Сообщение от amd48 Посмотреть сообщение
И как в итоге?
После удаления лишнего пробела в пути к файлу - сдвигов не произошло.
Но как только заменил (не осознанно, так лишь бы попробовать) [Excel 16.0; на [Excel 12.0; почему-то заработало.
Странно это все и как-то не последовательно (для меня по крайней мере).
Спасибо
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
13.07.2020, 12:43
Цитата Сообщение от govorun Посмотреть сообщение
Получил ошибку: Невозможно найти установленный ISAM.
Попробуйте указать поставщика для 16-й версии:
Visual Basic
1
cn.Provider = "Microsoft.ACE.OLEDB.16.0"
Кроме того возможны коллизии из-за битности винды и Excel. Не исключено, что если у Вас 64-бит, то придется скачать драйвер например отсюда https://www.microsoft.com/en-u... x?id=13255
1
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
13.07.2020, 13:41
Цитата Сообщение от govorun Посмотреть сообщение
Но как только заменил на [Excel 12.0
А я же говорииииил про 12 версию
Получается, требуется указывать версию того экселя, когда этот формат только объявился. Он, наверное, остаётся неизменным до появления нового формата. Такое было с 97-ым-2003-им - ставили Excel 8.0
Как макрософак придумает новый формат xlsxxxx - тогда версия экселя даст номер формата
0
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 805
13.07.2020, 20:49  [ТС]
amd48, Загрузил всего одну таблицу 600 000 записей и 50 полей. Размер файла базы 450 MB. И это после сжатия. Это кошмар. Excel-евский файл с этой таблицей весил около 130 MB (с учетом всякой цветовой заливки колонок).
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
13.07.2020, 21:08
govorun, не думаю, чт о цвет заливки колонок играет роль для объёма. Потому что они уже изначально имеют цвет (авто). Но специальной проверки у меня не было )))))
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
14.07.2020, 06:53
"сжатие" в акцессе только удаляет пустые места, оставшиеся от удалённых объектов и записей.
поля текстовые? длиной по 255 символов?
а экселевский файл - это zip-архив, наверное. если xlsx
0
148 / 35 / 6
Регистрация: 01.11.2013
Сообщений: 805
14.07.2020, 18:28  [ТС]
Цитата Сообщение от amd48 Посмотреть сообщение
поля текстовые?
Есть штук 7 -10 текстовых (по 255), .xlsb, но будут и .xlsx
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
15.07.2020, 08:01
Смею предположить, что эти сотни мегабайт - таки ненормальзованные данные, которые в БД потом надо будет нормальзовать. Т.е. делать запросы, которые распределят данные по таблицам в БД с нормальной структурой. Т.е. это уже другая база будет. Оптимальная и лёгкая
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.07.2020, 08:01

оптимизация кода
Всем Добрый день. Никогда раньше не писал на vba, однако появилась рабочая необходимость написать макрос на объединение ячеек. Макрос...

Оптимизация кода
Здравствуйте ,имеется программа по сравнению двух столбцов на обоих страницах и после нахождения сравнения выделяет строку синим цветом,...

Оптимизация кода
Есть код для копирования листа в созданную книгу, листы копируются с системной датой. Можно ли как то уменьшить код? Sub копиялиста() ...

Сокращение, оптимизация, замена кода
Здравствуйте. Столкнулся с проблемой Compile error: Procedure too large. Помогите сократить код иди дайте другую идею для реализации...

Оптимизация кода в процедуре WorkSheetChange
Привет, люди! Помогите оптимизировать, если кто знает. Пожалуйста. Case &quot;F232&quot; If cl_Target.Value = 1 Then Call p104MN30 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru