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

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

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

Могу только посоветовать (если всё же будете пилить это ТЗ) - не заморачиваться с типами и записывать данные из WORD исключительно как текст. И так же выкладывать на сайт. И если вас ткнут носом в "неправильный вид даты/десятичной точки" - смело демонстрируете, что у вас всё WYSIWYG
...
Рейтинг: 0 / 0
11.11.2012, 08:28
    #38033453
ram
ram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Word в SQL
Ну вот что получилось у меня:
Код: 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
11.11.2012, 10:37
    #38033474
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Word в SQL
ramсоединение с базой открывается и закрывается на каждой строке таблицы
ну так и что мешает вынести conn.Open и сonn.Close за пределы цикла, чтобы этого не происходило?
...
Рейтинг: 0 / 0
11.11.2012, 11:00
    #38033484
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Word в SQL
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
11.11.2012, 11:24
    #38033498
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Word в SQL
Не факт, что производительность сильно улучшится, надо замерять.
...
Рейтинг: 0 / 0
11.11.2012, 11:45
    #38033507
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Word в SQL
Shocker.ProНе факт, что производительность сильно улучшится, надо замерять.
не спорю,
тут много какие факторы могут играть роль ... (та же удалённость сервера/"толщина" канала)

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

update

insert

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

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


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