Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Property of Four Js*
|
||||
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
|
||||
# * Trademark of Four Js Development Tools Europe Ltd
|
||||
# in the United States and elsewhere
|
||||
#
|
||||
# Four Js and its suppliers do not warrant or guarantee that these
|
||||
# samples are accurate and suitable for your purposes. Their inclusion is
|
||||
# purely for information purposes only.
|
||||
|
||||
MODULES= \
|
||||
formwizard.42m \
|
||||
formwizard_old.42m
|
||||
|
||||
FORMS= \
|
||||
formwizard.42f \
|
||||
formwizard_old.42f
|
||||
|
||||
include ../../Makeincl
|
||||
@@ -0,0 +1,56 @@
|
||||
Form wizard
|
||||
-----------
|
||||
|
||||
This is an example to mimic the main component of the Microsoft Access form wizard, the dialog to choose which database columns should be handled in the generated form.
|
||||
It turned out that it is pretty easy to mimic with the help of the multiple dialogs; it behaves exactly like the original dialog (with the same logic behind and all Keyboard shortcuts).
|
||||
The code to do this is pretty short and readable.
|
||||
This dialog is used in the $FGLDIR/demo/tools/fglped program to generate a form from a list of chosen columns.
|
||||
|
||||
formwizard_old
|
||||
This example shows what you would have to do (theoretically) to program a similar dialog in 4GL without multiple dialogs available. As you can see in the wizard() function, 3 tradional dialogs are called in a loop and a lot of actions are needed to jump from one dialog to the other. 3 additional buttons are inside the form to leave the current active dialog and jump to a different dialog...pure headache!
|
||||
Unfortunately the GDC by default renders non-active tables in the same way as active tables, so the end user may think that he could click on a table and edit there; but, bummer, you must use the "Edit Left/Right" button or <Tab> to leave the current active table (Shift-Tab is not even possible).
|
||||
This example also shows why it is not sufficient to add a trigger like
|
||||
ON OTHERTABLECLICKED (demanded by a lot of our customers).
|
||||
Although it makes the "Edit Left/Right" button unnecessary, it still forces you to write such a big state loop of traditional dialogs.
|
||||
|
||||
Further Differences
|
||||
-------------------
|
||||
If you look at the code in formwizard.4gl and formwizard_old.4gl there are also differences in performing the actions.
|
||||
|
||||
|
||||
FUNCTION right(d) --multiple dialog variant
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE idx,lastC INT
|
||||
--get index of the left array; cannot use arr_curr() here because arr_curr()
|
||||
--returns the index of the current active row in the current focused table
|
||||
--which is not necessarily the right hand side array
|
||||
--the "right" action is always active regardless of the focus
|
||||
LET idx = d.getCurrentRow("a")
|
||||
LET lastC=cfields.getLength()+1
|
||||
LET cfields[lastC].ctable=afields[idx].atable
|
||||
LET cfields[lastC].ccol=afields[idx].acol
|
||||
CALL afields.deleteElement(idx)
|
||||
--set the current line to the last index
|
||||
CALL d.setCurrentRow("c",lastC)
|
||||
END FUNCTION
|
||||
|
||||
You may also note that you don't need to refresh the arrays on the screen; this is done with the ATTRIBUTES(UNBUFFERED) flag of the entire dialog. Since all arrays are active, you won't need to refresh one of them manually.
|
||||
Please note that you can do this only for DISPLAY ARRAY; for INPUT ARRAY it is strongly recommended that you don't manipulate the bound arrays with the array methods (deleteElement(), insertElement()) because this conflicts with the built-in triggers of INPUT ARRAY.
|
||||
|
||||
Now the "right" function from the formwizard_old example:
|
||||
|
||||
--move the current item to the right hand side and delete it on the left hand side
|
||||
FUNCTION right(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE idx,lastC,i INT
|
||||
LET idx = arr_curr()
|
||||
LET lastC=cfields.getLength()+1
|
||||
LET cfields[lastC].ctable=afields[idx].atable
|
||||
LET cfields[lastC].ccol=afields[idx].acol
|
||||
CALL afields.deleteElement(idx)
|
||||
FOR i=1 TO cfields.getLength()
|
||||
DISPLAY cfields[i].* TO c[i].*
|
||||
END FOR
|
||||
END FUNCTION
|
||||
|
||||
The "right" action is only active if the focus is inside the left hand side array; that's why it's possible to use arr_curr(). At the end of the function we need to redisplay the right hand side array, because it's not active (we are in a DISPLAY ARRAY of the left hand side).
|
||||
@@ -0,0 +1,239 @@
|
||||
# Property of Four Js*
|
||||
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
|
||||
# * Trademark of Four Js Development Tools Europe Ltd
|
||||
# in the United States and elsewhere
|
||||
#
|
||||
# Four Js and its suppliers do not warrant or guarantee that these
|
||||
# samples are accurate and suitable for your purposes. Their inclusion is
|
||||
# purely for information purposes only.
|
||||
|
||||
TYPE schema_rec RECORD
|
||||
table_name STRING, -- customer
|
||||
field_name STRING, -- customer_name
|
||||
field_type SMALLINT, -- 0
|
||||
field_strtype STRING, -- CHAR(30)
|
||||
field_length SMALLINT -- 80
|
||||
END RECORD
|
||||
DEFINE col_arr DYNAMIC ARRAY OF schema_rec
|
||||
DEFINE tab_arr DYNAMIC ARRAY OF STRING
|
||||
DEFINE currtable STRING --current table in combobox
|
||||
--a(vailable) fields
|
||||
DEFINE afields DYNAMIC ARRAY OF RECORD
|
||||
atable STRING,
|
||||
acol STRING
|
||||
END RECORD
|
||||
--c(hosen) fields
|
||||
DEFINE cfields DYNAMIC ARRAY OF RECORD
|
||||
ctable STRING,
|
||||
ccol STRING
|
||||
END RECORD
|
||||
-- Current wizard page
|
||||
DEFINE currpage SMALLINT
|
||||
DEFINE myd ui.Dialog
|
||||
CONSTANT TOTAL_PAGES = 5
|
||||
|
||||
MAIN
|
||||
CLOSE WINDOW screen
|
||||
CALL wizard()
|
||||
END MAIN
|
||||
|
||||
--contains the wizard MD dialog
|
||||
FUNCTION wizard()
|
||||
DEFINE i INT
|
||||
CALL readTables("stores.sch")
|
||||
OPEN WINDOW formwizard WITH FORM "formwizard"
|
||||
CALL init_tables()
|
||||
OPTIONS FIELD ORDER FORM
|
||||
DIALOG ATTRIBUTES(UNBUFFERED)
|
||||
INPUT BY NAME currtable ATTRIBUTES(WITHOUT DEFAULTS=TRUE)
|
||||
ON CHANGE currtable
|
||||
CALL on_change_currtable()
|
||||
CALL setup(DIALOG)
|
||||
END INPUT
|
||||
DISPLAY ARRAY afields TO a.* END DISPLAY
|
||||
DISPLAY ARRAY cfields TO c.* END DISPLAY
|
||||
ON ACTION right CALL right(DIALOG)
|
||||
ON ACTION allright CALL allright(DIALOG)
|
||||
ON ACTION left CALL left(DIALOG)
|
||||
ON ACTION allleft CALL allleft(DIALOG)
|
||||
ON ACTION prevwiz DISPLAY "prevwiz" EXIT DIALOG
|
||||
ON ACTION nextwiz DISPLAY "nextwiz" EXIT DIALOG
|
||||
ON ACTION cancel
|
||||
EXIT DIALOG
|
||||
ON ACTION accept
|
||||
ACCEPT DIALOG
|
||||
BEFORE DIALOG
|
||||
LET currpage = 1
|
||||
CALL setup(DIALOG)
|
||||
AFTER DIALOG
|
||||
--we just show all chosen columns in the terminal
|
||||
FOR i=1 TO cfields.getLength()
|
||||
DISPLAY sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol)
|
||||
END FOR
|
||||
END DIALOG
|
||||
LET myd=NULL
|
||||
CLOSE WINDOW formwizard
|
||||
END FUNCTION
|
||||
|
||||
--fill the combobox with all table names
|
||||
FUNCTION init_tables()
|
||||
DEFINE cb ui.ComboBox
|
||||
DEFINE i INTEGER
|
||||
LET cb = ui.ComboBox.forName("formonly.currtable")
|
||||
IF cb IS NULL THEN
|
||||
CALL myerror("combobox not found")
|
||||
END IF
|
||||
FOR i=1 TO tab_arr.getLength()
|
||||
CALL cb.addItem(tab_arr[i],tab_arr[i])
|
||||
END FOR
|
||||
LET currtable=tab_arr[1]
|
||||
CALL on_change_currtable()
|
||||
END FUNCTION
|
||||
|
||||
--combo value has changed,refill the left array and omit
|
||||
--values of the right hand side
|
||||
FUNCTION on_change_currtable()
|
||||
DEFINE tab,col STRING
|
||||
DEFINE col_len,used_col_len,idx,i,j,foundUsed INT
|
||||
IF myd IS NOT NULL THEN
|
||||
CALL myd.deleteAllRows("a")
|
||||
ELSE
|
||||
CALL afields.clear()
|
||||
END IF
|
||||
LET idx=0
|
||||
LET col_len=col_arr.getLength()
|
||||
FOR i=1 TO col_len
|
||||
LET tab=col_arr[i].table_name
|
||||
LET col=col_arr[i].field_name
|
||||
LET used_col_len=cfields.getLength()
|
||||
LET foundUsed=FALSE
|
||||
FOR j=1 TO used_col_len
|
||||
IF cfields[j].ctable=tab AND cfields[j].ccol=col THEN
|
||||
LET foundUsed=TRUE
|
||||
EXIT FOR
|
||||
END IF
|
||||
END FOR
|
||||
IF NOT foundUsed AND tab=currtable THEN
|
||||
LET idx=idx+1
|
||||
IF myd IS NOT NULL THEN
|
||||
CALL myd.appendRow("a")
|
||||
ELSE
|
||||
CALL afields.appendElement()
|
||||
END IF
|
||||
LET afields[idx].atable=tab
|
||||
LET afields[idx].acol=col
|
||||
END IF
|
||||
END FOR
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION setup(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE rl,rr INT
|
||||
LET myd=d
|
||||
LET rl = afields.getLength()
|
||||
LET rr = cfields.getLength()
|
||||
CALL d.setActionActive("right", rl>0)
|
||||
CALL d.setActionActive("allright", rl>0)
|
||||
CALL d.setActionActive("left", rr>0)
|
||||
CALL d.setActionActive("allleft", rr>0)
|
||||
CALL d.setActionActive("prevwiz", currpage>1)
|
||||
CALL d.setActionActive("nextwiz", currpage<TOTAL_PAGES)
|
||||
END FUNCTION
|
||||
|
||||
--move the current item to the right hand side and delete it on the left hand side
|
||||
FUNCTION right(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE idx,lastC INT
|
||||
LET idx = d.getCurrentRow("a")
|
||||
IF idx<1 THEN RETURN END IF
|
||||
LET lastC=cfields.getLength()+1
|
||||
CALL myd.appendRow("c")
|
||||
LET cfields[lastC].ctable=afields[idx].atable
|
||||
LET cfields[lastC].ccol=afields[idx].acol
|
||||
CALL afields.deleteElement(idx)
|
||||
CALL d.setCurrentRow("c",lastC)
|
||||
CALL setup(d)
|
||||
END FUNCTION
|
||||
|
||||
--move all items to the right hand side
|
||||
FUNCTION allright(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE lastC,i INT
|
||||
LET lastC=cfields.getLength()
|
||||
FOR i=1 TO afields.getLength()
|
||||
LET lastC=lastC+1
|
||||
CALL myd.appendRow("c")
|
||||
LET cfields[lastC].ctable=afields[i].atable
|
||||
LET cfields[lastC].ccol=afields[i].acol
|
||||
END FOR
|
||||
CALL myd.deleteAllRows("a") --CALL afields.clear()
|
||||
CALL d.setCurrentRow("c",lastC)
|
||||
CALL setup(d)
|
||||
END FUNCTION
|
||||
|
||||
--remove the current item from the right hand side and refill the left hand side
|
||||
FUNCTION left(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE idx,i INT
|
||||
DEFINE col, tab STRING
|
||||
LET idx =d.getCurrentRow("c")
|
||||
IF idx<1 THEN RETURN END IF
|
||||
LET tab=cfields[idx].ctable
|
||||
LET col=cfields[idx].ccol
|
||||
CALL cfields.deleteElement(idx)
|
||||
CALL on_change_currtable()
|
||||
FOR i=1 TO afields.getLength()
|
||||
IF afields[i].atable=tab AND afields[i].acol=col THEN
|
||||
CALL d.setCurrentRow("a",i)
|
||||
EXIT FOR
|
||||
END IF
|
||||
END FOR
|
||||
CALL setup(d)
|
||||
END FUNCTION
|
||||
|
||||
--remove all items from the right hand side and refill the left hand side
|
||||
FUNCTION allleft(d)
|
||||
DEFINE d ui.Dialog
|
||||
CALL cfields.clear()
|
||||
CALL on_change_currtable()
|
||||
CALL setup(d)
|
||||
END FUNCTION
|
||||
|
||||
--read in a schema file
|
||||
FUNCTION readTables(schemaFile)
|
||||
DEFINE schemaFile STRING
|
||||
DEFINE ch base.channel
|
||||
DEFINE prevTabName STRING
|
||||
DEFINE sch schema_rec
|
||||
CALL col_arr.clear()
|
||||
CALL tab_arr.clear()
|
||||
LET ch = base.channel.create()
|
||||
WHENEVER ERROR CONTINUE
|
||||
CALL ch.openFile(schemaFile, "r")
|
||||
WHENEVER ERROR STOP
|
||||
IF STATUS!=0 THEN
|
||||
CALL myerror( "error: could not open schema file '"||schemaFile||"'")
|
||||
END IF
|
||||
CALL ch.setdelimiter("^")
|
||||
LET prevTabName=NULL
|
||||
WHILE ch.read(sch)
|
||||
IF sch.table_name.getIndexOf("sys",1)==1 THEN
|
||||
CONTINUE WHILE
|
||||
END IF
|
||||
LET col_arr[col_arr.getLength()+1].* = sch.*
|
||||
IF prevTabName IS NULL OR sch.table_name <> prevTabName THEN
|
||||
LET tab_arr[tab_arr.getLength()+1]=sch.table_name
|
||||
LET prevTabName=sch.table_name
|
||||
END IF
|
||||
END WHILE
|
||||
CALL ch.close()
|
||||
IF tab_arr.getLength()==0 THEN
|
||||
CALL myerror("did not find any coluns in "||schemaFile)
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION myerror(str)
|
||||
DEFINE str STRING
|
||||
DISPLAY "ERROR:",str
|
||||
EXIT PROGRAM 1
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,60 @@
|
||||
# Property of Four Js*
|
||||
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
|
||||
# * Trademark of Four Js Development Tools Europe Ltd
|
||||
# in the United States and elsewhere
|
||||
#
|
||||
# Four Js and its suppliers do not warrant or guarantee that these
|
||||
# samples are accurate and suitable for your purposes. Their inclusion is
|
||||
# purely for information purposes only.
|
||||
|
||||
LAYOUT(STYLE="dialog3",TEXT="Form assistant")
|
||||
GRID
|
||||
{
|
||||
[img ]
|
||||
[ ] [quest : ]
|
||||
[ ]
|
||||
[ ]
|
||||
Tables:
|
||||
[currtable ]
|
||||
<T t > <T z >
|
||||
Available fields Chosen fields
|
||||
[x|afields ] [r ][y|cfields ]
|
||||
[x|afields ] [rr ][y|cfields ]
|
||||
[x|afields ] [y|cfields ]
|
||||
[x|afields ] [l ][y|cfields ]
|
||||
[x|afields ] [ll ][y|cfields ]
|
||||
|
||||
[""]
|
||||
---------------------------------------------------------------
|
||||
[ :cancel:" ":back : next :" ":finish ]
|
||||
}
|
||||
END
|
||||
END
|
||||
|
||||
ATTRIBUTES
|
||||
|
||||
IMAGE img:IMAGE="formwizard.png";
|
||||
LABEL quest:TEXT="Which fields your form should contain ?";
|
||||
COMBOBOX currtable=FORMONLY.currtable,COMMENT="You can choose from more than one table.",NOT NULL;
|
||||
TABLE t:DOUBLECLICK=right;
|
||||
TABLE z:DOUBLECLICK=left;
|
||||
x=FORMONLY.atable,SCROLL,HIDDEN;
|
||||
afields=FORMONLY.acol,SCROLL;
|
||||
y=FORMONLY.ctable,SCROLL,HIDDEN;
|
||||
cfields=FORMONLY.ccol;
|
||||
|
||||
BUTTON r:right,TEXT=">";
|
||||
BUTTON rr:allright,TEXT=">>";
|
||||
BUTTON l:left,TEXT="<";
|
||||
BUTTON ll:allleft,TEXT="<<";
|
||||
BUTTON cancel:cancel,TEXT="Cancel";
|
||||
BUTTON back:prevwiz,TEXT="< &Back";
|
||||
BUTTON next:nextwiz,TEXT="&Next >";
|
||||
BUTTON finish:accept,TEXT="&Finish";
|
||||
|
||||
END
|
||||
|
||||
INSTRUCTIONS
|
||||
SCREEN RECORD a(atable,acol);
|
||||
SCREEN RECORD c(ctable,ccol);
|
||||
END
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,247 @@
|
||||
# Property of Four Js*
|
||||
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
|
||||
# * Trademark of Four Js Development Tools Europe Ltd
|
||||
# in the United States and elsewhere
|
||||
#
|
||||
# Four Js and its suppliers do not warrant or guarantee that these
|
||||
# samples are accurate and suitable for your purposes. Their inclusion is
|
||||
# purely for information purposes only.
|
||||
|
||||
TYPE schema_rec RECORD
|
||||
table_name STRING, -- customer
|
||||
field_name STRING, -- customer_name
|
||||
field_type SMALLINT, -- 0
|
||||
field_strtype STRING, -- CHAR(30)
|
||||
field_length SMALLINT -- 80
|
||||
END RECORD
|
||||
DEFINE col_arr DYNAMIC ARRAY OF schema_rec
|
||||
DEFINE tab_arr DYNAMIC ARRAY OF STRING
|
||||
DEFINE currtable STRING --current table in combobox
|
||||
--a(vailable) fields
|
||||
DEFINE afields DYNAMIC ARRAY OF RECORD
|
||||
atable STRING,
|
||||
acol STRING
|
||||
END RECORD
|
||||
--c(hosen) fields
|
||||
DEFINE cfields DYNAMIC ARRAY OF RECORD
|
||||
ctable STRING,
|
||||
ccol STRING
|
||||
END RECORD
|
||||
|
||||
MAIN
|
||||
CLOSE WINDOW screen
|
||||
CALL wizard()
|
||||
END MAIN
|
||||
|
||||
--contains the wizard dialog build with traditional 4GL dialogs called in a loop
|
||||
--the common actions must be cloned into each dialog
|
||||
FUNCTION wizard()
|
||||
DEFINE i INT
|
||||
DEFINE state STRING
|
||||
CALL readTables("stores.sch")
|
||||
OPEN WINDOW formwizard WITH FORM "formwizard_old"
|
||||
CALL init_tables()
|
||||
OPTIONS FIELD ORDER FORM
|
||||
LET state="combo"
|
||||
WHILE state<>"exit" AND state<>"accept"
|
||||
CASE state
|
||||
WHEN "combo"
|
||||
LET state="left"
|
||||
INPUT BY NAME currtable WITHOUT DEFAULTS ATTRIBUTES(UNBUFFERED)
|
||||
ON CHANGE currtable CALL on_change_currtable()
|
||||
ON ACTION gocombo LET state="combo" EXIT INPUT
|
||||
ON ACTION goleft LET state="left" EXIT INPUT
|
||||
ON ACTION goright LET state="right" EXIT INPUT
|
||||
ON ACTION cancel LET state="exit" EXIT INPUT
|
||||
ON ACTION accept LET state="accept" EXIT INPUT
|
||||
END INPUT
|
||||
WHEN "left"
|
||||
LET state="right"
|
||||
DISPLAY ARRAY afields TO a.* ATTRIBUTES(UNBUFFERED)
|
||||
ON ACTION right CALL right(DIALOG)
|
||||
ON KEY(RIGHT) CALL right(DIALOG)
|
||||
ON ACTION allright CALL allright(DIALOG)
|
||||
ON KEY(TAB) EXIT DISPLAY
|
||||
ON ACTION gocombo LET state="combo" EXIT DISPLAY
|
||||
ON ACTION goleft LET state="left" EXIT DISPLAY
|
||||
ON ACTION goright LET state="right" EXIT DISPLAY
|
||||
ON ACTION cancel LET state="exit" EXIT DISPLAY
|
||||
ON ACTION accept LET state="accept" EXIT DISPLAY
|
||||
END DISPLAY
|
||||
WHEN "right"
|
||||
LET state="combo"
|
||||
DISPLAY ARRAY cfields TO c.* ATTRIBUTES(UNBUFFERED)
|
||||
ON ACTION left CALL left(DIALOG)
|
||||
ON KEY(LEFT) CALL left(DIALOG)
|
||||
ON ACTION allleft CALL allleft(DIALOG)
|
||||
ON KEY(TAB) EXIT DISPLAY
|
||||
ON ACTION gocombo LET state="combo" EXIT DISPLAY
|
||||
ON ACTION goleft LET state="left" EXIT DISPLAY
|
||||
ON ACTION goright LET state="right" EXIT DISPLAY
|
||||
ON ACTION cancel LET state="exit" EXIT DISPLAY
|
||||
ON ACTION accept LET state="accept" EXIT DISPLAY
|
||||
ON ACTION prevwiz LET state="exit" EXIT DISPLAY
|
||||
ON ACTION nextwiz LET state="exit" EXIT DISPLAY
|
||||
END DISPLAY
|
||||
END CASE
|
||||
END WHILE
|
||||
--we just show all chosen columns in the terminal
|
||||
IF state=="accept" THEN
|
||||
FOR i=1 TO cfields.getLength()
|
||||
DISPLAY sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol)
|
||||
END FOR
|
||||
END IF
|
||||
CLOSE WINDOW formwizard
|
||||
END FUNCTION
|
||||
|
||||
--fill the combobox with all table names
|
||||
FUNCTION init_tables()
|
||||
DEFINE cb ui.ComboBox
|
||||
DEFINE i INTEGER
|
||||
LET cb = ui.ComboBox.forName("formonly.currtable")
|
||||
IF cb IS NULL THEN
|
||||
CALL myerror("combobox not found")
|
||||
END IF
|
||||
FOR i=1 TO tab_arr.getLength()
|
||||
CALL cb.addItem(tab_arr[i],tab_arr[i])
|
||||
END FOR
|
||||
LET currtable=tab_arr[1]
|
||||
CALL on_change_currtable()
|
||||
END FUNCTION
|
||||
|
||||
--combo value has changed,refill the left array and omit
|
||||
--values of the right hand side
|
||||
FUNCTION on_change_currtable()
|
||||
DEFINE tab,col STRING
|
||||
DEFINE col_len,used_col_len,idx,i,j,foundUsed,tabSize INT
|
||||
CALL afields.clear()
|
||||
LET idx=0
|
||||
LET col_len=col_arr.getLength()
|
||||
FOR i=1 TO col_len
|
||||
LET tab=col_arr[i].table_name
|
||||
LET col=col_arr[i].field_name
|
||||
LET used_col_len=cfields.getLength()
|
||||
LET foundUsed=FALSE
|
||||
FOR j=1 TO used_col_len
|
||||
IF cfields[j].ctable=tab AND cfields[j].ccol=col THEN
|
||||
LET foundUsed=TRUE
|
||||
EXIT FOR
|
||||
END IF
|
||||
END FOR
|
||||
IF NOT foundUsed AND tab=currtable THEN
|
||||
LET idx=idx+1
|
||||
LET afields[idx].atable=tab
|
||||
LET afields[idx].acol=col
|
||||
END IF
|
||||
END FOR
|
||||
LET tabSize=tableSize("a")
|
||||
FOR i=1 TO tabSize
|
||||
DISPLAY "" TO a[i].acol
|
||||
END FOR
|
||||
FOR i=1 TO afields.getLength()
|
||||
DISPLAY afields[i].* TO a[i].*
|
||||
END FOR
|
||||
END FUNCTION
|
||||
|
||||
--move the current item to the right hand side and delete it on the left hand side
|
||||
FUNCTION right(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE idx,lastC,i INT
|
||||
LET idx = arr_curr()
|
||||
LET lastC=cfields.getLength()+1
|
||||
LET cfields[lastC].ctable=afields[idx].atable
|
||||
LET cfields[lastC].ccol=afields[idx].acol
|
||||
CALL afields.deleteElement(idx)
|
||||
FOR i=1 TO cfields.getLength()
|
||||
DISPLAY cfields[i].* TO c[i].*
|
||||
END FOR
|
||||
END FUNCTION
|
||||
|
||||
--move all items to the right hand side
|
||||
FUNCTION allright(d)
|
||||
DEFINE d ui.Dialog
|
||||
DEFINE lastC,i INT
|
||||
LET lastC=cfields.getLength()
|
||||
FOR i=1 TO afields.getLength()
|
||||
LET lastC=lastC+1
|
||||
LET cfields[lastC].ctable=afields[i].atable
|
||||
LET cfields[lastC].ccol=afields[i].acol
|
||||
END FOR
|
||||
CALL afields.clear()
|
||||
FOR i=1 TO cfields.getLength()
|
||||
DISPLAY cfields[i].* TO c[i].*
|
||||
END FOR
|
||||
END FUNCTION
|
||||
|
||||
--remove the current item from the right hand side and refill the left hand side
|
||||
FUNCTION left(d)
|
||||
DEFINE d ui.Dialog
|
||||
CALL cfields.deleteElement(arr_curr())
|
||||
CALL on_change_currtable()
|
||||
END FUNCTION
|
||||
|
||||
--remove all items from the right hand side and refill the left hand side
|
||||
FUNCTION allleft(d)
|
||||
DEFINE d ui.Dialog
|
||||
CALL cfields.clear()
|
||||
CALL on_change_currtable()
|
||||
END FUNCTION
|
||||
|
||||
--read in a schema file
|
||||
FUNCTION readTables(schemaFile)
|
||||
DEFINE schemaFile STRING
|
||||
DEFINE ch base.channel
|
||||
DEFINE prevTabName STRING
|
||||
DEFINE sch schema_rec
|
||||
CALL col_arr.clear()
|
||||
CALL tab_arr.clear()
|
||||
LET ch = base.channel.create()
|
||||
WHENEVER ERROR CONTINUE
|
||||
CALL ch.openFile(schemaFile, "r")
|
||||
WHENEVER ERROR STOP
|
||||
IF STATUS!=0 THEN
|
||||
CALL myerror( "error: could not open schema file '"||schemaFile||"'")
|
||||
END IF
|
||||
CALL ch.setdelimiter("^")
|
||||
LET prevTabName=NULL
|
||||
WHILE ch.read(sch)
|
||||
IF sch.table_name.getIndexOf("sys",1)==1 THEN
|
||||
CONTINUE WHILE
|
||||
END IF
|
||||
LET col_arr[col_arr.getLength()+1].* = sch.*
|
||||
IF prevTabName IS NULL OR sch.table_name <> prevTabName THEN
|
||||
LET tab_arr[tab_arr.getLength()+1]=sch.table_name
|
||||
LET prevTabName=sch.table_name
|
||||
END IF
|
||||
END WHILE
|
||||
CALL ch.close()
|
||||
IF tab_arr.getLength()==0 THEN
|
||||
CALL myerror("did not find any coluns in "||schemaFile)
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION myerror(str)
|
||||
DEFINE str STRING
|
||||
DISPLAY "ERROR:",str
|
||||
EXIT PROGRAM 1
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION tableSize(screenRec)
|
||||
DEFINE screenRec STRING
|
||||
DEFINE nl om.NodeList
|
||||
DEFINE root,tab om.DomNode
|
||||
DEFINE doc om.DomDocument
|
||||
DEFINE currWinId,bufferSize INT
|
||||
LET root=ui.Interface.getRootNode()
|
||||
LET currWinId=root.getAttribute("currentWindow")
|
||||
LET doc =ui.Interface.getDocument()
|
||||
LET root=doc.getElementById(currWinId)
|
||||
LET nl=root.selectByPath(sfmt("//Table[@tabName=\"%1\"]",screenRec))
|
||||
IF nl.getLength()>0 THEN
|
||||
LET tab=nl.item(1)
|
||||
LET bufferSize=tab.getAttribute("bufferSize")
|
||||
ELSE
|
||||
DISPLAY "can't find Table"
|
||||
END IF
|
||||
RETURN bufferSize
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,54 @@
|
||||
# Property of Four Js*
|
||||
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
|
||||
# * Trademark of Four Js Development Tools Europe Ltd
|
||||
# in the United States and elsewhere
|
||||
#
|
||||
# Four Js and its suppliers do not warrant or guarantee that these
|
||||
# samples are accurate and suitable for your purposes. Their inclusion is
|
||||
# purely for information purposes only.
|
||||
|
||||
LAYOUT(STYLE="dialog3",TEXT="Form assistant")
|
||||
GRID
|
||||
{
|
||||
[img ]
|
||||
[ ] [quest : ]
|
||||
[ ]
|
||||
[ ]
|
||||
[gocombo: ]
|
||||
[currtable ]
|
||||
<T t > <T z >
|
||||
Available fields Chosen fields
|
||||
[x|afields ] [r ][y|cfields ]
|
||||
[x|afields ] [rr ][y|cfields ]
|
||||
[x|afields ] [y|cfields ]
|
||||
[x|afields ] [l ][y|cfields ]
|
||||
[x|afields ] [ll ][y|cfields ]
|
||||
|
||||
[goleft ] [goright ]
|
||||
[""]
|
||||
---------------------------------------------------------------
|
||||
[ :cancel:" ":back : next :" ":finish ]
|
||||
}
|
||||
END
|
||||
ATTRIBUTES
|
||||
IMAGE img:IMAGE="formwizard.png";
|
||||
LABEL quest:TEXT="Which fields your form should contain ?";
|
||||
COMBOBOX currtable=FORMONLY.currtable,COMMENT="You can choose from more than one table.",NOT NULL;
|
||||
x=FORMONLY.atable,SCROLL,HIDDEN;
|
||||
afields=FORMONLY.acol,SCROLL;
|
||||
y=FORMONLY.ctable,SCROLL,HIDDEN;
|
||||
cfields=FORMONLY.ccol;
|
||||
BUTTON gocombo:gocombo,TEXT="Tables:";
|
||||
BUTTON goleft:goleft,TEXT="Edit Left";
|
||||
BUTTON goright:goright,TEXT="Edit Right";
|
||||
BUTTON r:right,TEXT=">";
|
||||
BUTTON rr:allright,TEXT=">>";
|
||||
BUTTON l:left,TEXT="<";
|
||||
BUTTON ll:allleft,TEXT="<<";
|
||||
BUTTON cancel:cancel,TEXT="Cancel";
|
||||
BUTTON back:prevwiz,TEXT="< &Back";
|
||||
BUTTON next:nextwiz,TEXT="&Next >";
|
||||
BUTTON finish:accept,TEXT="&Finish";
|
||||
INSTRUCTIONS
|
||||
SCREEN RECORD a(atable,acol);
|
||||
SCREEN RECORD c(ctable,ccol);
|
||||
@@ -0,0 +1,410 @@
|
||||
customer^customer_num^262^4^1^
|
||||
customer^fname^0^15^2^
|
||||
customer^lname^0^15^3^
|
||||
customer^company^0^20^4^
|
||||
customer^address1^0^20^5^
|
||||
customer^address2^0^20^6^
|
||||
customer^city^0^15^7^
|
||||
customer^state^0^2^8^
|
||||
customer^zipcode^0^5^9^
|
||||
customer^phone^0^18^10^
|
||||
items^item_num^1^2^1^
|
||||
items^order_num^2^4^2^
|
||||
items^stock_num^1^2^3^
|
||||
items^manu_code^0^3^4^
|
||||
items^quantity^1^2^5^
|
||||
items^total_price^8^2050^6^
|
||||
manufact^manu_code^0^3^1^
|
||||
manufact^manu_name^0^15^2^
|
||||
orders^order_num^262^4^1^
|
||||
orders^order_date^7^4^2^
|
||||
orders^customer_num^2^4^3^
|
||||
orders^ship_instruct^0^40^4^
|
||||
orders^backlog^0^1^5^
|
||||
orders^po_num^0^10^6^
|
||||
orders^ship_date^7^4^7^
|
||||
orders^ship_weight^5^2050^8^
|
||||
orders^ship_charge^8^1538^9^
|
||||
orders^paid_date^7^4^10^
|
||||
state^code^0^2^1^
|
||||
state^sname^0^15^2^
|
||||
stock^stock_num^1^2^1^
|
||||
stock^manu_code^0^3^2^
|
||||
stock^description^0^15^3^
|
||||
stock^unit_price^8^1538^4^
|
||||
stock^unit^0^4^5^
|
||||
stock^unit_descr^0^15^6^
|
||||
sysaggregates^name^13^128^1^
|
||||
sysaggregates^owner^0^32^2^
|
||||
sysaggregates^aggid^6^4^3^
|
||||
sysaggregates^init_func^13^128^4^
|
||||
sysaggregates^iter_func^13^128^5^
|
||||
sysaggregates^combine_func^13^128^6^
|
||||
sysaggregates^final_func^13^128^7^
|
||||
sysams^am_name^13^128^1^
|
||||
sysams^am_owner^0^32^2^
|
||||
sysams^am_id^2^4^3^
|
||||
sysams^am_type^0^1^4^
|
||||
sysams^am_sptype^0^3^5^
|
||||
sysams^am_defopclass^2^4^6^
|
||||
sysams^am_keyscan^2^4^7^
|
||||
sysams^am_unique^2^4^8^
|
||||
sysams^am_cluster^2^4^9^
|
||||
sysams^am_rowids^2^4^10^
|
||||
sysams^am_readwrite^2^4^11^
|
||||
sysams^am_parallel^2^4^12^
|
||||
sysams^am_costfactor^4^4^13^
|
||||
sysams^am_create^2^4^14^
|
||||
sysams^am_drop^2^4^15^
|
||||
sysams^am_open^2^4^16^
|
||||
sysams^am_close^2^4^17^
|
||||
sysams^am_insert^2^4^18^
|
||||
sysams^am_delete^2^4^19^
|
||||
sysams^am_update^2^4^20^
|
||||
sysams^am_stats^2^4^21^
|
||||
sysams^am_scancost^2^4^22^
|
||||
sysams^am_check^2^4^23^
|
||||
sysams^am_beginscan^2^4^24^
|
||||
sysams^am_endscan^2^4^25^
|
||||
sysams^am_rescan^2^4^26^
|
||||
sysams^am_getnext^2^4^27^
|
||||
sysams^am_getbyid^2^4^28^
|
||||
sysams^am_build^2^4^29^
|
||||
sysams^am_init^2^4^30^
|
||||
sysattrtypes^extended_id^2^4^1^
|
||||
sysattrtypes^seqno^1^2^2^
|
||||
sysattrtypes^levelno^1^2^3^
|
||||
sysattrtypes^parent_no^1^2^4^
|
||||
sysattrtypes^fieldname^13^128^5^
|
||||
sysattrtypes^fieldno^1^2^6^
|
||||
sysattrtypes^type^1^2^7^
|
||||
sysattrtypes^length^1^2^8^
|
||||
sysattrtypes^xtd_type_id^2^4^9^
|
||||
sysblobs^spacename^13^128^1^
|
||||
sysblobs^type^0^1^2^
|
||||
sysblobs^tabid^2^4^3^
|
||||
sysblobs^colno^1^2^4^
|
||||
syscasts^owner^0^32^1^
|
||||
syscasts^argument_type^1^2^2^
|
||||
syscasts^argument_xid^2^4^3^
|
||||
syscasts^result_type^1^2^4^
|
||||
syscasts^result_xid^2^4^5^
|
||||
syscasts^routine_name^13^128^6^
|
||||
syscasts^routine_owner^0^32^7^
|
||||
syscasts^class^0^1^8^
|
||||
syschecks^constrid^2^4^1^
|
||||
syschecks^type^0^1^2^
|
||||
syschecks^seqno^1^2^3^
|
||||
syschecks^checktext^0^32^4^
|
||||
syscolatt^tabname^0^18^1^
|
||||
syscolatt^colname^0^18^2^
|
||||
syscolatt^seqno^262^4^3^
|
||||
syscolatt^color^1^2^4^
|
||||
syscolatt^inverse^0^1^5^
|
||||
syscolatt^underline^0^1^6^
|
||||
syscolatt^blink^0^1^7^
|
||||
syscolatt^left^0^1^8^
|
||||
syscolatt^def_format^0^64^9^
|
||||
syscolatt^condition^0^64^10^
|
||||
syscolattribs^tabid^2^4^1^
|
||||
syscolattribs^colno^1^2^2^
|
||||
syscolattribs^extentsize^2^4^3^
|
||||
syscolattribs^flags^2^4^4^
|
||||
syscolattribs^flags1^2^4^5^
|
||||
syscolattribs^sbspace^13^128^6^
|
||||
syscolauth^grantor^0^32^1^
|
||||
syscolauth^grantee^0^32^2^
|
||||
syscolauth^tabid^2^4^3^
|
||||
syscolauth^colno^1^2^4^
|
||||
syscolauth^colauth^0^3^5^
|
||||
syscoldepend^constrid^2^4^1^
|
||||
syscoldepend^tabid^2^4^2^
|
||||
syscoldepend^colno^1^2^3^
|
||||
syscolumns^colname^13^128^1^
|
||||
syscolumns^tabid^2^4^2^
|
||||
syscolumns^colno^1^2^3^
|
||||
syscolumns^coltype^1^2^4^
|
||||
syscolumns^collength^1^2^5^
|
||||
syscolumns^colmin^2^4^6^
|
||||
syscolumns^colmax^2^4^7^
|
||||
syscolumns^extended_id^2^4^8^
|
||||
sysconstraints^constrid^6^4^1^
|
||||
sysconstraints^constrname^13^128^2^
|
||||
sysconstraints^owner^0^32^3^
|
||||
sysconstraints^tabid^2^4^4^
|
||||
sysconstraints^constrtype^0^1^5^
|
||||
sysconstraints^idxname^13^128^6^
|
||||
sysconstraints^collation^0^36^7^
|
||||
sysdefaults^tabid^2^4^1^
|
||||
sysdefaults^colno^1^2^2^
|
||||
sysdefaults^type^0^1^3^
|
||||
sysdefaults^default^0^256^4^
|
||||
sysdefaults^class^0^1^5^
|
||||
sysdepend^btabid^2^4^1^
|
||||
sysdepend^btype^0^1^2^
|
||||
sysdepend^dtabid^2^4^3^
|
||||
sysdepend^dtype^0^1^4^
|
||||
sysdistrib^tabid^2^4^1^
|
||||
sysdistrib^colno^1^2^2^
|
||||
sysdistrib^seqno^2^4^3^
|
||||
sysdistrib^constructed^7^4^4^
|
||||
sysdistrib^mode^0^1^5^
|
||||
sysdistrib^resolution^4^4^6^
|
||||
sysdistrib^confidence^4^4^7^
|
||||
sysdomains^id^262^4^1^
|
||||
sysdomains^owner^0^32^2^
|
||||
sysdomains^name^13^128^3^
|
||||
sysdomains^type^1^2^4^
|
||||
syserrors^sqlstate^0^5^1^
|
||||
syserrors^locale^0^36^2^
|
||||
syserrors^level^1^2^3^
|
||||
syserrors^seqno^1^2^4^
|
||||
syserrors^message^13^255^5^
|
||||
sysfragauth^grantor^0^32^1^
|
||||
sysfragauth^grantee^0^32^2^
|
||||
sysfragauth^tabid^2^4^3^
|
||||
sysfragauth^fragment^13^128^4^
|
||||
sysfragauth^fragauth^0^6^5^
|
||||
sysfragments^fragtype^0^1^1^
|
||||
sysfragments^tabid^2^4^2^
|
||||
sysfragments^indexname^13^128^3^
|
||||
sysfragments^colno^2^4^4^
|
||||
sysfragments^partn^2^4^5^
|
||||
sysfragments^strategy^0^1^6^
|
||||
sysfragments^location^0^1^7^
|
||||
sysfragments^servername^13^128^8^
|
||||
sysfragments^evalpos^2^4^9^
|
||||
sysfragments^exprtext^12^56^10^
|
||||
sysfragments^exprbin^11^56^11^
|
||||
sysfragments^exprarr^11^56^12^
|
||||
sysfragments^flags^2^4^13^
|
||||
sysfragments^dbspace^13^128^14^
|
||||
sysfragments^levels^1^2^15^
|
||||
sysfragments^npused^2^4^16^
|
||||
sysfragments^nrows^2^4^17^
|
||||
sysfragments^clust^2^4^18^
|
||||
sysindexes^idxname^13^128^1^
|
||||
sysindexes^owner^0^32^2^
|
||||
sysindexes^tabid^2^4^3^
|
||||
sysindexes^idxtype^0^1^4^
|
||||
sysindexes^clustered^0^1^5^
|
||||
sysindexes^part1^1^2^6^
|
||||
sysindexes^part2^1^2^7^
|
||||
sysindexes^part3^1^2^8^
|
||||
sysindexes^part4^1^2^9^
|
||||
sysindexes^part5^1^2^10^
|
||||
sysindexes^part6^1^2^11^
|
||||
sysindexes^part7^1^2^12^
|
||||
sysindexes^part8^1^2^13^
|
||||
sysindexes^part9^1^2^14^
|
||||
sysindexes^part10^1^2^15^
|
||||
sysindexes^part11^1^2^16^
|
||||
sysindexes^part12^1^2^17^
|
||||
sysindexes^part13^1^2^18^
|
||||
sysindexes^part14^1^2^19^
|
||||
sysindexes^part15^1^2^20^
|
||||
sysindexes^part16^1^2^21^
|
||||
sysindexes^levels^1^2^22^
|
||||
sysindexes^leaves^2^4^23^
|
||||
sysindexes^nunique^2^4^24^
|
||||
sysindexes^clust^2^4^25^
|
||||
sysindices^idxname^13^128^1^
|
||||
sysindices^owner^0^32^2^
|
||||
sysindices^tabid^2^4^3^
|
||||
sysindices^idxtype^0^1^4^
|
||||
sysindices^clustered^0^1^5^
|
||||
sysindices^levels^1^2^6^
|
||||
sysindices^leaves^2^4^7^
|
||||
sysindices^nunique^2^4^8^
|
||||
sysindices^clust^2^4^9^
|
||||
sysindices^nrows^3^8^10^
|
||||
sysinherits^child^2^4^1^
|
||||
sysinherits^parent^2^4^2^
|
||||
sysinherits^class^0^1^3^
|
||||
syslangauth^grantor^0^32^1^
|
||||
syslangauth^grantee^0^32^2^
|
||||
syslangauth^langid^2^4^3^
|
||||
syslangauth^langauth^0^1^4^
|
||||
syslogmap^tabloc^2^4^1^
|
||||
syslogmap^tabid^2^4^2^
|
||||
syslogmap^fragid^2^4^3^
|
||||
syslogmap^flags^2^4^4^
|
||||
sysobjstate^objtype^0^1^1^
|
||||
sysobjstate^owner^0^32^2^
|
||||
sysobjstate^name^13^128^3^
|
||||
sysobjstate^tabid^2^4^4^
|
||||
sysobjstate^state^0^1^5^
|
||||
sysopclasses^opclassname^13^128^1^
|
||||
sysopclasses^owner^0^32^2^
|
||||
sysopclasses^amid^2^4^3^
|
||||
sysopclasses^opclassid^6^4^4^
|
||||
sysopclstr^owner^0^32^1^
|
||||
sysopclstr^clstrname^13^128^2^
|
||||
sysopclstr^clstrsize^2^4^3^
|
||||
sysopclstr^tabid^2^4^4^
|
||||
sysopclstr^blobcol1^1^2^5^
|
||||
sysopclstr^blobcol2^1^2^6^
|
||||
sysopclstr^blobcol3^1^2^7^
|
||||
sysopclstr^blobcol4^1^2^8^
|
||||
sysopclstr^blobcol5^1^2^9^
|
||||
sysopclstr^blobcol6^1^2^10^
|
||||
sysopclstr^blobcol7^1^2^11^
|
||||
sysopclstr^blobcol8^1^2^12^
|
||||
sysopclstr^blobcol9^1^2^13^
|
||||
sysopclstr^blobcol10^1^2^14^
|
||||
sysopclstr^blobcol11^1^2^15^
|
||||
sysopclstr^blobcol12^1^2^16^
|
||||
sysopclstr^blobcol13^1^2^17^
|
||||
sysopclstr^blobcol14^1^2^18^
|
||||
sysopclstr^blobcol15^1^2^19^
|
||||
sysopclstr^blobcol16^1^2^20^
|
||||
sysopclstr^clstrkey1^1^2^21^
|
||||
sysopclstr^clstrkey2^1^2^22^
|
||||
sysopclstr^clstrkey3^1^2^23^
|
||||
sysopclstr^clstrkey4^1^2^24^
|
||||
sysopclstr^clstrkey5^1^2^25^
|
||||
sysopclstr^clstrkey6^1^2^26^
|
||||
sysopclstr^clstrkey7^1^2^27^
|
||||
sysopclstr^clstrkey8^1^2^28^
|
||||
sysopclstr^clstrkey9^1^2^29^
|
||||
sysopclstr^clstrkey10^1^2^30^
|
||||
sysopclstr^clstrkey11^1^2^31^
|
||||
sysopclstr^clstrkey12^1^2^32^
|
||||
sysopclstr^clstrkey13^1^2^33^
|
||||
sysopclstr^clstrkey14^1^2^34^
|
||||
sysopclstr^clstrkey15^1^2^35^
|
||||
sysopclstr^clstrkey16^1^2^36^
|
||||
sysprocauth^grantor^0^32^1^
|
||||
sysprocauth^grantee^0^32^2^
|
||||
sysprocauth^procid^2^4^3^
|
||||
sysprocauth^procauth^0^1^4^
|
||||
sysprocbody^procid^2^4^1^
|
||||
sysprocbody^datakey^0^1^2^
|
||||
sysprocbody^seqno^2^4^3^
|
||||
sysprocbody^data^0^256^4^
|
||||
sysprocedures^procname^13^128^1^
|
||||
sysprocedures^owner^0^32^2^
|
||||
sysprocedures^procid^6^4^3^
|
||||
sysprocedures^mode^0^1^4^
|
||||
sysprocedures^retsize^2^4^5^
|
||||
sysprocedures^symsize^2^4^6^
|
||||
sysprocedures^datasize^2^4^7^
|
||||
sysprocedures^codesize^2^4^8^
|
||||
sysprocedures^numargs^2^4^9^
|
||||
sysprocedures^isproc^0^1^10^
|
||||
sysprocedures^specificname^13^128^11^
|
||||
sysprocedures^externalname^13^255^12^
|
||||
sysprocedures^paramstyle^0^1^13^
|
||||
sysprocedures^langid^2^4^14^
|
||||
sysprocplan^procid^2^4^1^
|
||||
sysprocplan^planid^2^4^2^
|
||||
sysprocplan^datakey^0^1^3^
|
||||
sysprocplan^seqno^2^4^4^
|
||||
sysprocplan^created^7^4^5^
|
||||
sysprocplan^datasize^2^4^6^
|
||||
sysprocplan^data^0^256^7^
|
||||
sysreferences^constrid^2^4^1^
|
||||
sysreferences^primary^2^4^2^
|
||||
sysreferences^ptabid^2^4^3^
|
||||
sysreferences^updrule^0^1^4^
|
||||
sysreferences^delrule^0^1^5^
|
||||
sysreferences^matchtype^0^1^6^
|
||||
sysreferences^pendant^0^1^7^
|
||||
sysroleauth^rolename^0^32^1^
|
||||
sysroleauth^grantee^0^32^2^
|
||||
sysroleauth^is_grantable^0^1^3^
|
||||
sysroutinelangs^langid^6^4^1^
|
||||
sysroutinelangs^langname^0^30^2^
|
||||
sysroutinelangs^langinitfunc^13^128^3^
|
||||
sysroutinelangs^langpath^0^255^4^
|
||||
sysroutinelangs^langclass^0^18^5^
|
||||
syssequences^seqid^6^4^1^
|
||||
syssequences^tabid^2^4^2^
|
||||
syssynonyms^owner^0^32^1^
|
||||
syssynonyms^synname^13^128^2^
|
||||
syssynonyms^created^7^4^3^
|
||||
syssynonyms^tabid^2^4^4^
|
||||
syssyntable^tabid^2^4^1^
|
||||
syssyntable^servername^13^128^2^
|
||||
syssyntable^dbname^13^128^3^
|
||||
syssyntable^owner^0^32^4^
|
||||
syssyntable^tabname^13^128^5^
|
||||
syssyntable^btabid^2^4^6^
|
||||
systabamdata^tabid^2^4^1^
|
||||
systabamdata^am_param^0^256^2^
|
||||
systabamdata^am_space^13^128^3^
|
||||
systabauth^grantor^0^32^1^
|
||||
systabauth^grantee^0^32^2^
|
||||
systabauth^tabid^2^4^3^
|
||||
systabauth^tabauth^0^9^4^
|
||||
systables^tabname^13^128^1^
|
||||
systables^owner^0^32^2^
|
||||
systables^partnum^2^4^3^
|
||||
systables^tabid^6^4^4^
|
||||
systables^rowsize^1^2^5^
|
||||
systables^ncols^1^2^6^
|
||||
systables^nindexes^1^2^7^
|
||||
systables^nrows^2^4^8^
|
||||
systables^created^7^4^9^
|
||||
systables^version^2^4^10^
|
||||
systables^tabtype^0^1^11^
|
||||
systables^locklevel^0^1^12^
|
||||
systables^npused^2^4^13^
|
||||
systables^fextsize^2^4^14^
|
||||
systables^nextsize^2^4^15^
|
||||
systables^flags^1^2^16^
|
||||
systables^site^13^128^17^
|
||||
systables^dbname^13^128^18^
|
||||
systables^type_xid^2^4^19^
|
||||
systables^am_id^2^4^20^
|
||||
systraceclasses^name^0^18^1^
|
||||
systraceclasses^classid^6^4^2^
|
||||
systracemsgs^name^13^128^1^
|
||||
systracemsgs^msgid^6^4^2^
|
||||
systracemsgs^locale^0^36^3^
|
||||
systracemsgs^seqno^1^2^4^
|
||||
systracemsgs^message^13^255^5^
|
||||
systrigbody^trigid^2^4^1^
|
||||
systrigbody^datakey^0^1^2^
|
||||
systrigbody^seqno^2^4^3^
|
||||
systrigbody^data^0^256^4^
|
||||
systriggers^trigid^6^4^1^
|
||||
systriggers^trigname^13^128^2^
|
||||
systriggers^owner^0^32^3^
|
||||
systriggers^tabid^2^4^4^
|
||||
systriggers^event^0^1^5^
|
||||
systriggers^old^13^128^6^
|
||||
systriggers^new^13^128^7^
|
||||
systriggers^mode^0^1^8^
|
||||
systriggers^collation^0^36^9^
|
||||
sysusers^username^0^32^1^
|
||||
sysusers^usertype^0^1^2^
|
||||
sysusers^priority^1^2^3^
|
||||
sysusers^password^0^16^4^
|
||||
sysviews^tabid^2^4^1^
|
||||
sysviews^seqno^1^2^2^
|
||||
sysviews^viewtext^0^64^3^
|
||||
sysviolations^targettid^2^4^1^
|
||||
sysviolations^viotid^2^4^2^
|
||||
sysviolations^diatid^2^4^3^
|
||||
sysviolations^maxrows^2^4^4^
|
||||
sysxtddesc^extended_id^2^4^1^
|
||||
sysxtddesc^seqno^1^2^2^
|
||||
sysxtddesc^description^0^256^3^
|
||||
sysxtdtypeauth^grantor^0^32^1^
|
||||
sysxtdtypeauth^grantee^0^32^2^
|
||||
sysxtdtypeauth^type^2^4^3^
|
||||
sysxtdtypeauth^auth^0^2^4^
|
||||
sysxtdtypes^extended_id^6^4^1^
|
||||
sysxtdtypes^domain^0^1^2^
|
||||
sysxtdtypes^mode^0^1^3^
|
||||
sysxtdtypes^owner^0^32^4^
|
||||
sysxtdtypes^name^13^128^5^
|
||||
sysxtdtypes^type^1^2^6^
|
||||
sysxtdtypes^source^2^4^7^
|
||||
sysxtdtypes^maxlen^2^4^8^
|
||||
sysxtdtypes^length^2^4^9^
|
||||
sysxtdtypes^byvalue^0^1^10^
|
||||
sysxtdtypes^cannothash^0^1^11^
|
||||
sysxtdtypes^align^1^2^12^
|
||||
sysxtdtypes^locator^2^4^13^
|
||||
Reference in New Issue
Block a user