OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 10 Июль, 2020 15:22

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 26 Апрель, 2012 11:42 
Аватара пользователя

Зарегистрирован: Четверг, 10 Сентябрь, 2009 18:14
Сообщения: 16
ДД!
Подскажите как сделать сабж?
Есть форма с полем ввода и таблицей.
при вводе в поле переписывается запрос и переоткрывается таблица.
я то в доке нашел как из StdTables.Table получить значение
Код:
   (VAR tab: Table) GetItem (row, col: INTEGER; OUT item: Dialog.String), NEW;
   (VAR tab: Table) GetSelection (OUT row, col: INTEGER), NEW;


главный вопрос: как в коде модуля получить ссылку на таблицу если она уже лежит на форме?

вопрос обобщается до: как в коде модуля получить ссылку на контрол если он уже лежит на форме?


Вложения:
pos-adm.v1.png
pos-adm.v1.png [ 22.62 КБ | Просмотров: 3820 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Апрель, 2012 11:53 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Так тут контрол и не нужен, работайте с интерактором StdTables.Table!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Апрель, 2012 11:57 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2651
Откуда: Россия, Ярославль
в Блэкбоксе контрол связан с вашим кодом через интерактор определённого типа.
http://i.minus.com/ibhVciFBX07TX.PNG


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Апрель, 2012 14:28 
Аватара пользователя

Зарегистрирован: Четверг, 10 Сентябрь, 2009 18:14
Сообщения: 16
Пётр Кушнир писал(а):
в Блэкбоксе контрол связан с вашим кодом через интерактор определённого типа.
http://i.minus.com/ibhVciFBX07TX.PNG

но у меня этот интекактор типа SqlDB.Table ! :-(

Код:
MODULE OraAdmin;

IMPORT Dialog, Views, TextModels, TextControllers, SqlDB, SqlControls, StdTables, StdCmds;
VAR

TConnectionDescr*: RECORD
    UserName* : ARRAY 30 OF CHAR;
    Password* : ARRAY 1024 OF CHAR;
    Database*,
    Driver* : ARRAY 30 OF CHAR;
END;

TFilter* : RECORD
    likeName*: ARRAY 30 OF CHAR;
END;

table*: SqlDB.Table;   
stdTable*: StdTables.Table;   
db:  SqlDB.Database;

PROCEDURE GetDB*();
VAR
    res: INTEGER;
BEGIN
   SqlDB.OpenDatabase(TConnectionDescr.Driver,
           TConnectionDescr.UserName, TConnectionDescr.Password, TConnectionDescr.Database,
                  SqlDB.async, SqlDB.showErrors, db, res);
         IF res = 0 THEN
            table := db.NewTable();
            Dialog.ShowMsg("#Sql:Connected & table RESERVED");
            StdCmds.OpenAuxDialog("Ora/Rsrc/ListOraUser", "ORACLE USERS EDITOR");
         ELSIF res <= 3 THEN
            Dialog.ShowMsg("#Sql:CannotLoadDriver")
         ELSE
            Dialog.ShowMsg("#Sql:ConnectionFailed")
         END;
END GetDB;

   PROCEDURE CheckResult (tab: SqlDB.Table; par: ANYPTR);
      VAR v: Views.View;
   BEGIN
      IF tab.res = 0 THEN
         IF tab.columns > 0 THEN
            v := SqlControls.dir.NewTableOn(tab);
            Views.OpenAux(v, "#Sql:Result");
         ELSE Dialog.ShowMsg("#Sql:StatementExecuted")
         END
      ELSE Dialog.ShowMsg("#Sql:ExecutionFailed")
      END;
   END CheckResult;

PROCEDURE ExecThis(stmt: ARRAY OF CHAR; table : SqlDB.Table);
VAR
   v : Views.View;
BEGIN
      IF (stmt # "") & (table # NIL) THEN
         (* allocate separate table to allow for multiple open tables *)
         table.Clear();
         table.Exec(stmt);
         Dialog.Update(table);
         (* separate result check from execution to allow for asynchronous operation *)
            (*   table.Call(CheckResult, NIL);   *)
(*                v := SqlControls.dir.NewTableOn(table); *)
      END;
END ExecThis;

PROCEDURE OpenConnectDlg* ();
BEGIN
 StdCmds.OpenToolDialog('Ora/Rsrc/TConnectionDescrDlg', 'Connect to ...');
END OpenConnectDlg;

PROCEDURE OraUsersFilterNotifier* (op, from, to: INTEGER);
VAR
      stmt : ARRAY 1024 OF CHAR;
BEGIN
     stmt := "select * from dba_users where username like '%" +TFilter.likeName + "%'" ;
     ExecThis(stmt  , table)  ;
    Dialog.ShowMsg("Executed");
END OraUsersFilterNotifier;

PROCEDURE OraUsersListNotifier* (t: SqlDB.Table; row, column: INTEGER; modifiers: SET);
BEGIN
   
    Dialog.ShowMsg("OraUsersListNotifier");

END OraUsersListNotifier;



BEGIN

   TConnectionDescr.Driver := "SqlOdbc3";
   TConnectionDescr.UserName := "POSITION";
   TConnectionDescr.Password := "";
   TConnectionDescr.Database := "PROG.WORLD";

END OraAdmin.

StdCmds.OpenAuxDialog('TConnectionDescrDlg', 'Connect')


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Апрель, 2012 15:21 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Ага, у вас же SqlControls.Control, а он поддерживает такой фокус :) Думаю, что надо работать напрямую через уведомитель, с переменной t: SqlDB.Table.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Май, 2012 17:48 
Аватара пользователя

Зарегистрирован: Четверг, 10 Сентябрь, 2009 18:14
Сообщения: 16
Не могу понять как сделать чтобы формы открывались независимо?
Интуитивно я понимаю что они должны быть связаны с разными интеракторами,
но как это сделать я не понимаю.
подскажите, плиз.

вот на скриншоте 2 формы одинаковые. а хочется чтобы они были связаны с разными коннектами к базе.
и кстати: есть в ББ аналог понятия "align" как в Delphi? чтобы они автоматически меняли размеры при изменении формы
и прилипали к краям, ну я думаю все понимают о чем речь.


Вложения:
Комментарий к файлу: вот на скриншоте 2 формы одинаковые. а хочется чтобы они были связаны с разными коннектами к базе.
ora.png
ora.png [ 173.55 КБ | Просмотров: 3710 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Май, 2012 18:17 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
По первому пункту не подскажу, поскольку с данные из БД я в таблицы никогда не выводил.

А "прилипания" в ББ нет. Из чего-то похожего самопального есть только открытие окошка лога. Если Вы заметили, то оно всегда открывается прижатым к левому краю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 19 Май, 2012 19:43 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2764
Чтобы таблица растягивалась по ширине, можете в StdTables.Paint заменить
Код:
width := c.width[col];
на
Код:
width := (w - 3*f.dot) DIV cols;

Возможно добавить опцию к объекту таблицы, и в зависимости от этой опции эту часть кода делать разной.

Совет — не бойтесь лезть в исходные коды, там, как вы поняли наверное уже, много не адаптировано под привычные сегодня задачи, но среда позволяет настроить себя очень гибко. Например, изменить способ отрисовки таблицы (шрифты, цвет заголовков и т.п.). При этом вся остальная логика не разрушится.


Последний раз редактировалось Иван Денисов Суббота, 19 Май, 2012 23:48, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 19 Май, 2012 21:11 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2651
Откуда: Россия, Ярославль
кажется, возможности StdTables вы исчерпали довольно быстро


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB