Адрес этой странички : http://doc-prg.narod.ru/art_00004/art_00004.htm
© 28.07.2007 Сергей Попов
Здесь следует отметить, что приведенная ниже статья носит
чисто иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного
обмена крайне рекомендуется использовать фирменное техническое описание системы
1Cv8.
1Cv8 + Delphi-5.
OLE (COM).
Считывание информации.
Справочники.
Чтение реквизитов (примитивного типа) справочника
Статью в виде файла (364 кб) можно скачать здесь: art_00004.zip
В предыдущих статьях [2]
[3]
были рассмотрены вопросы считывания из справочников
информации об элементах и группах на уровне
кода и наименования. Считывание
информации о реквизитах справочников,
имеющих примитивный тип (число, строка, дата)
ничем не отличается от считывания кода и
наименования справочника.
Рассмотрим это на конкретном примере (справочник КнигиВидеоАудио из базы данных HomeLib).
Напомню, что реквизиты справочника имеют следующие атрибуты :
Идентификатор реквизита |
Тип | Вид | Размер | Точность | Индекс |
Авторы | Строка | - | 100 | - | + |
Издательство | Строка | - | 100 | - | + |
Издание | Строка | - | 50 | - | - |
ДатаИздания | Дата | - | - | - | + |
Цена | Число | - | 15 | 2 | - |
Количество | Число | - | 5 | 0 | - |
ДополнительнаяИнформация | Строка | - | неограниченная длина | - | - |
За основу возьмем проект
из предыдущей статьи.
Лишь заменим Delphi-компонент ListBox1 на
компонент класса TStringGrid.
Рис.1 Форма проекта Load_from_SbCnt_OLE.dpr
Сделаем соответствующие изменения в обработчике события : создание формы (то, что связано с инициализаций компонента TStringGrid) :
Далее, изменим обработчик события : нажатие на кнопку "бегущие человечки" (поскольку исчез Delphi-компонент ListBox1) :
Изменим обработчик события : щелчок по компоненту TTreeView (визуализация элементов группы справочника) :
Как видно, процесс считывания реквизитов (примитивного типа) элементов справочника - ничем не отличается от считывания кода и наименования элементов справочника.
Скомпилируем наш проект и запустим его на выполнение.
Результат считывания значений реквизитов справочника "КнигиВидеоАудио" :
Точно таким же образом можно прочитать значение реквизита типа "Строка неограниченной длины".
Проверим это на практике.
Создадим новую форму (Form_MemoView) :
Создадим метод Execute формы :
procedure
TForm_MemoView.Execute(Sx : string);
begin
RichEdit1.Lines.Text:=Sx;
ShowModal;
end;
Создадим обработчик события : двойной щелчок мышкой по компоненту TStringGrid :
Скомпилируем наш проект и запустим его на выполнение.
Ниже представлен результат считывания реквизита ДополнительнаяИнформация справочника КнигиВидеоАудио.
Рис. Визуализация с помощью
функции ShowMessage
Рис. Визуализация значения
реквизита ДополнительнаяИнформация
в контексте созданной выше формы.
Как видно, значение реквизита
ДополнительнаяИнформация содержит
специальный символ, который никак не
интерпретируется при визуализации.
ASCII-код этого символа = 182 (десятичное значение) или B6 (шестнадцатиричное значение)
Очевидно, что назначение этого
символа в контексте системы 1Cv8 - перевод
строки.
Поэтому, изменим метод Execute формы следующим
образом :
procedure TForm_MemoView.Execute(Sx : string);
begin
Sx:=sp_ReplaceCharInString(Sx,$B6{182},10);
RichEdit1.Lines.Text:=Sx;
ShowModal;
end;
Текст функции sp_ReplaceCharInString
здесь не приводится.
Ее назначение : заменить символы с asci--кодом=$B6
на символы с ascii-кодом=10 (LF
или перевод строки).
Результат очевиден :
Исходные тексты этого проекта можно взять здесь (29 кб) : load_from_sbcnt_ole_v03.zip
Здесь можно скачать базу данных
HomeLib (20 кб) : homelib_01a.zip
© 28.07.2007 Сергей Попов