OberonCore
https://forum.oberoncore.ru/

Чтение из таблиц MS SQL7
https://forum.oberoncore.ru/viewtopic.php?f=35&t=1030
Страница 2 из 2

Автор:  Valery Solovey [ Вторник, 06 Январь, 2009 17:13 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

Почему ошибочный? Вполне нормально. Меня лично на этом пути почти всё устраивает.

Автор:  Пётр Кушнир [ Вторник, 06 Январь, 2009 17:18 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

ну, в качестве решения задачи "изменение размеров формы" размещение контролов в составном документе мне кажется ошибочным/неверным/"не в ту степь". Хотя само по себе размещение бывает полезно, да, не спорю.

Автор:  Алексей_В [ Среда, 07 Январь, 2009 18:06 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

Спасибо, с формами многое прояснилось. Еще подскажите, пожалуста. После двойного клика по гриду, надо чтобы открылось новое окно с полями для редактирования полей таблицы (как вводить данные в таблицу из полей разобрался) Как правильно отловить двойной клик на строке грида? Почитав Help пришел к такой процедуре - notifier для грида; в свойствах грида стоит выбор - только строка целиком, редактирование отключено:

PROCEDURE GridNotify* (op, from, to: INTEGER);
VAR PrKey: Dialog.String;
BEGIN

IF op=StdTables.select THEN
FFrom:=from;
TTo:=to;
CellSel:=1; (*Признак того, что хотя бы один раз выбиралась ячейка*)
Strings.IntToString(FFrom,RecW.Field0);
Strings.IntToString(TTo,RecW.Field1); (*Выводим координаты выбранной ячейки*)
Gridtable.GetItem(FFrom, 0,PrKey); (*Получаем из таблицы например первичный ключ*)
RecW.Field2:=PrKey$;
Dialog.Update(RecW);
END;

IF (op = Dialog.pressed) & (from = 1) & (CellSel=1) THEN
(*Ловим двойной клик*)
StdCmds.OpenAuxDialog('Aleks\Rsrc\SqlAdd.odc', 'Ввод данных');
END;

END GridNotify;

На всякий случай ввел несколько глобальных переменных (CellSel, FFrom, TTo: INTEGER) для хранения значений - ведь при простом двойном клике по гриду процедура автоматически вызывается несколько раз...
Получилось вполне работоспособно, но как-то не правильно. Во-первых, как отсеять например двойной клик не в строке, а по заголовку столбца (если кликнули по столбцу, не стоит ведь вызывать диалог изменения даных; Кстати, тут еще момент. Предположим, что строка была выбрана. Когда мы по ней опять щелкаем два раза, чтоб например отредактировать, событие StdTables.select не возникает, а возникает только Dialog.pressed, точно такое же, как и при клике на столбце ... Т.е. можно видимо только отличить, было оно двойное или нет, а не то, щелкали по строке или вне ее ) И как сделать, чтоб процедура срабатывала только по левой кнопке мыши, а не по любой, как сейчас?

Автор:  Пётр Кушнир [ Среда, 07 Январь, 2009 19:53 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

В самом общем случае двойной клик отлавливается вот так:
Код:
PROCEDURE TableNotifier* (op, from, to: INTEGER);
   BEGIN
      IF op = Dialog.changed THEN (* клик *)
      ELSIF (op = Dialog.pressed) & (from = Dialog.pressed) THEN (* двойной клик *)
      END
   END TableNotifier;

То, что табличный контрол возвращает вам "двойной клик" после клика по заголовку и при клике любой кнопкой это, как мне кажется, недоработка таблицы. Решение для первой проблемы: отключить возможность кликать по заголовку. Для второй: можно использовать обёртку над табличным контролом, проще ничего не приходит в голову.

Автор:  Алексей_В [ Пятница, 23 Январь, 2009 14:05 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

Приветствую!
Подскажите, пожалуста. Туплю. Решение с отловом двойного клика (по таблице например) подсмотрел в документации - IF (op = Dialog.pressed) & (from = 1) THEN ....
или например как любезно советовали: (op = Dialog.pressed) & (from = Dialog.pressed)

(кажется это одно и тоже, т.к. pressed в модуле dialog является константой, и равно 1)
Но не могу понять - почему именно при двойном клике from равно 1? Где это следует из документации?
(Я так понимаю, что после первого клика from содержит 0, а после второго - 1)
В описании модуля Dialog я нашел только, там где обсуждается процедура уведомления, что from-to означает некий диапазон. Что за диапазон кстати? Выделенных ячеек например?
И когда используется такая сигнатура этой процедуры: PROCEDURE (n, op, from, to: INTEGER)
С параметром n ?

Автор:  Пётр Кушнир [ Пятница, 23 Январь, 2009 15:45 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

Алексей_В писал(а):
Но не могу понять - почему именно при двойном клике from равно 1? Где это следует из документации?
По-моему это имеет примерно следующий смысл: "из нажатого в нажатое", то есть не два отдельных клика, а один за другим. Не уверен, что где нибудь есть описание сего факта, может быть в Controllers.
Алексей_В писал(а):
from-to означает некий диапазон. Что за диапазон кстати? Выделенных ячеек например?
Это зависит от реализации контрола. Не уверен, что имелись ввиду именно ячейки таблицы StdTables. Вполне возможно, что речь идёт о Selection Box.
Алексей_В писал(а):
И когда используется такая сигнатура этой процедуры: PROCEDURE (n, op, from, to: INTEGER)С параметром n ?
По-моему, она используется в диалоге настройки свойств таблицы, и только там.

Автор:  Клоп Говорун [ Суббота, 24 Январь, 2009 22:24 ]
Заголовок сообщения:  Re: Чтение из таблиц MS SQL7

Как вариант,можно строчить ADO в VB стиле ,так как обертки для ADO в обероне нет.
Я давал где-то кусок кода с коннектом и выборкой данных. :D

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/