Hello Mark,
due to your response and the sample which Håkan (thanks a lot for this) has
sent to me,
I have the impression that my idea to call the new code from the existing
code does
not work. Is it so?
I insert my current test source below. As you see, first I read the DB2 data
into the
stem column. and count the number of result rows in the variable CC - then
I try to read column. and CC in the ::method initDialog - is this not
possible?
If I don't want to follow your suggestion - is there no way to get the
content from
the stem and CC without general changes of my script?
Btw.: thank you and Håkan for the immediate answers ;-)
Kind regards
Roger
....
....
Database = 'SCM'
SQLStmt = "Select COLUMN_NAME,DATA_TYPE,ORDINAL_POSITION,COLUMN_DEFAULT,",
" IS_NULLABLE,CHARACTER_MAXIMUM_LENGTH,",
" NUMERIC_PRECISION,NUMERIC_SCALE,DATETIME_PRECISION",
" from SYSIBM.COLUMNS",
"where Table_Catalog = 'SCM'",
" and Table_Schema = '*******'",
" and Table_Name = '*******'",
"order by Ordinal_Position"
CALL SQLEXEC 'CONNECT TO' Database
CALL CHECKERR 'Connect to' Database
SAY "Connected to Database" Database
Call SQLEXEC 'PREPARE S51 FROM :SQLSTMT'
Call CHECKERR 'PREPARE S51'
Call SQLEXEC 'DECLARE C51 CURSOR WITH HOLD FOR S51'
Call CHECKERR 'DECLARE C51'
Call SQLEXEC 'OPEN C51'
Call CHECKERR 'OPEN C51'
CC = 0
CL = ''
Do until SC <> 0
Call SQLEXEC 'FETCH C51 INTO :COLUMN_NAME_R, :Data_Type_R'
SC = SQLCA.SQLCODE
If SC = 0 then
do
CC = CC + 1
Say Right(Time(),10) Column_Name_R Data_Type_R
CL = CL Strip(Column_Name_R) ' '
Column.CC.1 = CC
Column.CC.2 = Column_Name_R
Column.CC.3 = Data_Type_R
Select
when Pos(Word(Data_Type_R,1),'BIGINT DECIMAL DOUBLE INTEGER REAL
SMALLINT') <> 0 then
do
end
when Pos(Word(Data_Type_R,1),'CHARACTER TIME DATE TIMESTAMP') <> 0
then
do
end
otherwise nop
end
end
end
call SQLEXEC 'CLOSE C51'
call CHECKERR 'CLOSE C51'
call SQLEXEC 'CONNECT RESET'
call CHECKERR 'CONNECT RESET'
Call ShowColumnList
Trace i
Path = "D:\Rexx\Columns.txt"
file1=.stream~new(path) /* Create a stream object
for the file */
file1~open("both replace")
file1~lineout(CL) /* Write a line to the file
*/
file1~close
Exit
ShowColumnList:
trace ?I
dlg = .SelectColumn~new
if dlg~initCode = 0 then do
-- Add a symbolic resource ID for the list view.
dlg~constDir[IDC_LISTVIEW] = 200
dlg~create(30, 30, 225, 200, "Selektieren Sie bitte die gewünschten
Columns", "VISIBLE")
dlg~execute("SHOWTOP")
end
Return 0
CHECKERR:
ARG ERRLOC
If ( SQLCA.SQLCODE = 0 ) then
return 0
else do
say '--- error report ---'
say 'ERROR occurred :' errloc
say 'SQLCODE :' SQLCA.SQLCODE
/******************************\
* GET ERROR MESSAGE API called *
\******************************/
call SQLDBS 'GET MESSAGE INTO :errmsg LINEWIDTH 80'
say errmsg
say '--- end error report ---'
If (SQLCA.SQLCODE < 0 ) then
do
Say 'Error' SQLCA.SQLCODE
exit
end
else
do
say 'WARNING - CONTINUING PROGRAM WITH ERRORS'
return 0
end
end
return 0
::requires "hostemu" LIBRARY
-- End of entry point.
::requires "ooDialog.cls"
::class 'SelectColumn' subclass UserDialog
::method defineDialog
self~createListView(IDC_LISTVIEW, 10, 20, 205, 145, "REPORT
SHOWSELALWAYS")
self~createPushButton(IDOK, 140, 175, 35, 15, "", "Weiter")
self~createPushButton(IDOK, 180, 175, 35, 15, "DEFAULT", "Abbruch")
self~connectListViewEvent(IDC_LISTVIEW, "CHECKBOXCHANGED",
onCheckboxChanged)
self~connectListViewEvent(IDC_LISTVIEW, "CLICK", onClick)
::method initDialog
trace ?i
-- Get a reference to the list view.
list = self~newListView(IDC_LISTVIEW)
list~addExtendedStyle("FULLROWSELECT GRIDLINES CHECKBOXES HEADERDRAGDROP")
list~insertColumn(0, "Select", 25)
list~insertColumn(1, "Column Name", 120)
do i = 1 to CC
<<<<<<<<<<<<< Here I got the problem *******
list~addRow(i, , , Column.i.2, Column.i.3)
end
::method onClick
use arg id, itemIndex, columnIndex, keyState
-- Compensate for zero-based indexes ;-(
itemIndex += 1
columnIndex += 1
say 'onClick() row:' itemIndex 'column:' columnIndex 'key state:' keyState
return 0
::method onCheckboxChanged unguarded
use arg id, itemIndex, state
say ID 'Checked row:' itemIndex 'state:' State
return 0
-----Ursprüngliche Nachricht-----
Von: Mark Miesfeld [mailto:[email protected]]
Gesendet: Freitag, 6. Juli 2012 17:18
An: Open Object Rexx Users
Betreff: Re: [Oorexx-users] How to read a variable in a methode?
On Fri, Jul 6, 2012 at 7:42 AM, Roger Bilau <[email protected]> wrote:
>
> in the past I used ooRexx without the object oriented part. Now I make
> my first step's with classes and methods because I want to integrate some
dialog functions in my scripts.
> My first try is to combine a routine that read column name from DB2
> and I like to show it in a list view window. For this I take the
columnClickListView.rex sample and modified it.
Sounds like a good start. But, I would suggest that you think of it as
taking a list view dialog and combining it with your routine. It's a subtle
point, but I think you will have less trouble trying to add a routine to a
list view dialog than you will have trying to force a routine to use a
dialog.
>
>
> My problem is: the variables I filled with the data from DB2 I cannot
> read in the ::method initDialog
Why not? ;-) Post a little more information on what you routine that reads
the column names from DB2 looks like.
Here is a rough sketch of an approach.
Håkan
-- Get a reference to the list view.
list = self~newListView(IDC_LISTVIEW)
list~addExtendedStyle("FULLROWSELECT GRIDLINES CHECKBOXES HEADERDRAGDROP")
-- Call your routine to get the column names, but I don't have any idea
what you routine
-- looks like so it is hard to do this part.
col1Name = getDB2columnName(1)
list~insertColumn(0, col1Name, 80)
col2Name = getDB2columnName(2)
list~insertColumn(1, col2Name, 80)
col3Name = getDB2columnName(3)
list~insertColumn(2, col3Name, 70)
do i = 1 to 200
data = getDB2rowData(i)
list~addRow(i, data~col1, data~col2, data~col3)
end
There is no reason you can not call your routine from the dialog code.
The above code's idea is this: call your routine to get the column names for
a table in DB2 that has 3 columns. Set the column names in the list view to
those 3 column names. Call your routine to get the row data for 200 rows
and fill in the list view with that data.
The other approach would be to assemble your data first using your DB2
routines and pass it into the dialog. But, the approach above would be
better I think.
As is usual in trying to give help, the more information you provide the
better help you will get. Without knowing anything about what your existing
routines are like, it is difficult to give you back specifics.
--
Mark Miesfeld
----------------------------------------------------------------------------
--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat
landscape has changed and how IT managers can respond. Discussions will
include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Oorexx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-users
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Oorexx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-users