changed program and it won't work

Started by john on 8-Oct-2014/10:17:39-7:00
Hi I have changed this program and now it won't work. I have been absent from rebol for a while and I'm sure someone will spot my error. When I make an error entry (say I enter an alpha in a decimal field) the error isn't getting recorded in errfld and errmsg. This was working when errfld and errmsg were an array with positions 1/1 and 1/2. Now it doesn't work. I'm hoping someone with experience can spot this quickly and tell me what is going on here. Thx.
R E B O L [] fldblk: [vi to-integer vdc to-decimal vdt to-date vtm to-time vmn to-money] errchk: func [fldblk errfld errmsg ][ -foreach [fld tp] fldblk [ --;print errblk --;print i --f: get fld --;print rejoin [tp " " f/text] --if error? try [do rejoin [tp " " f/text]] [ errfld: fld errmsg: "Invalid entry" ] -] ] view gui: layout[ -vi: field -vdc: field -vdt: field -vtm: field -vmn: field - -button "val" [ --errfld: "" --errmsg: "" --errchk fldblk errfld errmsg --either errfld == "" [ ---alert "Good Entry" --][ ---alert reform ["Errors " errmsg] ---;print to-string errfld ---focus get errfld ---print errmsg ---return --] -] ]
Hi John, Try this: R E B O L [] fldblk: [vi to-integer vdc to-decimal vdt to-date vtm to-time vmn to-money] errchk: func [fldblk][ errfld: "" errmsg: "" foreach [fld tp] fldblk [ f: get fld if error? try [do rejoin [tp " " f/text]] [errfld: form fld errmsg: "Invalid entry" ] ] reduce [errfld errmsg] ] view gui: layout[ vi: field vdc: field vdt: field vtm: field vmn: field button "val" [ errs: errchk fldblk either errs/2 = "" [ alert "Good Entry" ][ alert reform ["Errors " errs/1] focus do errs/1 print errs/2 return ] ] ]
Hi Nick, Once again you have come to the rescue. Thx pal.
The money (vmn) field accepts very long numbers. But, if one were to later use to-money on an entry greater than 15 digits, a math error will occur. So this error would not be captured. Using a number greater in length than 9 digits in vi, the integer field, produces an an error alert. Sometimes. Except when 10 digits are used as the first entry to the field. If later applying to-integer to an entry longer than 9 digits a math error results. This error is captured - sometimes. The integer field error alert seems almost right, but shouldn't the money field generate an error when the length of the entry exceeds 15 in a way similar to integer field entry? Then again, why is vi and the to-integer function is limited to a length of 9 (or 10) and to-money limited to 15? Apologies in advance if I got this wrong. I found it confusing.

Reply