|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как правильно. Научите
Как правильней?
В цикле создать объект или до цикла его создавать и чистить его в цикле Код:
while not ADOQuery1.EOF do try COM_Word := CreateOLEObject('Word.Application'); COM_Word.Visible := False; COM_Word.Documents.Open(ADOQuery1[0].AsString); Com_Word.ActiveDocument.Select; COM_Word.Selection.Copy; RichEdit1.PasteFromClipboard; COM_Word.DisplayAlerts := False; COM_Word.Quit; finally COM_Word := UnAssigned; end; Научите пожалуйста Последний раз редактировалось Admin, 17.03.2014 в 21:23. |
#2
|
||||
|
||||
Создавать и уничтожать объекты лучше вне цикла. Экономится вычислительная мощь процессора и снижается нагрузка на оперативную память.
|
#3
|
|||
|
|||
Создавать и уничтожать объекты лучше вне цикла. Особенно такие как 'Word.Application'.
|
#4
|
|||
|
|||
Задача такая надо открыть документ Word скопировать содержимое из него и запихнуть в поле бд типа text СУБД MS SQL 2005
Вот код который выдает ошибки (Например, что в Буфере нет ничего нет ничего) Может я не так все делаю? Код:
procedure TMain.SpeedButton3Click(Sender: TObject); var COM_Word: variant; begin Screen.Cursor:=crSQLWait; with Documents.ADOQuery1 do try COM_Word := CreateOLEObject('Word.Application'); COM_Word.Visible := False; DisableControls; First; while not EOF do begin if ( not FieldByName('cDocumentPath').IsNull) and ((pos('.doc', Fieldbyname('cDocumentPath').AsString)<>0) or (pos('.rtf', Fieldbyname('cDocumentPath').AsString)<>0)) then begin Clipboard.Clear; COM_Word.Documents.Open(DirPath + FieldByName('cDocumentPath').AsString); COM_Word.ActiveDocument.Select; // Âûäåëÿåì ÁÄ COM_Word.Selection.Copy; if (Length(Clipboard.AsText)>0) and (Clipboard.HasFormat(CF_TEXT)) then begin Edit; FieldByName('cDocumentContent').AsString := Clipboard.AsText; Post; end; // if COM_Word.DisplayAlerts := False; COM_Word.ActiveDocument.Close; COM_Word.Quit; end; // if Next; end; // while EnableControls; finally COM_Word := UnAssigned; end; // try Screen.Cursor:=crDefault; end; помогите решить задачку ПОЖАЛУЙСТА Последний раз редактировалось aqula, 20.03.2014 в 21:15. |
#5
|
|||
|
|||
Если только текст, то в место
Код:
Clipboard.Clear; COM_Word.Documents.Open(DirPath + FieldByName('cDocumentPath').AsString); COM_Word.ActiveDocument.Select; // Âûäåëÿåì ÁÄ COM_Word.Selection.Copy; if (Length(Clipboard.AsText)>0) and (Clipboard.HasFormat(CF_TEXT)) then begin Edit; FieldByName('cDocumentContent').AsString := Clipboard.AsText; Post; end; // if Код:
FieldByName('cDocumentContent').AsString:=COM_Word.ActiveDocument.Range.Text; |