powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Из Word в SQL
13 сообщений из 13, страница 1 из 1
Из Word в SQL
    #38026122
ram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ram
Гость
Нужна помощь. Есть такая задача, требуется периодически копировать данные их Word-документа с множеством таблиц в MS SQL базу данных. Таблицы разные по длине, некоторые размещаются на нескольких страницах, но имеют одинаковую структуру.
Но копировать данные нужно только с тех строк в которых первая ячейка не пустая и копировать из этих строк только первые два столбца и все в одну SQL-таблицу с двумя столбцами.
______________________________________
Вот ведь! ...
...
Рейтинг: 0 / 0
Из Word в SQL
    #38026124
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в чем проблема?
Анализируете таблицы, собираете данные, формируете набор... открываете коннект с SQL, формируете выборку, сводите, обновляете.

Конечно, остается вопрос, почему исходные данные находятся именно в Вордовском формате... это такой BDSM-эксгибиционизм?
...
Рейтинг: 0 / 0
Из Word в SQL
    #38026150
ram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ram
Гость
AndreTMИ в чем проблема?
Анализируете таблицы, собираете данные, формируете набор... открываете коннект с SQL, формируете выборку, сводите, обновляете.
Алгоритм такой я представляю,вот в кодах не силен. Хотелось бы примеры, которые бы я подстроил под себя.
Там наверно еще будет проблема с копированием данных из таблиц, которые на нескольких листах.

Конечно, остается вопрос, почему исходные данные находятся именно в Вордовском формате... это такой BDSM-эксгибиционизм?
Это не моя компетенция, файлы WORD делают другие специалисты, которые потом печатают, а им так удобнее. Ну а мне поставили задачу выводить все это на WEB-страницу. Если я закачаю все это в SQL, то выведу.
...
Рейтинг: 0 / 0
Из Word в SQL
    #38026279
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ram,
и что именно у вас не получается? Собрать данные из ворда в рекордсет, подсоединиться к базе, обновить таблицы?
...
Рейтинг: 0 / 0
Из Word в SQL
    #38031161
ram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ram
Гость
QValDram,
и что именно у вас не получается? Собрать данные из ворда в рекордсет, подсоединиться к базе, обновить таблицы?
Да, собрать данные из таблиц в рекордсет, с учетом того, что они могут быть на разных листах, подсоденится к базе и записать в таблицу.
...
Рейтинг: 0 / 0
Из Word в SQL
    #38031440
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну-у, батенька... Забесплатно такую задачку вам никто бацать не будет - ибо вменяемому программисту такой метод обработки только в страшном сне и приснится.

Могу только посоветовать (если всё же будете пилить это ТЗ) - не заморачиваться с типами и записывать данные из WORD исключительно как текст. И так же выкладывать на сайт. И если вас ткнут носом в "неправильный вид даты/десятичной точки" - смело демонстрируете, что у вас всё WYSIWYG
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033453
ram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ram
Гость
Ну вот что получилось у меня:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub ParseTable()
    Dim oTbl As Table
    Dim oRow As Row
    Dim sqlstr As String
    
    Dim conn As New ADODB.Connection
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=Server;database=test;uid=login;pwd=password;"

    For Each oTbl In ThisDocument.Tables
        
        For Each oRow In oTbl.Rows
            If oRow.Cells(1).Range.Text Like "*#.#*" Then

            sqlstr = "INSERT INTO table_test (kod, nam, per) VALUES ( '" & Left(oRow.Cells(1).Range.Text, Len(oRow.Cells(1).Range.Text) - 2) & "', '" & Left(oRow.Cells(2).Range.Text, Len(oRow.Cells(2).Range.Text) - 2) & "', '" & Left(oRow.Cells(3).Range.Text, Len(oRow.Cells(3).Range.Text) - 2) & "')"
            conn.Open
            conn.Execute sqlstr
            conn.Close
            
            End If
        Next
    Next oTbl
    
End Sub


Задача стояла переписать в SQL таблицу данные из трех первых колонок всех таблиц WORD-документа, только тех строк в которых в первой колонке встречается текст с "точкой". Ну типа 1.1, 1.2.3, 12.23.2 и т.д.
Программа работает, данные переписываются, но явно код не оптимальный, поскольку соединение с базой открывается и закрывается на каждой строке таблицы. Чувствую тут надо использовать DataAdapter или что-то другое. Но вот не хватает знаний.
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033474
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ramсоединение с базой открывается и закрывается на каждой строке таблицы
ну так и что мешает вынести conn.Open и сonn.Close за пределы цикла, чтобы этого не происходило?
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033484
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ram...
Программа работает, данные переписываются, но явно код не оптимальный, поскольку соединение с базой открывается и закрывается на каждой строке таблицы. Чувствую тут надо использовать DataAdapter или что-то другое. Но вот не хватает знаний.
открытие/закрытие рекордсета - нужно по-любому вынести из цикла,

но ещё правильнее будет, открыть (ДО цикла) на целевой таблице рекордсет с adLockBatchOptimistic
Код: vbnet
1.
rs.Open "select kod, nam, per from table_test where 1=0", conn, adOpenStatic, adLockBatchOptimistic


в цикле - "повставлять" в него, всё, что нужно
Код: vbnet
1.
2.
3.
4.
rs.AddNew
rs.Fields("kod") = ...
rs.Fields("nam") = ...
rs.Fields("per") = ...


и потом уже, после цикла - отправить всё на сервер
Код: vbnet
1.
2.
    
rs.UpdateBatch (adAffectAll)
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033498
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не факт, что производительность сильно улучшится, надо замерять.
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033507
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНе факт, что производительность сильно улучшится, надо замерять.
не спорю,
тут много какие факторы могут играть роль ... (та же удалённость сервера/"толщина" канала)

вот в Акцессе, Guest33 как-то даже тестил

update

insert

даже больше того - если вариант с отправкой запросов переделать на ассинхронный - то он наверняка даже "выиграет"

вариант с рекордсетом - он "идеалогически" :)) более правильный
при любой трабле (коннект пропал или нарушение целостности при вставке, например) - данные не пропадут, и можно, в таком случае, "разобратся" отдельно ...
(CursorLocation только нужно на клиентский изменить, конечно)
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033545
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - скопить insert-ы в одну переменную и потом отправить одним execut-ом
...
Рейтинг: 0 / 0
Из Word в SQL
    #38033550
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКак вариант - скопить insert-ы в одну переменную и потом отправить одним execut-омТо же самое, что UpdateBatch.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Из Word в SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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