![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |