Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка при работе с OLE 
:(
    Опции темы
Norfonzor
Дата 29.5.2010, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Возникает ошибка при последовательности действий:
1) Загружаю документ Office, сохраняю его в mht функцией "chekFile"
2)Загружаю БД процедурой "LOAD_BD"
Скрин с ошибкой:
IMG: http://img.pixs.ru/storage/4/1/6/1JPG_3139657_694416.jpg
ссылка на проект http://webfile.ru/4513736
код программы:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
    OleServer, Word97, ComCtrls, WordXP, ExtCtrls, OleCtrls, SHDocVw, jpeg,
  Buttons, ComObj, ActiveX,{MSHTML_TLB, ImgList,} ImgList, ExcelXP, PowerPointXP,
  ADODB, DB, Grids, DBGrids;//,WbPopup;

type
  TfrmMain = class(TForm)
    Button1: TButton;
    OpenDialog: TOpenDialog;
    Button2: TButton;
    ADOConnection: TADOConnection;
    ADOCommand: TADOCommand;
    ADODataSet: TADODataSet;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
Global_Fn:string;
Global_test:string;

implementation

{$R *.dfm}
const BDpass='111';

function chekFile:boolean;
var n,Fname2,Global_Fmht: string;
f:TextFile;
WordApp,ExcelApp,PowerPointApp: OleVariant;
findex:byte;


begin//0
Global_Fn:='';
result:=false;

if frmMain.opendialog.Execute then
BEGIN//1
findex:=frmMain.opendialog.FilterIndex;

result:=true;
Global_Fn:=frmMain.opendialog.FileName;

n:=Global_Fn;


  //Сохранение в Mht

showmessage('findex'+inttostr(findex));
case findex of
1:
BEGIN///////////////////////////////////////////////////////////////////WORD
WordApp:=CreateOleObject('Word.Application');
try

WordApp.Visible:=False;
WordApp.DisplayAlerts:=False;

WordApp.Documents.Open(Global_Fn, ReadOnly:=True);

Global_Fn:=ExtractFileName(Global_Fn);
delete(Global_Fn,length(Global_Fn)-length(ExtractFileExt(Global_Fn))+1,length(ExtractFileExt(Global_Fn)));

Global_Fmht:=Global_Fn+'.mht';
showmessage('SAve'+Global_Fmht);
WordApp.ActiveDocument.SaveAs(ExtractFilePath(Application.Exename)+'LIB\'+Global_Fmht, wdFormatWebArchive);


//showmessage('Global_Fmht='+Global_Fmht);

//Global_Fmht- путь к документу
//Global_Fn - название документа
  finally
    WordApp.Quit;
    WordApp:=Unassigned;
  end;

END;///////////////////////////////////////////////////////////////////WORD
2:
BEGIN///////////////////////////////////////////////////////////////////EXCEL
ExcelApp:=CreateOleObject('Excel.Application');
  try
ExcelApp.Visible:=False;
ExcelApp.DisplayAlerts:=False;

ExcelApp.Workbooks.Open(Global_Fn, ReadOnly:=True);

Global_Fmht:=n+'.mht';
ExcelApp.ActiveWorkbook.SaveAs(ExtractFilePath(Application.Exename)+'LIB\'+Global_Fmht, xlWebArchive);

Global_Fn:=ExtractFileName(Global_Fn);
delete(Global_Fn,length(Global_Fn)-length(ExtractFileExt(Global_Fn))+1,length(ExtractFileExt(Global_Fn)));
//showmessage('Global_Fmht='+Global_Fmht);

//Global_Fmht- путь к документу
//Global_Fn - название документа
  finally
    ExcelApp.Quit;
    ExcelApp:=Unassigned;
  end;


END;///////////////////////////////////////////////////////////////////EXCEL

3:
BEGIN//////////////////////////////////////////////////////////////PowerPoint
PowerPointApp:=CreateOleObject('PowerPoint.Application');
  try
PowerPointApp.Visible:=True; //неприятный момент, придётся показать окно PowerPoint'а, иначе на каждом методе будите получать "Invalid request" (хотя может уже и есть решение)
PowerPointApp.DisplayAlerts:=False;

PowerPointApp.Presentations.Open(Global_Fn, ReadOnly:=True);

Global_Fmht:=n+'.mht';
PowerPointApp.ActivePresentation.SaveAs(ExtractFilePath(Application.Exename)+'LIB\'+Global_Fmht,ppSaveAsWebArchive);

Global_Fn:=ExtractFileName(Global_Fn);
delete(Global_Fn,length(Global_Fn)-length(ExtractFileExt(Global_Fn))+1,length(ExtractFileExt(Global_Fn)));
//showmessage('Global_Fmht='+Global_Fmht);

//Global_Fmht- путь к документу
//Global_Fn - название документа
  finally
    PowerPointApp.Quit;
    PowerPointApp:=Unassigned;
  end;


END;///////////////////////////////////////////////////////////////PowerPoint
end;



end;//2

end; //1

procedure LOAD_BD;
var
ConectionST:string;

begin
ConectionST:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=LIB\'+Global_test+'.mdb;jet oledb:database password="'+BDpass+'";Persist Security Info=False;';
FrmMain.ADOConnection.Connected:=false;
FrmMain.ADOConnection.LoginPrompt:=false;
FrmMain.ADOConnection.ConnectionString:=ConectionST;
FrmMain.ADOConnection.Connected:=true;
showmessage('БД Загружена');
end;



procedure TfrmMain.Button1Click(Sender: TObject);
begin
if chekFile then showmessage('Check ok');
end;


procedure TfrmMain.Button2Click(Sender: TObject);
begin
Global_test:='bd';
LOAD_BD;
end;

end.

PM MAIL   Вверх
Akella
Дата 31.5.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 2
Всего: 329



Тебе же там на русском написали, что путь неправильный.
PM MAIL   Вверх
Norfonzor
Дата 1.6.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



этот путь правильный в том то и дело, я подозреваю что происходит сбой на уровне  OLE. Сбой происходит только после открытия Word/Excel/Power Point. если не открывать Word/Excel/Power Point то БД работает отлично.

PM MAIL   Вверх
chip_and_dayl
Дата 2.6.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: нет
Всего: 9



Norfonzor
Приколистsmile

Добавлено через 22 секунды
Путь на скрине точно-точно проверял!?!

Добавлено через 1 минуту и 40 секунд
А то когда я сразу жму на кнопку загрузить то  путь получается один.
А  если я жму открыть документ, а потом открыть базу, то что я вижу. Путь уже левый, берется тот откуда я открывал документ, а базы там и близко нету

Добавлено через 2 минуты и 8 секунд
Код

LIB\'+Global_test+'.mdb

Вот это меня сразу смутило


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.