Конференция "Corba" » Дает ошибку при использовании OLE [Delphi, Windows]
 
  • KIRAT © (01.07.08 17:58) [0]
    Доброго времени суток.

    Вот надо при помощи OLE сделать программу, описание в внутри на Visul Basic делаю на 1С получается. А на Delphi не хочет, подскажите, пожалуйста, в чем причина.
    Вот пример на 1с:
    Mpos = CreateObject("CashTANP9.Application");  
    crt = Mpos.CashTANs.Item(1);
    crt.StartConnection();
    Colecti = crt.Sections;
    For c = 1 to Colecti.Count do
     Colecti = Colecti.Item(c);
        Message(Colecti.Name);  
    EndDo;

    Вот пример на Delphi:
    var        i:integer;
         mpos:Variant;
            crt:Variant;
       Colecti:Variant;
    begin
    mpos:=CreateOleObject('CashTANP9.Application');
    crt := Mpos.CashTANs.Item(1);
    crt.StartConnection();
    Colecti := crt.Sections;
     for i:=1 to Colecti.Count do
       begin
       Colecti := Colecti.Item(i);
        memo1.Lines.Add(Colecti.Name);
       end;
    end;

    При попытке выполнить
    crt := Mpos.CashTANs.Item(1);
    выдает ошибку ”Project Project1.exe raised exception class EOleSysError with message ‘Член группы не найден’. Process stopped. Use Step or Run to continue.”

    Может, подскажите, в чем проблема.

    Всем заранее спасибо.
  • Сергей М. © (01.07.08 19:09) [1]
    Проблема в элементарном незнании Object Pascal.


    >
    > При попытке выполнить
    > crt := Mpos.CashTANs.Item(1);


    При этой попытке ты пытаешься вызвать функциональный метод по имени Item объекта Mpos, каковой, разумеется, не существует, о чем как раз и говорит текст сообщения об ошибке.

    Item - это свойство типа элемент коллекции, в Object Pascal обращения к такого типа свойствам выглядит как обращение к свойству типа элемент массива, а обращение к элементу массива в Паскале подразумевает заключение индекса этого элемента в квадратные скобки.
  • KIRAT © (02.07.08 12:25) [2]
    Да действительно. Большое спасибо(буду знать на бедующие).
    Но возникла другая проблема, при выполнении кода
    for i:=1 to Colecti.Count do
      begin
      Colecti := Colecti.Item(i);
       memo1.Lines.Add(Colecti.Name);
      end;
    Возникает ошибка
    „Method ‘Item’ not supported by automation object”

    В самой инструкции написано так:
    Совет: Для перебора всех компонентов коллекции желательно использовать конструкцию For Each...Next

    И пример:
    Dim cta As New CashTANP9.Application
    Dim dc As CashTANP9.DiscountCards
    Dim flds as CashTANP9.Fields
    Dim fld as CashTANP9.Field

       Set dc = cta.DiscountCards
       Set flds = dc.Fields
       For Each fld In flds
           Debug.Print fld.Name
       Next

    Но как это реализовать в Object Pascal?
  • KIRAT © (02.07.08 12:28) [3]
    то есть вот так:

    > for i:=1 to Colecti.Count do
    >begin
    > Colecti := Colecti.Item[i];
    >memo1.Lines.Add(Colecti.Name);
    >end;
  • Сергей М. © (02.07.08 13:05) [4]

    > как это реализовать в Object Pascal?


    Вот так:

    for i:=1 to Colecti.Count do
     begin  
      memo1.Lines.Add(Colecti[i].Name);
     end;
  • KIRAT © (02.07.08 13:32) [5]
    Почти! Пишет неправельный аргумент!

    А правильно оказалось:
    for i:=1 to Colecti.Count do
    begin
     memo1.Lines.Add(Colecti.item[i].Name);
    end;

    Большое спасибо! Но почему пока непонял!
 
Конференция "Corba" » Дает ошибку при использовании OLE [Delphi, Windows]
Есть новые Нет новых   [120357   +35][b:0][p:0]