powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сохранение данных Excel в базу MSSQL
4 сообщений из 4, страница 1 из 1
Сохранение данных Excel в базу MSSQL
    #38062377
kain111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача:
Организовать ввод данных пользователем в шаблон с сохранением в базу данных. Структура данных в виде экселевского отчета подаваемого начальству, в частности несколько табличек на одном листе. Данные с производства, изменение визуальное шаблона не желательно. Данные заполняются в такой форме каждый день. Необходимо организовать возможность редактирования задним числом загружая данные из базы.
Решение:
Структура можно сказать не систематизируема, поэтому планирую сделать мапинг на техническом листе когда, каждое значение человек указывает формулой на новой строке. получая такой поток равный колличеству необходимых к сохранению данных.
Макросом сделать получение по формуле адреса на рабочем листе и вставка в следующий столбец+ пронумеровать строки.
Далее планируется заполнение столбцов "координат" названия типа X1 Y1 X2 Y2 X3 Y3 X4 Y4 где X1 это описание столбца по оси X например "ГАЗ" Y например "цех № 3" Эти доп. настройки нужны только в случае получения по базе дальнейшей отчетности.
Макросом сделать обновление такого справочника. прямо в таком виде без цифровых значений попадающий в табличку имеющей дополнительно идентификатор шаблона и ключ. Вид таблички [id] [source] [x] [y] [x1text] [y1test] [x2text] [y2test] [x3text] [y3test] [x4text] [y4test]
Далее кнопка "Сохранить" по которой в другую таблицу базы будет сохранены данные с форматом полей [ID] [Date] [Type] [Value]. Данные будут браться с технического листа по формуле соединяясь со справочником
Далее в определенном поле будет выбираться дата. По кнопке загрузить будет вставка в данных по координатам полученным по формуле в 1м столбце.

Мне кажется такую систему собранную на коленках можно будет потом адаптировать под любой шаблон изменя мапинг. Знание SQL у меня есть и структуру таблиц и процедур я напишу.
Вопросы. Есть ли подобные решения или наработки. Было бы интересно взглянуть. Может уже есть готовый шаблон. Дальше задам вопросы к сообществу по реализации. В свою очередь обещая выложить результат сюда.
...
Рейтинг: 0 / 0
Сохранение данных Excel в базу MSSQL
    #38062493
kain111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопросы.
Планирую через ADO подключаться к жестко прописанному серверу БД типа
Код: vbnet
1.
 Dim cn As ADODB.Connection

Знаю про вариант полегче. когда зафиксировать место файла и сделать линк или же чере Microsoft.Jet.OLEDB.4.0 напрямую обратиться к книге поместив весь код в процедуры. но хотелось бы обеспечить большую автономность и данные передавать в конект.
1) Есть ли возможность при вызове процедуры средствами
Код: vbnet
1.
2.
3.
Set cmd = New ADODB.Command
    cmd.ActiveConnection = cn
    cmd.CommandType = adCmdStoredProc


передавать не единичное значение, а к примеру массив или временную таблицу. или же придется в цикле для каждой строчки вызывать процедуру? или может лучше динамический SQL сформировать ?
2) Для пользования ADODB.Connection. нужны ли какие ни будь драйвера ? или все есть в наборе офиса ?
...
Рейтинг: 0 / 0
Сохранение данных Excel в базу MSSQL
    #38064366
kain111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю задаваться вопросами. Сделал процедуру запускаемую с передаваемыми параметрами, 135 записей и соответственно запусков и переназначения 8ми параметров отрабатывают около 25 секунд.
1) На что в основном тратится время в этой простейшей операции ? вот код
Код: vbnet
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.
last_row = Cells(65536, 1).End(xlUp).Row 
    
    Dim cn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rsRetValue As ADODB.Recordset
    Dim param As Parameter
    Set cn = New ADODB.Connection
    Set cmd = New ADODB.Command
    
    On Error GoTo CnErrorHandler
    cn.Open "Driver={SQL Server};Server={10.1.3.155};Database=DataStoreExcel;User ID=login;Password=pass;"

    cmd.ActiveConnection = cn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "types_source_reload"
    cmd.Parameters.Refresh
    
    For j = 1 To last_row
    
    cmd.Parameters(1) = 0 
    cmd.Parameters(2) = ThisWorkbook.Worksheets("tech").Cells(j, 3)
    cmd.Parameters(5) = ThisWorkbook.Worksheets("tech").Cells(j, 5)
    cmd.Parameters(6) = ThisWorkbook.Worksheets("tech").Cells(j, 6)
    cmd.Parameters(7) = ThisWorkbook.Worksheets("tech").Cells(j, 7)
    cmd.Parameters(8) = ThisWorkbook.Worksheets("tech").Cells(j, 8)
    cmd.Parameters(9) = ThisWorkbook.Worksheets("tech").Cells(j, 9)
    cmd.Parameters(10) = ThisWorkbook.Worksheets("tech").Cells(j, 10)
    cmd.Parameters(11) = ThisWorkbook.Worksheets("tech").Cells(j, 11)
    cmd.Parameters(12) = ThisWorkbook.Worksheets("tech").Cells(j, 12)
    cmd.Parameters(13) = ThisWorkbook.Worksheets("tech").Cells(j, 13)
    cmd.Parameters(14) = ThisWorkbook.Worksheets("tech").Cells(j, 14)
    'Set param = cmd.CreateParameter("Return", adInteger, adParamReturnValue, , 0)
    'cmd.Parameters.Append param
    Set rsRetValue = cmd.Execute()
    Next j
    
    MsgBox ("Ok")


я конечно не включил закрытие конектов и прочие обнуления.
2) Есть ли ограничение на исполняемый запрос в виде 4000 символов переменной текст? Может лучше сгенерировать кучу insert и одним запросом отправить
...
Рейтинг: 0 / 0
Сохранение данных Excel в базу MSSQL
    #38086928
kain111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал. может кому понадобится. Пара слов
1 Скрипт создания базы данных с таблицами и процедурами в архиве
2 В файле excel настраивается мапинг, а именно с первого листа который имеет не тронутую форму, на 2й и 3й листы настраивается ссылка в 1ю строчку просто =Форумла указывающая на поле в 1м листе. Затем кнопка "Актуализировать ссылки" он в соседнее поле вставит адрес и пронумерует. Затем кнопка "Актуализировать справочник" Он в табличку справочник загонит адреса ссылкок и их номера. В макросе необходимо исправить 1) реквизиты сервера и логина, и входной параметр процедуры который по идее должен разделять разные отчеты в случае ипользования одной базы для нскольких файлов.
3 3й лист настраивается так же. За исключением что он предназначен для текстовых значений
4 Все скрывается и отдается пользователю, который на основном листе имееет 4 кнопки
-1 выбор даты
-2 загрузка из базы данных за выбранную дату
-3 обовление накопительных для вновь введенных данных
-4 сохранение данных за выбранное число в базу.

По идее если доступен сервер БД и его порт , то готовый интерфейс для доступа к данным. Из минусов почти 30с ожидание сохранение данных моих 135 строчек.
Решение корявое, не судите строго, но может кто им воспользуется. Вопросы пишите отвечу.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сохранение данных Excel в базу MSSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]