Createoleobject delphi ошибка

Требуется подключиться к какому-нибудь офисному приложению через ole (скажем, к word), что делаем в таком случае? Всё просто, помещаем в переменную типа Variant выражение CreateOleObject('Word.Application') и дальше по накатанной. Но так оно только кажется. Процедуру CreateOleObject он не опознаёт, благополучно выдаёт ошибку — компиляция прерывается. Теперь лезем в Delphi 7 открываем созданный в Delphi XE проект… после непродолжительной ругани (непродолжительной, т.к. проект – пустая форма) программа благополучно компилится, CreateOleObject срабатывает нормально. Но на этом мы не останавливаемся – снова лезем в Delphi XE, открываем перекомпиленный проект – и снова всё замечательно. Никакие новые модули не подключаются, что происходит – непонятно.

То есть в итоге всё работает, но наверняка этого можно было добиться и другими методами. Хотелось бы узнать, что я делаю не так и что надо делать.
ОС – Windows 7 Ultimate x64 (если это имеет значение).

2 / 2 / 0

Регистрация: 25.10.2010

Сообщений: 56

1

07.04.2011, 18:23. Показов 16160. Ответов 5


Студворк — интернет-сервис помощи студентам

Здравствуйте! помогите разобраться!

я набрал код для экспорта данных из БД а Excel, но выдается такая вот ошибка..

[Error]unit4.pas[144]:Undeclared identifier’CreateOleObject’



0



iama

1337 / 988 / 119

Регистрация: 30.07.2010

Сообщений: 5,297

07.04.2011, 18:24

2

почему вы код не выложили?

Добавлено через 49 секунд

Delphi
1
uses ..., ComObj;



4



2 / 2 / 0

Регистрация: 25.10.2010

Сообщений: 56

07.04.2011, 18:28

 [ТС]

3

спасибо за подсказку, да программа длинная очень!! помогло!!!



1



3 / 3 / 0

Регистрация: 23.03.2015

Сообщений: 15

24.07.2015, 13:52

4

Действительно, ответ короткий, но действенный



0



0 / 0 / 0

Регистрация: 20.12.2018

Сообщений: 1

10.12.2019, 13:08

5

Spasibo



0



aminodovborisov

0 / 0 / 0

Регистрация: 03.12.2019

Сообщений: 7

10.01.2020, 12:11

6

У меня ещё интереснее.

Pascal
1
uses ...ComObj;

Это присутствует, ошибка сохраняется.
Вот полный листинг:

Pascal
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
36
37
unit srtMain;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ComObj;
 
type
  TForm1 = class(TForm)
    btnSelectIntFile: TButton;
    procedure btnSelectIntFileClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
  {$R *.dfm}
 
  procedure TForm1.btnSelectIntFileClick(Sender: TObject);
  var
      opnFileName: string;
      tossACoin: Variant;
  begin
    if dlgOpenInpFile.Execute then
    begin
      opnFileName := dlgOpenInpFile.FileName;
      tossACoin := CreateOleObect('Excel.Application');
    end;
  end;
end.

Добавлено через 8 минут
UPD. Как известно, чем мельче и незаметнее ошибка, тем фатальнее последствия.
У меня там CreateOleObect вместо CreateOleObject.



0



    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    user posted image

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

    Соблюдайте общие правила форума

    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как запустить программу/файл? (и дождаться ее завершения)
    5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
    … (продолжение следует) …


    Внимание:
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки — бан.
    Мат в разделе — бан на три месяца…


    Полезные ссылки:
    user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


    Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

    >
    Ошибка при вызове CreateOleObject()
    , как устранить ошибку?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    28.05.06, 08:53

      У меня следующий код:

      ExpandedWrap disabled

        procedure TForm1.Button1Click(Sender: TObject);

        var

          vExcel:Variant;

        begin

          try

            vExcel:=GetActiveOleObject(‘Excel.Application’);

          except

            try

              vExcel:=CreateOleObject(‘Excel.Application’);

            except

              ShowMessage(‘Excel open error’);

            end;

          end;

        end;

      Обе OLE фунции выдают ошику ‘Microsoft Office Excel — обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства’.

      Как выяснилось ошибку генерирует DW32.exe.
      В чем здесь дело и как с этим бороться.

      Master

      Krid



      Сообщ.
      #2

      ,
      28.05.06, 23:21

        Moderator

        ******

        Рейтинг (т): 237

        Цитата y307 @ 28.05.06, 08:53

        Как выяснилось ошибку генерирует DW32.exe

        А что есть DW32.exe ?


        y307



        Сообщ.
        #3

        ,
        29.05.06, 00:32

          Находится в Program FilesCommon FilesMicrosoft SharedDWDW20.EXE и назывыется
          «Microsoft Application Error Reporting»
          Можно также эапустить утилитой 2003-го офиса «Восстановление приложений Microsoft Office»

          Master

          Krid



          Сообщ.
          #4

          ,
          29.05.06, 04:43

            Moderator

            ******

            Рейтинг (т): 237

            Понятно. А офис переустановить не пробовал?


            Mr.Delphist



            Сообщ.
            #5

            ,
            29.05.06, 22:42

              DW32 — это Доктор Ватсон, системная тулза, которая рапортует об ошибках.
              Попробуй
              vExcel: OLEVariant;
              Если не поможет — пробуй на сыром API вызвать CreateInstance и посмотреть HRESULT-код ошибки. Возможно, в самом деле надо офис переустановить.

              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

              0 пользователей:

              • Предыдущая тема
              • Delphi: Система, Windows API
              • Следующая тема

              Рейтинг@Mail.ru

              [ Script execution time: 0,0255 ]   [ 16 queries used ]   [ Generated: 3.06.23, 23:37 GMT ]  

               
              denary
               
              (2003-03-14 01:30)
              [0]

              Undeclared identifier: «CreateOleObject» Уважаемые мастера, помогите утопающему! Не могу выкинуть DataSet в Excel.

              Что ему сделать, чтоб оно заработало? Вот текст процедуры:

              uses ….. Variants, Excel2000, ADODB;

              …..

              procedure TForm2.ToExcelClick(Sender: TObject);

              var

              BeginCol, BeginRow, j :integer;

              RowCount, ColCount :integer;

              ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData :Variant;

              Begin

              BeginCol:=1;

              BeginRow:=9;

              RowCount:=Form2.Query1.RecordCount;

              ColCount:=Form2.Query1.FieldDefs.Count;

              ExcelApp := CreateOleObject(«Excel.Application»); — не работает, выдает ошибку

              {ExcelOLEObject1.Create(Query1);

              ExcelApp := ExcelOLEObject1.Copy;}

              ExcelApp.Application.EnableEvents:=false;

              Workbook:=ExcelApp.WorkBooks.Add(«D:usersGeo1.xls»);

              ArrayData:=VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

              Form2.Query1.DisableControls;

              Form2.Query1.First;

              While Not Form2.Query1.Eof do

              begin

              for J:=1 to Form2.Query1.FieldDefs.Count do

              begin

              ArrayData[Form2.Query1.RecNo, J]:=Form2.Query1.Fields[j-1].Value;

              End;

              Form2.Query1.Next;

              End;

              Form2.Query1.EnableControls;

              Cell1 :=WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];

              Cell2 :=WorkBook.WorkSheets[1].Cells[BeginRow + RowCount -1, BeginCol + ColCount -1];

              Range:= WorkBook.WorkSheets[1].Range[Cell1, Cell2];

              Range.Value:=ArrayData;

              ExcelApp.Visible:=true;

              end;


               
              theodor_iv
               
              (2003-03-14 03:51)
              [1]

              В uses дописать модуль ComObj


               
              denary
               
              (2003-03-18 00:55)
              [2]

              В uses дописал все, что можно было. Не работает!

              Может кто-нибудь объяснить?


               
              theodor_iv
               
              (2003-03-18 03:38)
              [3]



              > ExcelApp := CreateOleObject(«Excel.Application»); — не работает,

              > выдает ошибку



              Может, хотя бы скажешь, какая ошибка?


               
              denary
               
              (2003-03-21 01:17)
              [4]

              Ошибку написал в самом начале:

              Undeclared identifier: «CreateOleObject»


               
              Palladin
               
              (2003-03-21 01:37)
              [5]



              > denary (21.03.03 01:17)



              тебе в самом начале ответили

              uses comobj;


               
              denary
               
              (2003-03-22 01:00)
              [6]

              Спасибо за помощь, работает.

              Была грамматическая ошибка.

              Господа мастера, извините за тупость :(


              In a Delphi XE7 64-bit VCL program, the unit Vcl.OleAutocannot be found:

              [dcc64 Fatal Error] Unit1.pas(33): F1026 File not found: 'Vcl.OleAuto.dcu'

              While it works without problems in a 32-bit program:

              uses
                Vcl.OleAuto;
              ...
              FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
              

              So how can I use CreateOleObject in a 64-bit program?

              asked Feb 20, 2015 at 13:50

              user1580348's user avatar

              user1580348user1580348

              5,6914 gold badges41 silver badges102 bronze badges

              0

              Although the source code for Vcl.OleAuto is still supplied, the 64 bit lib directory does not include Vcl.OleAuto.dcu. Instead you are expected to use System.Win.ComObj and/or System.Win.ComServ. Note that the source for Vcl.OleAuto marks that unit as being deprecated, and tells you what to use instead.

              If we look through the source for Vcl.OleAuto we can find some 32 bit asm code that has not been ported. Presumably Embarcadero decided not to port this to 64 bit because the unit is deprecated.

              answered Feb 20, 2015 at 14:08

              David Heffernan's user avatar

              David HeffernanDavid Heffernan

              599k42 gold badges1064 silver badges1481 bronze badges

              0

              Понравилась статья? Поделить с друзьями:
            • Createobject wscript shell ошибка
            • Createobject excel application ошибка
            • Create table if not exists ошибка
            • Create sequence ошибка
            • Create process код ошибки 740