Hi Jim,
PanX 10.2 is working very well. I have a few minor issues, which could be entirely due to my programming. Sometimes I find blank rows in a database and I don’t know how they were created. I added a button to a couple of DBs to delete the blank rows; not a big deal. Also, we have occasionally had someone out of sync with the server and downloading the data was necessary. Again, I don’t know how that happened. We have the occasional crash, but most of the DBs are quite stable. I have asked people to tell me any time there is a crash, since I want to eliminate them, but I have had almost no reports.
I recently shared our largest database, with over 70,000 records. It is used daily and has many complex procedures. So far, so good. Some operations are noticeably slower, which was not a surprise. I discovered that you cannot use removeselected statement once a DB is share; why is that? To delete a group of records, I wrote a loop to delete them one at a time.
I did a major overhaul of one of our oldest databases, which we have just started using in PanX. The database had over 230 fields. This is because the DB is used to generate forms in worker’s compensation cases. There are lots of discrete pieces of information on the forms; one form had over 50 unique pieces of data. The overhaul put the unique data for each form into a dataarray, which is stored in a binary field. That required a lot of steps and programming, but they are all working, and the database now has 118 fields.
I plan to move the last four people from Pan6 to PanX on next Monday.
Do you have a date for the next release? Just curious; nothing is necessary at the moment.
I saw a note that you are adding beta testers before long. I hope that goes well.
I wrote my own wizard for the GetTextDialog statement. I posted it below in case you are curious about what I did, along with a screenshot of the form that works with the procedure. The first part opens the form and initializes the variables. The second part builds the code and puts in on the clipboard so one can just paste it into the procedure you are working on.
Tom
StarttheCode:
letfileglobal fgoutput=“lvoutput”
letfileglobal fgprompt=“Please enter …”
letfileglobal fgsubprompt=""
letfileglobal fgbutton1=“Ok”
letfileglobal fgbutton2=“Cancel”
letfileglobal fgbutton3=""
letfileglobal fgsheet=“Y”
letfileglobal fgwidth=300
letfileglobal fgheight=24
letfileglobal fgabortbutton=""
openform “GTDWiz”
showvariables fgoutput,fgprompt, fgsubprompt,fgbutton1, fgbutton2, fgbutton3, fgsheet,fgwidth,fgheight,fgabortbutton
objectaction “OutputVariable”,“open”
rtn
MakeCode:
closeactiveobject
if sizeof(“fgoutput”)=0 Alertsheet “Enter the variable name please.” objectaction “OutputVariableokay”,“open” rtn endif
if sizeof(“fgprompt”)=0 Alertsheet “Enter the prompt please.” objectaction “GTDPrompt”,"open"rtn endif
closewindow
let fgcode={let }+fgoutput+{=""}+cr()+{Gettextdialog }+fgoutput+{,}+cr()+tab()+{“Prompt”, “}+fgprompt+{”,}+cr()+tab()+{“Subprompt”,"}+fgsubprompt+{",}+cr()+tab()+{“Button”,"}+fgbutton1+{",}+cr()+tab()+{}+{"}+?(fgabortbutton=“Y”,“Abort”,"")+{Button","}+fgbutton2+{",}+cr()+tab()+{“Button”,"}+fgbutton3+{",}+cr()+tab()+{“Sheet”,“Yes”,}+cr()+tab()+{“Width”,}+fgwidth+{,}+cr()+tab()+{“Height”, }+fgheight+cr()+
?(fgabortbutton≠"Y",{if info(“dialogtrigger”)=“Cancel”}+cr()+tab()+tab()+{rtn}+cr()+tab()+{endif},{})
clipboard()=fgcode
nsnotify “Paste your code into our procedure…”
undefine fgoutput,fgprompt, fgsubprompt,Button1, Button2, Button3, fgsheet,fgwidth,fgheight,fgabortbutton
rtn
TestCode:
execute {let }+fgoutput+{=""}+cr()+{Gettextdialog }+fgoutput+{,}+cr()+tab()+{“Prompt”, “}+fgprompt+{”,}+cr()+tab()+{“Subprompt”,"}+fgsubprompt+{",}+cr()+tab()+{“Button”,"}+fgbutton1+{",}+cr()+tab()+{}+{"}+?(fgabortbutton=“Y”,“Abort”,"")+{Button","}+fgbutton2+{",}+cr()+tab()+{“Sheet”,“Yes”,}+cr()+tab()+{“Width”,}+fgwidth+{,}+cr()+tab()+{“Height”, }+fgheight+cr()+
?(fgabortbutton≠"Y",{if info(“dialogtrigger”)=“Cancel”}+cr()+tab()+tab()+{rtn}+cr()+tab()+{endif},{})
rtn