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 в обероне нет. Я давал где-то кусок кода с коннектом и выборкой данных. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |