Извлечь все имена в многострочный блок - PullRequest
0 голосов
/ 03 января 2019

У меня есть таблицы, которые выглядят так:

tbl1
+---------+
|c_no     |
+---------+
|1        |
+---------+

tbl2
+----------+---------+
|tbl1_c_no |s_name   |
+----------+---------+
|1         |A        |
|1         |D        |
+----------+---------+

Моя форма:

enter image description here

usage Базовая таблица 1-го блока используется tbl1.
◘ Поле C_NO генерируется автоматически с использованием последовательности. (Требуется).
◘ S_GR - это просто несвязанный элемент. (не требуется).
Usage Базовая таблица второго блока используется tbl2 и состоит из нескольких строк.
◘ S_NAME. (Обязательно)
◘ 1-й блок похож на родителя 2-го блока.
◘ 1-й и 2-й блок связаны с помощью c_no и tbl1_c_no

Например, если я хочу добавить некоторые данные, это выглядит так:

enter image description here

Затем нажмите F10 для сохранения:

enter image description here

tbl1 will be:
+---------+
|c_no     |
+---------+
|1        |
|2        |
+---------+

tbl2 will be:
+----------+---------+
|tbl1_c_no |s_name   |
+----------+---------+
|1         |A        |
|1         |D        |
|2         |B        |
|2         |C        |
|2         |E        |
+----------+---------+

И моя проблема в том, что я хотел получить s_names из моей 3-й таблицы во 2-й блок.

tbl3
+----------+---------+
|s_gr      |s_name   |
+----------+---------+
|80        |F        |
|85        |G        |
|84        |H        |
|84        |I        |
|80        |J        |
+----------+---------+

Как это:

enter image description here

затем, после выхода из поля S_GR, он извлечет S_NAME из таблицы tbl3, в которой S_GR = 80, во второй блок

enter image description here

1 Ответ

0 голосов
/ 03 января 2019

Вы можете создать два блока:

  • для 1-го , чтобы иметь блок с без базовой таблицы , создать вручную, просто коснувшись узла Data Blocks с курсором мыши, а затем переключая значок создания ( зеленый плюс подпишите ) и введите имя blk_no. И добавьте поле s_no на холсте.

  • для 2-го одного использования Data Block Wizard и выберите Table or View type для типа блока. Там выберите таблицу ( tbl1 ) в обоих столбцах (s_no и name) как Database Items.

    И тогда формы должны вызывать Layout Wizard автоматически по умолчанию, где выбрать только name столбец как отображается и оставить s_no скрытым. Назовите блок как blk_names. Это блок base-table , а Data Source Name блока blk_names - это таблица tbl1 .

    Кстати, установите Number of Records Displayed свойство в качестве 10 в качестве примера и преобразуйте имя поля name в snames, как в вашем вопросе.

    Установить для блока WHERE пункт База данных узел) значение s_no = :blk_no.s_no в палитре свойств. После все, создайте триггер KEY-NEXT-ITEM в поле s_no со встроенным код:

    go_block('blk_names');
    execute_query;
    

Во время выполнения вы можете ввести целочисленное значение ( давайте дадим 1 в качестве примера ) для s_no и заполнить поле names, нажав enter key ( записи с A и D появится )

Кнопка может быть добавлена ​​с триггером WHEN-BUTTON-PRESSED, имеющим код:

 go_block('blk_names');
 delete tbl2;
 first_record;
while :blk_names.s_no is not null 
loop
 insert into tbl2 values(:snames);
 next_record;
end loop;   
 commit;

для заполнения и повторного заполнения таблицы tbl2 (в этом случае tbl2 заполняется записями A и D).

P.S. Подавить сообщение

FRM-40352 : получена последняя запись запроса

добавить ON-MESSAGE триггер на уровне форм с кодом:

if message_code = 40352 then 
    null;
end if; 
...