powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как открыть Word для просмотра содержимого OLE?
29 сообщений из 29, показаны все 2 страниц
Как открыть Word для просмотра содержимого OLE?
    #32719271
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не найду никак...

Есть [Таблица], в ней [Поле] ("Поле объекта OLE"). В нем живет word'овский документ. Можно ли открыть word с этим документом, не создавая временного файла и не используя для этого форм? Цели сохранить изменения, сделанные в word'е, обратно в поле не стоит.

Спасибо.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719280
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А дубель-кряк по этому полю разве делает не это?
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719315
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется программно, не используя при этом форм и временных файлов.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719323
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хто база (MS SQL или мдб)
через что планируется доступ (ДАО или АДО)
и ПОЧЕМУ без форм и файлов???????

Думаю, СОВСЕМ без файлов не обойтись.
Особенно, если хранятся именно доки и именно в двоичном вордовом оле формате
- с разделами, вложенными доками и картинами.

Для простых текстов можно просто вставлять содержимое в (новый) док
из stream или задействовать getChunk



(с выражением лица)
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719480
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хто база (MS SQL или мдб)
mdb
через что планируется доступ (ДАО или АДО)
DAO
и ПОЧЕМУ без форм и файлов???????
Хочу часть отчетов хранить в базе, и формировать их в ворде. Сохранять при этом их не требуется. Обрабатывать паровоз возможных ошибок при работе с файлами (файл уже есть, файл не получается удалить, файл не успел удалиться, трам-пам-пам) нет никакого желания. И таскать дополнительную форму из программы в программу тоже неудобно. :(
Для простых текстов можно просто вставлять содержимое в (новый) док
из stream или задействовать getChunk
А вот здесь поподробнее можно? Как в новый док из stream класть данные? Или это имеется в виду именно текст вообще без форматирования?
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719633
aleks3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри по этому адресу

Практическая работа с Word.

Хотя статья предназначена для начинающих, надеюсь, что и более опытные программисты найдут в ней кое-что полезное. Например, работу с Word без файлов на диске.



http://hiprog.com/access/article.asp?id=379
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719647
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо :)
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719671
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но это через форму. Не то. Так я умею.
Форму не надо (во всяком случае пока жива надежда на возможность обойтись без нее)...
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719701
aleks3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
те как без формы не понятно
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32719721
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть
Код: plaintext
currentdb.openrecordset("select myOLE from MyTable").fields(0)
есть
Код: plaintext
1.
dim wa as object
set wa = createobject("word.application")
хочу посмотреть в word'е содержимое поля myOLE таблицы MyTable, которое суть вордовый же документ. При этом не хочу таскать за процедурой форму из одного поля, не хочу создавать файлы для того, чтобы сохранять на диске то, что и так там есть, и есть в памяти.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720228
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так приравнять переменные скорее всего не получится, подозреваю у них разный формат объекта. Если же насильно переопределить, то возможны всяческие глюки. Если чрез файл не хочется, то можно таки через форму. Но форму не сохранять и не показывать.
Вот код, правда для Excel (Word хуже знаю).

Код: plaintext
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.
Sub OpenExcel()
Dim F As Form
Dim C As BoundObjectFrame
Dim Name As String

Set F = CreateForm
F.Visible = False

F.RecordSource = "TableExcel"

Set C = Application.CreateControl(F.Name, acBoundObjectFrame, , , "Pole_Excel")
C.Verb = - 2 
Name = F.Name
DoCmd.OpenForm Name, acNormal, , , acFormReadOnly, acHidden
Forms(Name).Controls( 0 ).Action = acOLEActivate
With Forms(Name).Controls( 0 ).Object.Application
    .UserControl = True
    .Sheets.Copy
    .ActiveWorkbook.Saved = True
End With

DoCmd.Close acForm, Name, acSaveNo
Set C = Nothing
Set F = Nothing
End Sub
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720263
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Олл

Чем дальше, тем страшнее.

В случае с временными файлами:

Поскольку других способов я не нашел, стал делать через файл. Мышой кладу в OLE-поле файл Word размером 40 кб. Затем пытаюсь сохранить его на диск посредством GetChunk. Оказывается, что FieldSize у этого поля порядка 80 кб. Естественно, открыть такой файл не получается. Можно, конечно, класть файл в базу посредством AppendChunk, но это не удобно, хочется оставить себе возможность редактировать эти отчеты прямо из Access, не делая лишних движений.

Кроме того, в заголовке ворда вылезает тем более корявое название, чем более страшное имя я даю временному файлу. Но по сравнению с предыдущим это неважно.

В случае с использованием контрола OLE:

При Action = acOLEActivate Word сразу становится Visible, вне зависимости от того, был ли он до этого загружен в память с установкой visible=false, или нет. Это неудобно - либо лишнее моргание пользователю при подготовке отчета:
Код: plaintext
1.
forms("myform")("myole").action = acoleactivate
getobject(,"word.application").visible=false
либо он будет сидеть, не касаясь клавиатуры и мыши, и "нервно курить" (с) не помню чей, пока в загруженном шаблоне отчета программа расставит необходимые данные.

Как победить хоть что-нибудь из этого?

2СtrlAlt
Аналогично, и, кроме того, форму все равно придется делать заранее, иначе эта программа не будет работать в mde.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720272
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас еще попробую http://www.sql.ru/forum/actualthread.aspx?tid=17943
, но это сразу и "дополнительная форма" и "временный файл", то есть совершенно противоположный желаемому способ.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720292
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Geo
Вот поэтому я никогда не работаю с OLE в аксесе. Всё время использую BLOB поля - и проблем не знаю. Пользователи просто после редактирования в ворде указывают путь к файлу в аксесе для сохранения изменений и всё...
Да, неудобнее чем в ОЛЕ в Аксесе, зато легко переносимо на НЕТ:)
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720359
CtrlAlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже OLE не использую. Глючное оно.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720462
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Geo

не надо ОЛЕ оно много места жрет, глючное

заливай файлы целиком
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720860
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, вы правы. Так и буду делать. Спасибо всем :)
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32720974
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
апаздал.
день был плохой, а понеделник будет еще хуже...
((;;;

Geo
Или это имеется в виду именно текст вообще без форматирования?

Да.

Касательно собственно изначальной постановки - рабочих "советов" у меня нет.
Если ослабить требование на недопустимость временного файла, то близким к запрошенному выглядит такой вариант - вставить файл без установления связи, после чего удалить временный файл.
с пропуском доступа к базе и с точностью до обработки ошибок:

Код: plaintext
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.
  'это путь к каталогу, в который будем сыпать временные файлы 
 'типа можно хадействовать  
 'Public Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _ 
 '(ByVal nBufferLength As Long, ByVal lpBuffer As String) As LongDim strFileFavoritePath As String 
  strFileFavoritePath = "C:\ТРампампам\Временные документы\"
   '----------------------------- 
   'здесь высыпали файлы (не приводится), дальше работаем с вордом 
   '------------------------ 
  
  Dim wordApp As Word.Application
  Dim wrdDoc As Word.Document
   '... 
  Set wordApp = New Word.Application
   'создаем новый пустой файл по умолчательному образцу normal.dot 
  Set wrdDoc = wordApp.Documents.Add(DocumentType:=wdNewBlankDocument, Visible:=False)
  
   'меняем дефолтный каталог для открытия файлов на свой любимый 
   wordApp.ChangeFileOpenDirectory strFileFavoritePath
    wrdDoc.Range( 0 ,  0 ).InsertFile FileName:="ChunkedFromDB.doc", Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False
        
    'типа удалим временный файл 
   Kill strFileFavoritePath & wordApp.PathSeparator & "ChunkedFromDB.doc"

    'вернем взад дефолтный каталог для открытия файлов  
    дефолтный каталог для открытия файлов 
   wordApp.ChangeFileOpenDirectory wordApp.Options.DefaultFilePath(Path:= 0 )
 
    'отобразим результат 
   wrdDoc.Windows(wrdDoc.Name).Visible = True
      




Geo
mdb
DAO

тохды чанки...


Geo
Хочу часть отчетов хранить в базе, и формировать их в ворде.


не поняль...
тут как бы две задачи в одной можно вычитать.
1) документохранилище - хранить в виде документов Word сформированные отчеты как "твердые электронные копии".
2) документ Ворд как описатель
(и, возможно - приложение Ворд как конструктор) отчета,
по которому некий механизм исполнения будет строить отчет.

все-таки любопытно - куда рулить будешь?


Geo
Сохранять при этом их не требуется. Обрабатывать паровоз возможных ошибок при работе с файлами (файл уже есть, файл не получается удалить, файл не успел удалиться, трам-пам-пам) нет никакого желания. И таскать дополнительную форму из программы в программу тоже неудобно. :(


форма, как видно, не потребуется.
А кое-что про ошибки все-таки придется. Но не страшный паровоз....


ЗЫ
щё раз пардону за влезание в закрытый топик...
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721123
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victoshaне поняль...
тут как бы две задачи в одной можно вычитать.
1) документохранилище - хранить в виде документов Word сформированные отчеты как "твердые электронные копии".
2) документ Ворд как описатель
(и, возможно - приложение Ворд как конструктор) отчета,
по которому некий механизм исполнения будет строить отчет.
все-таки любопытно - куда рулить будешь?

Нужно 2) - в базе живет шаблон отчета, который, при наличии достаточных прав, пользователь может изменять, придерживаясь определенных правил, чтобы программа потом могла этот шаблон заполнить. Сложный генератор мне не нужен, пока делаю для простых отчетов с небольшим количеством данных, которые проще сделать в ворде, чем в Access.

Хотелось для наглядности отображать эти шаблоны при просмотре/редактировании (именно шаблоны, а не сами отчеты) в OLE-полях, а формировать уже в ворде. Но как-то не получается. Поэтому сделал, как подытожил АлексейК - в базе живут шаблоны, вставленные не посредством оле-полей, а залитые из файлов.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721165
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажется, поняль...
думаю, приведенный мной код не пригодится за ненадобностью.


(с выражением лица)
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721312
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попутно еще вопрос родился. Помогите малограмотному. Сел перечитывать, что я вчера наковырял:

Код: plaintext
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.
  Dim ff As Integer
  Dim b() As Byte
  Dim rs As DAO.Recordset
  Dim lSizeFile As Long
  Dim lOffsFile As Long
  Dim s As String
  
  Const BufSize =  32768 
  
  Set rs = трам-пам-пам
  s = трум-пум-пум  ' путь и имя к файлу 
    
  lSizeFile = FileLen(s)
  ff = FreeFile
  ReDim b(BufSize)
  Open s For Binary Access Read As #ff
  rs.Edit
  rs![Содержимое] = Null
  Do While lOffsFile < lSizeFile
    Get #ff, , b
    rs("Содержимое").AppendChunk b()
    lOffsFile = lOffsFile + BufSize
  Loop
  rs.Update
  Close #ff
  Kill s

Это работает, но я не понимаю, почему. Размер файла не кратен размеру буфера (буфер 32 кб, а файл 40 кб). Почему акцесс правильно читает файл? У него в байтовом массиве где-то хранится количество заполненных элементов, или что?

Т.е. я бы понял, если б он со строкой так работал, но для строки, видимо, концом у него является нуль-символ или аналог, если в этом тексте заменить массив на строку, то читается (и записывается) небольшой кусок от необходимых 40 килобайт. А в массив-то они куда заполненность прикрутили?
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721329
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя вру...
При чтении файла поле заполняется неправильно, как и ожидалось, размер его после выполнения вышеуказанного кода кратен 32 килобайтам. Это я поправил, а почему при записи в файл из поля его размер получается правильным??

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  ReDim b(BufSize -  1 )
  Open s For Binary Access Write As #ff
  Do While lOffsFile < lSizeFile
    b() = rs![Содержимое].GetChunk(lOffsFile, _
                                   IIf((lOffsFile + BufSize) > lSizeFile, _
                                       lSizeFile - lOffsFile, _
                                       BufSize))
    Put #ff, , b()
    lOffsFile = lOffsFile + BufSize
  Loop
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721343
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geoхотя вру...
При чтении файла поле заполняется неправильно, как и ожидалось, размер его после выполнения вышеуказанного кода кратен 32 килобайтам. Это я поправил, а почему при записи в файл из поля его размер получается правильным??

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  ReDim b(BufSize -  1 )
  Open s For Binary Access Write As #ff
  Do While lOffsFile < lSizeFile
    b() = rs![Содержимое].GetChunk(lOffsFile, _
                                   IIf((lOffsFile + BufSize) > lSizeFile, _
                                       lSizeFile - lOffsFile, _
                                       BufSize))
    Put #ff, , b()
    lOffsFile = lOffsFile + BufSize
  Loop


патамушта F1=
F1 DAO360.chm GetChunk
The data that a GetChunk call returns is assigned to variable. If Size is greater than the remaining data, the GetChunk method returns only the remaining data without padding variable with empty spaces. If the field is empty, the GetChunk method returns a null value.

В переводе на русский это означает, что инициализация массива в твоем коде не нужна - GetChunk всегда возвращает указатель на НОВЫЙ массив.

иметь ввиду два обстоятельства
1) если читаешь "поле мемо", то возвращать результат getchunk можно в строку. если поле "ОЛЕ", то ТОЛЬКО в байтовый массив.
2) GetChunk глючит, если используется на рекордсете, образованном на запросе с группировкой - http://support.microsoft.com/default.aspx?scid=kb;en-us;250640
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721349
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпатамушта F1=

Благодарствую :)

Все работает, спасибо.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721351
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще замечание

если размеры файла/поля не слишком велики - читай все за раз-
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  Dim b() As Byte
  
  Dim rS As DAO.Recordset
  Dim tField As DAO.Field
  
  Set rS = db.OpenRecordset("ТвойЗапрос")
  Set tField = rS.Fields![ТвоеПолеОле]
 <...>  
  b() = tField.GetChunk( 0 , tField.FieldSize)
   <...>  

  rS.Close
либо поэкспериментируй с размером чанка, в целях определения общй максимальной производительности, величинами кратными размеру страницы - типа 4 - 8 - 16 - 32 кб, для а97 начинать с 2х кб.
То ли придумалось, то ли вспомнилось - по совокупности затрат для А97 на "всем старом" встречалась рекомендация в 8 кб



(с выражением лица)
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32721353
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geo авторпатамушта F1=

Благодарствую :)

Все работает, спасибо.

так не за что - оно же и работало
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32722196
ёксельман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victoshaесли размеры файла/поля не слишком велики - читай все за раз-
Код: plaintext
1.
2.
  Dim b() As Byte 
  b() = tField.GetChunk( 0 , tField.FieldSize)
(с выражением лица)

а97, ленясь писать параметры шанка, в вин2к нормально гружу и выгружаю 57к ёкселя или 64к ворда (больше пока не надо - и так уже по 3 страницы). С чем это связано (на что я должен таки напороться, не прописывая явно размер шанкра?
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32722640
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовать бы надо. Предполагаю, на возможную нехватку памяти при работе с документами, размер которых сравним с размером физической памяти.
...
Рейтинг: 0 / 0
Как открыть Word для просмотра содержимого OLE?
    #32722925
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёксельман
<...>
на что я должен таки напороться, не прописывая явно размер шанкра?

В действительности - не знаю.
Думаю, что если ты не программируешь на дельфях, то в очень широких пределах - возможно до сотен мегабайт ни на что серьёзное. (кроме активного свопа) Возможно - это "устаревшая тема".
( )

Мне почти не приходилось пользоваться чанками, и совсем не приходилось работать с блобами реально большого размера. И детали темы для меня в тумане.

Желание же "стабилизировать" размер происходит примерно из следующих соображений.
Кроме буфера приема чанка в памяти приложения потребуется буфер
выборки заказанной порции в БД и буфер возврата.
Возможно помноженный на два в случае клиентского курсора.
Потребная память в на весь блоб в клиенском приложении все равно
может оказаться израсходованной - это функция реализации, которой я не знаю - не очевидно что за это МОЖНО бороться.
А вот размер "базовых" буферов может оказать существенное влияние на время блокировки страницы/удельную скорость чтения из поля и тд
То есть - concurrency может оказаться сильно зависимым от
величины "стандартного" размера чанка.
Интуитивно представляется, что вероятность разрушения базы меньше, если
элементарная операция обращения к ней короче по времени.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как открыть Word для просмотра содержимого OLE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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