2014-01-31 1 views
1

Это лишний вопрос. Есть ли динамический массив или список в процессе 10.2B?Динамический массив или размер расширяются?

Пример:

создать базовый класс под названием "InventoryTransaction". Я прочитал таблицу MSSQL из Progress и хотел бы создать экземпляр класса InventoryTransaction для каждой найденной записи, а затем добавить его в «список/массив», чтобы впоследствии обработать их.

Есть ли что-то вроде MyArray: Добавить (MyItem), который автоматически увеличит размер массива +1, а затем добавит экземпляр MyItem в массив?

Я обнаружил функцию EXTENT для динамического изменения размера массива, но я не знаю счетчика перед чтением всей транзакции в таблице MSSQL. В качестве альтернативы, я мог бы выполнить «select count (*) из MyTable», прежде чем читать всю транзакцию, чтобы получить счет, а затем расширить массив.

Спасибо! С Днем пятницы! Sebastien

ответ

0

Короткий ответ: нет, 10.2B AVM не позволяет динамически изменять размер массива.

Долгий ответ: вы можете (a) добавить объект в связанный список объектов или (b) создать временную таблицу с полем Progress.Lang.Object, создать новую запись TT для каждого экземпляра объекта вы хотите отслеживать и назначать указатель объекта на поле PLO TT.

+1

Мне нравится связанный объект списка объектов. Я думаю, что создам базовый класс с помощью метода «предыдущий», «следующий», «добавить» и «удалить». Спасибо! –

2

Вы можете создать «неопределенные» массивы. т.е.

define variable x as decimal extent no-undo. 

Неопределенный переменная массива может быть в одном из двух состояний: фиксированной или нефиксированной, то есть он либо имеет фиксированный размер, либо нет. Неопределенная переменная массива имеет незафиксированный размер при первом определении. Вы можете зафиксировать размер неопределенном переменной массива с помощью:

  • Инициализация значений массива при определении переменной,

  • Использование изначальным вариантом

  • Установка количества элементов в переменная массива

  • Использование EXTENT о

  • Назначение определенного массива неопределенному массиву, его привязка к размеру детерминированного массива

  • Передача параметров массива в процедуру, определяемую пользователем или на основе класса, предназначаться для прохождения детерминированного массива, фиксируя неопределенный массив размерности детерминированного массива

После того, как фиксированный, ABL обрабатывает фиксированный неопределенный массив в качестве детерминированного массива.

+0

Спасибо Том за ваши отзывы! Это подход, который был использован на данный момент. Это просто мы не знаем, сколько предметов заблаговременно. –

+0

Типичный подход Тима в этом случае имеет большой смысл. –

1

Я только что обнаружил progress.lang.object:

FILE: массив.р

/* declaration */ 
DEFINE TEMP-TABLE arrITem 
    FIELD Item AS CLASS PROGRESS.lang.OBJECT. 

DEFINE VARIABLE oItem AS CLASS Item NO-UNDO. 
DEFINE VARIABLE i AS INTEGER NO-UNDO. 

/* create 10 products */ 

DO i = 1 TO 10: 
    CREATE arrItem. 
    arrItem.Item = NEW Item("Item_" + STRING(i), "Description_" + STRING(i)). 
END. 

/* display object information */ 
FOR EACH arrItem: 
    ASSIGN oItem = CAST(arrItem.Item,Item). 
    DISPLAY oItem:ItemNo. 
END. 

FILE: item.cls

CLASS Item: 


    DEFINE PUBLIC PROPERTY ItemNo AS CHARACTER 
     GET. 
     SET. 

    DEFINE PUBLIC PROPERTY DESCRIPTION AS CHARACTER 
     GET. 
     SET. 

    /* constructor */ 
    CONSTRUCTOR PUBLIC Item(): 
    END. 

    CONSTRUCTOR PUBLIC Item(
     INPUT strItemNo AS CHARACTER 
     ,INPUT strDescription AS CHARACTER 
     ): 

     ASSIGN ItemNo = strItemNo. 
     ASSIGN DESCRIPTION = strDescription. 
    END. 

END CLASS. 

Спасибо! Sebastien

 Смежные вопросы

  • Нет связанных вопросов^_^