Помогите со вставкой данных в Word
Модератор: Naeel Maqsudov
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2004, 10:42
Уважаемые помогите со вставкой данных в Word через ODBC.
Неважно откуда вставлять данные, хотя бы из Excel.
В готовую форму необходимо в нужные места вставить нужные данные
Прошу поподробней.
Заранее благодарен
Неважно откуда вставлять данные, хотя бы из Excel.
В готовую форму необходимо в нужные места вставить нужные данные
Прошу поподробней.
Заранее благодарен
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Уточните, плз, что вы подразумеваете под ODBC? Модет имеется в виду DCOM? Так как AFAIK не существует ODBC-драйвера для доступа к документу Word.
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2004, 10:42
Если честно я не специалист, просто необходимо вставлять данные из внешней базы данных в форму Word.
Подскажите пожалуйста с чего начинать и как это проще всего сделать
Подскажите пожалуйста с чего начинать и как это проще всего сделать
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2004, 10:42
Мне необжодимо конкретно вставлять данные в Word.
К данным базы данных есть доступ, необходимо именно вставить в нужные места формы Word
К данным базы данных есть доступ, необходимо именно вставить в нужные места формы Word
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Есть два пути:
1) использование так называемых ФОРМ и заполнение формы макросом:
В этом примере использовано ADO, так что надо в редакторе VBA сделать Tools/References и подключить библиотеку Microsoft ADO. Можно также использовать DAO, подключая библиотеку Microsoft DAO и исполльзуя класс DAO.Recordset. Если установлен MS Access, то в его справке по VBA можно найти исчерпывающую информацию по классам ADO и DAO с примерами программ.
2) Вместо форм использовать СЛИЯНИЕ. В слиянии участвуют БЛАНК (документ Word со специальными "полями слияния", в которые помещаются данные) и ИСТОЧНИК ДАННЫХ (любой набор данных доступный через ODBC). Результатом слияния являются бланки, заполненнве данными из таблицы. При выполнении слияния можно определить порядок сортировки и условия отбора записей.
До включительно Office97 эта функциональность находится в меню Сервис/Слияние, позже кажется была куда-то перемещена, сейчас не помню точно. В любом случае см. справку, если что-то будет непонятно, пишите.
1) использование так называемых ФОРМ и заполнение формы макросом:
Код: Выделить всё
Dim c As ADODB.Connection, r As ADODB.Recordset
...
Set c = New ADODB.Connection
Set r = New ADODB.Recordset
c.Open "строка подключения"
r.Open "SQL или имя рекордсета", c
r.MoveFirst
ActiveDocument.FormFields("ТекстовоеПоле1").Result =r.Fields(1).Value
r = Nothing
c = Nothing
2) Вместо форм использовать СЛИЯНИЕ. В слиянии участвуют БЛАНК (документ Word со специальными "полями слияния", в которые помещаются данные) и ИСТОЧНИК ДАННЫХ (любой набор данных доступный через ODBC). Результатом слияния являются бланки, заполненнве данными из таблицы. При выполнении слияния можно определить порядок сортировки и условия отбора записей.
До включительно Office97 эта функциональность находится в меню Сервис/Слияние, позже кажется была куда-то перемещена, сейчас не помню точно. В любом случае см. справку, если что-то будет непонятно, пишите.
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2004, 10:42
Благодарю за подсказку.
Но в этих делах я полный профан, так что прошу прощения буду уточнять, Даже ВБА знаю поверхностно
прежде всего меня (то есть шефа) интересует первый вариант т.е. заполнение готового документа (формы) макросом
Код:
Dim c As ADODB.Connection, r As ADODB.Recordset
...
Set c = New ADODB.Connection
Set r = New ADODB.Recordset
c.Open "строка подключения"
r.Open "SQL или имя рекордсета", c
r.MoveFirst
ActiveDocument.FormFields("ТекстовоеПоле1").Result =r.Fields(1).Value
r = Nothing
c = Nothing
Плиз поподробней по строкам, Не понял даже что за переменные мы обьявили и куда заставили их конектиться и рекордсетиться.
Что писать в "строка подключения", "SQL или имя рекордсета", что такое вообще этот рекордсет.
На пробу я пытаюсь подключиться к Exel через ODBC
Буду благодарен за любую инфу по теме Zamiryakin_konst@mail.ru
Или посоветуйте сайты где можно почитать на эту тему чтобы было понятно даже мне.
Но в этих делах я полный профан, так что прошу прощения буду уточнять, Даже ВБА знаю поверхностно
прежде всего меня (то есть шефа) интересует первый вариант т.е. заполнение готового документа (формы) макросом
Код:
Dim c As ADODB.Connection, r As ADODB.Recordset
...
Set c = New ADODB.Connection
Set r = New ADODB.Recordset
c.Open "строка подключения"
r.Open "SQL или имя рекордсета", c
r.MoveFirst
ActiveDocument.FormFields("ТекстовоеПоле1").Result =r.Fields(1).Value
r = Nothing
c = Nothing
Плиз поподробней по строкам, Не понял даже что за переменные мы обьявили и куда заставили их конектиться и рекордсетиться.
Что писать в "строка подключения", "SQL или имя рекордсета", что такое вообще этот рекордсет.
На пробу я пытаюсь подключиться к Exel через ODBC
Буду благодарен за любую инфу по теме Zamiryakin_konst@mail.ru
Или посоветуйте сайты где можно почитать на эту тему чтобы было понятно даже мне.
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2004, 10:42
И ещё подскажите пожалуйста где можно найти описание (кроме Хелпа который на английском) свойст и методов
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Думаю в каких-нибудь книгах... не знаю точно, никогда не искалгде можно найти описание (кроме Хелпа который на английском) свойст и методов

Странный выбор... при использовании слияния тоже получится заполненная данными форма. Зачем изобратать велосипед? Почитайте про слияние, уверен, что оно вполне может удовлетворить все Ваши потребности.прежде всего меня (то есть шефа) интересует первый вариант т.е. заполнение готового документа (формы) макросом
Сделаю конкретный пример, тогда напишу.Плиз поподробней по строкам, Не понял даже что за переменные мы обьявили и куда заставили их конектиться и рекордсетиться.
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2004, 10:42
1.Насчёт велосипеда, всё очень просто, начальсто сказало заполнить форму по требованию через ODBC я и пытаюсь
2. За пример буду благодарен
По вашему прошлому примеру сделал вот это
Private Sub CommandButton1_Click()
Dim conn As ADODB.Connection, rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open "access"
sqlstr = "select * from tab where Surname "
rs.Open sqlstr, conn
While rs.EOF <> True
MsgBox rs.Fields.Item(1)
rs.MoveNext
Wend
прдскажите с выборкой данных из rs по запросу и вставкой их в поле
сразу огромное спасибо (приятно когда хоть кто то готов помоч)
2. За пример буду благодарен
По вашему прошлому примеру сделал вот это
Private Sub CommandButton1_Click()
Dim conn As ADODB.Connection, rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open "access"
sqlstr = "select * from tab where Surname "
rs.Open sqlstr, conn
While rs.EOF <> True
MsgBox rs.Fields.Item(1)
rs.MoveNext
Wend
прдскажите с выборкой данных из rs по запросу и вставкой их в поле
сразу огромное спасибо (приятно когда хоть кто то готов помоч)
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Так слияние документов позволяет как раз это делать! Причем, в нем заложены возможности, о которых начальство пока не знает, но в скором будущем, возможно, захочет иметь.начальсто сказало заполнить форму по требованию через ODBC
Лучше опирайтесь на Хелпы, а не на мой пример! В справке по VBA в Access есть тема "Microsoft OLE DB Provider for ODBC" там рассказывается как строится ConnectString. Сначала через //Панель управления/Источники данных ODBC создайте DSN c каким-нибудь названием и настройте его на нужную Вам базу. Затем постройте ConnectString (см хелп), он должен выглядеть так: "[Provider=MSDASQL;] { DSN=name | FileDSN=filename } ; [DATABASE=database;] UID=user; PWD=password". Можно обойтись без создания DSN. В этом случае ConnectString должен нести больше информации.По вашему прошлому примеру сделал вот это
вот рабочий пример:
Код: Выделить всё
Sub qwe()
Dim c As ADODB.Connection, r As ADODB.Recordset
On Error GoTo Err1:
Set c = New ADODB.Connection
Set r = New ADODB.Recordset
c.Open "DSN=MyDSN; UID=; PWD="
TabNo = InputBox("Введите табельный номер")
On Error GoTo Err2:
r.Open "Select * from Таблица1 where Код=" & TabNo, c
r.MoveFirst
ActiveDocument.FormFields("ТекстовоеПоле1").Result = r.Fields(0).Value
ActiveDocument.FormFields("ТекстовоеПоле2").Result = r.Fields(1).Value
GoTo Done:
Err1:
MsgBox "Невозможно подключиться к базе"
GoTo Done:
Err2:
MsgBox "Введен некорректный табельный номер или ошибка при извлечении данных из базы"
GoTo Done:
Done:
Set r = Nothing
Set c = Nothing
End Sub
После запуска макроса заполняется перемнная TabNo и выражение "Select * from Таблица1 where Код=" & TabNo
превращается в корректный (или некорерктный
