Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка object reqired при очистке БД / 25 сообщений из 37, страница 1 из 2
22.04.2017, 10:17
    #39442616
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Доброго времени суток. Пытаюсь сделать программу для импорта данных из таблицы Word в Access.

Нашёл на иностранном сайте код:
Код: 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.
Private Sub cmdImport_Click()
Dim appWord As Word.Application, doc As Word.Document
Dim dbs As DAO.Database, rst As DAO.Recordset, strDoc As String
 
    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = CurrentProject.Path & "\People.docx"  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document
 
    Set dbs = CurrentDb 'establish the database to use (this is our current Database)
    Set rst = dbs.OpenRecordset("tblPeople") 'establish the recordset
 
    With doc.Tables(1) 'target table 1 in People.docx
 
        For i = 2 To .Rows.Count 'cycle through rows in Tables(1) [we skip the first row because the table has headers]
 
            With rst
                .AddNew 'creating a new record
                    ![FName] = doc.Tables(1).Cell(i, 1).Range.Text
                    ![LName] = doc.Tables(1).Cell(i, 2).Range.Text
                    ![SSN] = doc.Tables(1).Cell(i, 3).Range.Text
                    ![PhoneNumber] = doc.Tables(1).Cell(i, 5).Range.Text
                    ![Gender] = doc.Tables(1).Cell(i, 6).Range.Text
                .Update 'update the whole record
            End With
 
        Next 'go to next row in Tables(1)
 
    End With
 
    rst.Close: Set rst = Nothing 'close and clear recordset
    db.Close: Set rst = Nothing 'close and clear database
    doc.Close: Set doc = Nothing 'close and clear document
    appWord.Quit: Set appWord = Nothing 'close and clear MS Word
 
End Sub



Создал в ворде тестовую табличку, создал таблицу в Access для заполнения, перебил код под свой вордовский файл, привёл к такому виду
Код: 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.
Private Sub Кнопка0_Click()
Dim appWord As Word.Application, doc As Word.Document
Dim dbs As DAO.Database, rst As DAO.Recordset, strDoc As String
     
        Set appWord = CreateObject("Word.Application") 'establish an instance of word
        strDoc = "C:\Documents and Settings\Admin\Рабочий стол\tblTest.docx"  'set string to document path and file
        Set doc = appWord.Documents.Open(strDoc) 'establish the document
     
        Set dbs = CurrentDb 'establish the database to use (this is our current Database)
        Set rst = dbs.OpenRecordset("tblTest") 'establish the recordset
     
        With doc.Tables(1) 'target table 1 in People.docx
     
            For i = 2 To .Rows.Count 'cycle through rows in Tables(1) [we skip the first row because the table has headers]
     
                With rst
                    .AddNew 'creating a new record
                        ![ob] = doc.Tables(1).Cell(i, 1).Range.Text
                        ![smr] = doc.Tables(1).Cell(i, 2).Range.Text
                        ![emm] = doc.Tables(1).Cell(i, 3).Range.Text
                        ![mat] = doc.Tables(1).Cell(i, 4).Range.Text
                    .Update 'update the whole record
                End With
     
            Next 'go to next row in Tables(1)
     
        End With
     
        rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close: Set rst = Nothing 'close and clear database
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word
     
    End Sub



(Строку strDoc = CurrentProject.Path был вынужден заменить на путь, т.к. в таком виде файл не устанавливался)
Пришёл к тому, что при запуске выдаётся object reqired и подчёркивается строка очистки базы данных
Код: vbnet
1.
db.Close: Set rst = Nothing 'close and clear database



Есть также англоязычное видео, где используют этот вот код. Ничего не меняют и всё работает. Не могу понять в чём я провинился
...
Рейтинг: 0 / 0
22.04.2017, 10:21
    #39442622
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Set dbs = CurrentDb

....

db.Close
...
Рейтинг: 0 / 0
22.04.2017, 10:24
    #39442624
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Ataxy,
поменяйте местами--база закрывается позже рекордсета
Код: vbnet
1.
2.
 Set rst = Nothing 'close and clear database
db.Close
...
Рейтинг: 0 / 0
22.04.2017, 10:30
    #39442629
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
ПЕНСИОНЕРКА, но ведь по коду итак закрытие базы идёт под рекордсетом?
Я правильно понял? (да, я чайник)
Код: vbnet
1.
2.
3.
4.
5.
rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close: Set rst = Nothing 'close and clear database
        db.Close
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word
...
Рейтинг: 0 / 0
22.04.2017, 10:33
    #39442631
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Ataxy,

и в конце каждого параграфа или ячейки таблиці есть служебные символы c кодами 13-10-11-7-9

поєтому строку типа присвоения надо заменить на
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
s1= doc.Tables(1).Cell(i, 1).Range.Text

s1=replace(s1,chr(13)," ")
s1=replace(s1,chr(10)," ")
s1=replace(s1,chr(11)," ")
s1=replace(s1,chr(7)," ")
s1=replace(s1,chr(9)," ")
s1=replace(s1,"  "," ")

 ![FName] =trim(s1)



можно создать функцию, чтобі уменьшить писанину
...
Рейтинг: 0 / 0
22.04.2017, 10:34
    #39442635
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Ataxy
Код: vbnet
1.
2.
3.
4.
5.
rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close: Set rst = Nothing 'close and clear database
        db.Close
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word



зачем ві повторяете строку
Код: vbnet
1.
2.
3.
4.
rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close  'close and clear database
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word
...
Рейтинг: 0 / 0
22.04.2017, 10:44
    #39442638
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
ПЕНСИОНЕРКА, т.е. просто db.Close без Set dbs=Nothing?

По поводу символов. В режиме отображения нечитаемых символов word показывает только символ окончания ячейки. Символов, указанных в таблице ASCII под такими кодами не выводит.

Вы не могли бы написать эту функцию?
...
Рейтинг: 0 / 0
22.04.2017, 12:16
    #39442648
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Predeclared, заменил db на dbs - помогло.

ПЕНСИОНЕРКА, при заполнении после каждого значения ставится []. Это, я так понимаю, из-за символов, о которых вы говорили?
...
Рейтинг: 0 / 0
22.04.2017, 13:43
    #39442668
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Ataxy,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function zamena(n1z)
dim s1
s1= n1z & ""

s1=replace(s1,chr(13)," ")
s1=replace(s1,chr(10)," ")
s1=replace(s1,chr(11)," ")
s1=replace(s1,chr(7)," ")
s1=replace(s1,chr(9)," ")
s1=replace(s1,"  "," ")
zamena=s1
 end function




обращение к ней в вашем коде
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
With rst
                .AddNew 'creating a new record
                    ![FName] = zamena(doc.Tables(1).Cell(i, 1).Range.Text)
                    ![LName] = zamena(doc.Tables(1).Cell(i, 2).Range.Text)
                    ![SSN] = zamena(doc.Tables(1).Cell(i, 3).Range.Text)
                    ![PhoneNumber] = zamena(doc.Tables(1).Cell(i, 5).Range.Text)
                    ![Gender] = zamena(doc.Tables(1).Cell(i, 6).Range.Text)
                .Update 'update the whole record
            End With
...
Рейтинг: 0 / 0
24.04.2017, 16:35
    #39443457
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
ПЕНСИОНЕРКА, огромное вам спасибо за функцию! Работает

Теперь другая проблема. Дорабатываю программу. Хочу сделать, чтобы она могла работать не с одним документом. На форме есть кнопка, с помощью которой выбирается файл и в поле рядом выводится путь к файлу.
Я изменяю
Код: vbnet
1.
2.
3.
        Set appWord = CreateObject("Word.Application") 'establish an instance of word
        strDoc = "C:\Documents and Settings\Admin\Рабочий стол\tblTest.docx"  'set string to document path and file
        Set doc = appWord.Documents.Open(strDoc) 'establish the document 


На
Код: vbnet
1.
2.
3.
    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = "Forms![Test].Controls![Поле1].Value"  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document



Выдаёт ошибку - пишет, что файл не найден. Подчёркивает
Код: vbnet
1.
Set doc = appWord.Documents.Open(strDoc)



Как корректно прописать обращение к значению поля?
...
Рейтинг: 0 / 0
24.04.2017, 16:37
    #39443460
Прогер_самоучка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
AtaxyПЕНСИОНЕРКА, огромное вам спасибо за функцию! Работает

Теперь другая проблема. Дорабатываю программу. Хочу сделать, чтобы она могла работать не с одним документом. На форме есть кнопка, с помощью которой выбирается файл и в поле рядом выводится путь к файлу.
Я изменяю
Код: vbnet
1.
2.
3.
        Set appWord = CreateObject("Word.Application") 'establish an instance of word
        strDoc = "C:\Documents and Settings\Admin\Рабочий стол\tblTest.docx"  'set string to document path and file
        Set doc = appWord.Documents.Open(strDoc) 'establish the document 



На
Код: vbnet
1.
2.
3.
    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = "Forms![Test].Controls![Поле1].Value"  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document




Выдаёт ошибку - пишет, что файл не найден. Подчёркивает
Код: vbnet
1.
Set doc = appWord.Documents.Open(strDoc)




Как корректно прописать обращение к значению поля?без кавычек
...
Рейтинг: 0 / 0
24.04.2017, 17:44
    #39443535
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Прогер_самоучка, спасибо.
Это не обязательно, конечно. Но, как дополнить процедуру, чтобы она просила выбрать файл, если поле пустое?

Я правильно понял?
Код: vbnet
1.
2.
3.
strDoc = Forms![Test].Controls![Поле1].Value
            If strDoc = Nothing Then MsgBox "Бла-бла-бла"
            End If 



Или нужно объявить новую переменную для поля?
...
Рейтинг: 0 / 0
24.04.2017, 17:54
    #39443541
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Вот так?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim appWord As Word.Application, doc As Word.Document
Dim dbs As DAO.Database, rst As DAO.Recordset, strDoc As String, fldDir As String

fldDir = Forms![Test].Controls![Поле1].Value
If fldDir<0 Then
MsgBox "Бла-бла-бла!"
End If

    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = fldDir  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document
...
Рейтинг: 0 / 0
24.04.2017, 18:11
    #39443553
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Не проканало
...
Рейтинг: 0 / 0
24.04.2017, 18:34
    #39443569
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
А зачем текстовую переменную проверять на "меньше нуля"?

if isnull(Forms![Test].Controls![Поле1].Value) then
...
Рейтинг: 0 / 0
24.04.2017, 18:57
    #39443583
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Владимир Саныч, сейчас попробуем.
А ещё понял, чо прописывать надо в другой процедуре. Вышеупомянутая процедура у меня теперь паблик. Есть процедура _clik, которая запускает запрос на создание таблицы и вызывает процедуру заполнения. Прописать логичней будет в ней, чтобы она не создавала таблицу, пока поле пустое.

авторА зачем текстовую переменную проверять на "меньше нуля"?
Потому что я тупой гуманитарий
...
Рейтинг: 0 / 0
24.04.2017, 19:21
    #39443592
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Вот да
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Кнопка0_Click()
Dim query As String

query = "CREATE TABLE tblTest (ob CHAR (30), smr CHAR (30), emm CHAR (30), mat CHAR (30))"
DoCmd.RunSQL query
Call Zapolnenie
End Sub



Два вопроса. Как остановить процедуру при нулевом поле? Нужно ли будет потом изменять
Код: vbnet
1.
strDoc = Forms![Test].Controls![Поле1].Value 


в процедуре заполнения?
...
Рейтинг: 0 / 0
24.04.2017, 19:42
    #39443603
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Готово
Код: vbnet
1.
2.
3.
4.
If IsNull(Forms![Test].Controls![Поле1].Value) Then 
MsgBox "Выберите файл" 
Exit Sub 
End If 
...
Рейтинг: 0 / 0
25.04.2017, 19:46
    #39444278
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
С тестовой табличкой программа справляется. А вот целевой таблицей, ради которой всё затевалось, давится и вешает Access
Таблица в документе оформлена столбцами. Символы окончания ячейки, которые должны стоять за правой границей таблицы, стоят только у правого столбца. А таблица, которая должна создаваться и заполняться данными имеет всего 4-5 столбцов. Влияет ли это на процедуру заполнения? Или дело только в том, что в коде не прописана логика обхода ячеек, которые не должны считываться?
...
Рейтинг: 0 / 0
25.04.2017, 20:05
    #39444280
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
AtaxyТаблица в документе оформлена столбцами.я бы ее сначала перевела в текстовый файл, и затем через импорт ввела в аксесс

или бы даже оставила прилинкованной таблицей --с нее тоже можно запросы выполнять

=================
если ворд -документов много, то применила бы создание единого текстовика по формату(с линкованием)
--имя вордовского файла
--[ob]
--[smr]
--[emm]
--[mat]

весьма шустро работает и возможности по обработке намного больше
...
Рейтинг: 0 / 0
25.04.2017, 20:07
    #39444281
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
Ataxy,

кстати --у вас похоже есть строки группировки(3 уровня) --их тоже можно вывести полями в текстовик
...
Рейтинг: 0 / 0
25.04.2017, 21:18
    #39444299
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
ПЕНСИОНЕРКА, перевести в txt и импорировать всмысле ручками? Так мне нельзя, задача стоит программу сделать, чтобы вордовский файл ручками не изменять.

А можно ли программно прописать процедуру перевода в txt?
...
Рейтинг: 0 / 0
25.04.2017, 21:27
    #39444301
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
А по поводу таблицы - вопрос открыт. Если она составлена так, что рекордсет её не переварит как ты ни пыжься, я так и сообщу.
...
Рейтинг: 0 / 0
25.04.2017, 22:27
    #39444319
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
AtaxyПЕНСИОНЕРКА, перевести в txt и импорировать всмысле ручками? Так мне нельзя, задача стоит программу сделать, чтобы вордовский файл ручками не изменять.

А можно ли программно прописать процедуру перевода в txt?


почти наверняка --можно программно сделать ТХТ
но надо посмотреть 2-3 листа, чтобы понять структуру документа
текст можно заменить на условный
...
Рейтинг: 0 / 0
25.04.2017, 23:05
    #39444333
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка object reqired при очистке БД
ПЕНСИОНЕРКА,
авторно надо посмотреть 2-3 листа, чтобы понять структуру документа
Расшвыриваться этим документом нельзя мне. Информация может из чужой, но конторы.

В нём всего два листа. На втором листе продублирована шапка таблицы, под которой всего одна позиция таблицы. А в целом таблица в том виде, как на скрине. Идёт в три колонки, 5 столбцов до конца листа, далее справа повторяется шапка и идут вниз столбцы дале по списку.
Шапка Шапка
1 4
2 5
3 6

И местами в столбцах попадаются растянутые ячейки с обобщающей информации (которые, я хоел бы знать как обойти при считывании данных)

Если нужно знать в каком виде хранятся данные в ячейках, смогу обрисовать
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка object reqired при очистке БД / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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