| Subject |
Re: Print Entryfield Editor |
| From |
Norman Snowden <duluth@msn.com> |
| Date |
Thu, 28 Apr 2022 12:02:58 -0400 |
| Newsgroups |
dbase.getting-started |
Mervyn Bick Wrote:
> On 2022/04/26 05:34, Norman Snowden wrote:
>
> > I hesitate to bring p this additional question about the Editor. My program includes rowsets of people I know. I copied an Array of those that are Checkboxed relatives and used the Editor to calculate "Last", "first", names "birthday",etc. of those particular people. It runs fine and an option will also print the results. However, the name of the generated text.file becomes embedded into the dbf Table field "Last" name. After returning to the home page the last name identify has been replaced with the text.file name. The same result occurs when beginning from any highlighted persons
> > name on the Home page. Oddly, the names shown in the ListBox which is also on the Home page show correctively. The Editor code I used is shown in my original Post.
> >
> > This is not critical as I am a hobby programmer. Even so, any comment would be appreciated. Thanks, Norman
> >
>
> Don't ever hesitate to ask if you have a problem. There is no limit to
> the number of questions anyone may ask and there is no such thing as a
> "silly" question.
>
> There is nothing in the pushbutton11 onClick event handler which could
> write back to the .dbf file. As you didn't give us all the code which
> creates the array it is not possible to pinpoint the problem. Somewhere
> in there is a line which assigns the file name to the "last" field. If
> you can't find it post all the code that creates the array so that fresh
> eyes can look at it for you.
>
> Unless you really need the array you can create the list in the editor
> direct from the .dbf file. A little example is attached.
>
> The example uses a table from the DBASESAMPLES database so the choice of
> indexes is relevant to the table.
>
> If you need make a list of relatives from your table you could use an
> index and the rowset's setRange() method. You would need an index on
> the relative field in your table. Because this is a logical field it
> needs to be presented as a character for the index.
>
> use yourtable exclusive
> index on iif(relative = true,'t','f') tag relative
> use
>
> Note, you can't use 'true' or 'false' in the index expression as the
> index values for all records must be the same length.
>
> If you want the names in alphabetical order
>
> index on iif(relative = true,'t','f')+last tag relative_last
>
> To include just the relatives in your list
>
> form.queryname.rowset.indexname = 'relative_last'
> form.queryname.rowset.setRange('t')
>
> To return to an ordered list of all names with non-relatives followed by
> relatives
>
> form.queryname.rowset.clearRange()
>
> To return to the unordered list
>
> form.queryname.rowset.indexname = ''
>
>
>
> The table's MDX file can hold up to 47 indexes so you should be able to
> create an index for any situation.
>
>
> Mervyn.
> ** END HEADER -- do not remove this line
> //
> // Generated on 2022-04-27
> //
> parameter bModal
> local f
> f = new employeesForm()
> if (bModal)
> f.mdi = false // ensure not MDI
> f.readModal()
> else
> f.open()
> endif
>
> class employeesForm of FORM
> with (this)
> onOpen = class::FORM_ONOPEN
> height = 22.0455
> left = 47.2857
> top = 0.3182
> width = 62.5714
> text = ""
> endwith
>
> this.DBASESAMPLES1 = new DATABASE(this)
> with (this.DBASESAMPLES1)
> left = 14.0
> width = 11.0
> height = 1.0
> databaseName = "DBASESAMPLES"
> active = true
> endwith
>
> this.EMPLOYEES1 = new QUERY(this)
> with (this.EMPLOYEES1)
> left = 4.0
> width = 8.0
> height = 1.0
> database = form.dbasesamples1
> sql = "select * from EMPLOYEES.DBF"
> active = true
> endwith
>
> this.EDITOR1 = new EDITOR(this)
> with (this.EDITOR1)
> height = 14.3636
> left = 7.5714
> top = 1.6364
> width = 46.0
> value = ""
> fontName = "Consolas"
> endwith
>
> this.ENTRYFIELD1 = new ENTRYFIELD(this)
> with (this.ENTRYFIELD1)
> height = 1.0
> left = 33.2857
> top = 18.0455
> width = 15.7143
> value = "employees.txt"
> endwith
>
> this.PUSHBUTTON1 = new PUSHBUTTON(this)
> with (this.PUSHBUTTON1)
> onClick = class::PUSHBUTTON1_ONCLICK
> height = 1.0909
> left = 39.8571
> top = 19.9545
> width = 15.2857
> text = "Print using Word"
> endwith
>
> this.PUSHBUTTON2 = new PUSHBUTTON(this)
> with (this.PUSHBUTTON2)
> onClick = class::PUSHBUTTON2_ONCLICK
> height = 1.0909
> left = 2.7143
> top = 19.9545
> width = 15.2857
> text = "Create list"
> endwith
>
> this.TEXTLABEL1 = new TEXTLABEL(this)
> with (this.TEXTLABEL1)
> height = 1.0
> left = 33.8571
> top = 16.7273
> width = 12.0
> text = "File name"
> endwith
>
> this.COMBOBOX1 = new COMBOBOX(this)
> with (this.COMBOBOX1)
> onChange = class::COMBOBOX1_ONCHANGE
> height = 1.0
> left = 14.8571
> top = 18.0455
> width = 15.2857
> style = 1 // DropDown
> endwith
>
> this.TEXTLABEL2 = new TEXTLABEL(this)
> with (this.TEXTLABEL2)
> height = 1.0
> left = 18.8571
> top = 16.7273
> width = 12.0
> text = "Order by"
> endwith
>
> this.rowset = this.employees1.rowset
>
> function COMBOBOX1_onChange()
> if this.value = 'No Index'
> form.employees1.rowset.indexname = ''
> else
> form.employees1.rowset.indexname = this.value
> endif
> return
>
> function PUSHBUTTON1_onClick()
> cFile = set('directory')+'\'+form.entryfield1.value
> oWord = new oleAutoclient("word.application")
> oWord.documents.open(cFile,false,true)
> oWord.activeDocument.printOut()
> oWord.quit( 0 )
> release object oWord
> oWord = null
> return
>
> function PUSHBUTTON2_onClick()
> crlf = chr(13)+chr(10)
> if empty(form.entryfield1.value)
> msgbox('File name required','Error')
> return
> else
> f = new file()
> f.create(form.entryfield1.value)
> endif
> //reset the row pointer and empty editor display
> //Not needed for first list but required if the index is changed for a new list
> form.employees1.rowset.first()
> form.editor1.value = ''
> ferf = form.employees1.rowset.fields //"shortcut" to save typing in the loop
> do while not form.employees1.rowset.endofset
> cStr = trim(ferf['firstname'].value)+' '+trim(ferf['lastname'].value)
> cstr += space(25-len(cstr))
> cStr += ferf['hiredate'].value
> f.puts(cStr)
> form.editor1.value += cStr+crlf
> form.employees1.rowset.next()
> enddo
> f.close()
> return
>
> function form_onOpen()
> //tableDef object has an array contining the available index names
> t=new TableDef()
> t.tableName=form.employees1.rowset.tablename
> t.load()
> //create new array with 'No Index' option
> form.indexNames = new array()
> form.indexNames.add('No Index')
> //add the indexes available
> for n = 1 to t.indexes.size
> form.indexNames.add(t.indexes[n].indexname)
> next
> //assign new array to combobox's datasource
> form.combobox1.datasource = 'array form.indexNames'
> return
>
> endclass
>
Mervyn, thanks so much. I ran your code in a new Form from the Samples dbf. It worked perfect. There is much for me to learn from it, such as Array implementation, Indexing ,etc.
I have been dabbling in programing since 1983, when I bought my first computer, a Zenith 100. Shortly, thereafter the big news was: THE AIR FORCE HAS BOUGHT 100 ZENITH 100 COMPUTERS! Bill Gates was running around the country speaking to local Computer Clubs trying to sell his PC operating system that IBM had paid him to write. My how times has changed! Norman
|
|