Пётр Кушнир писал(а):
в Блэкбоксе контрол связан с вашим кодом через
интерактор определённого типа.
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')