Subject Re: Lookuprowset
From Peter <phb2020@hotmail.com>
Date Wed, 03 May 2023 16:30:11 -0400
Newsgroups dbase.getting-started
Attachment(s) ins_info.DBF

Peter Wrote:
Hi, Mervin,
I was able to get your example up and running.
I then tried to modify it to do the same thing for Ins_info file.  User enters 2 character Ins_code and the onKey function returns ins_name to entryfield2.
I get \"Invalid Ins ID\", entryfield1 gets focus with only one space.
The INS_INFO file has 2 fields, INS_CODE (2 characters), and INS_NAME (40 characters). I hopefully attached it.  MDX Index is on INS_CODE tag INS_CODE.
Can you find my error?
With thanks as always,
Peter


** END HEADER -- do not remove this line
//
// Generated on 05/03/2023
//
parameter bModal
local f
f = new lookup_testForm()
if (bModal)
   f.mdi = false // ensure not MDI
   f.readModal()
else
   f.open()
endif

class lookup_testForm of FORM
   with (this)
      onOpen = class::FORM_ONOPEN
      height = 22.3182
      left = 26.5714
      top = -0.8182
      width = 64.7143
      text = \"\"
   endwith

   this.DATABASE1 = new DATABASE(this)
   with (this.DATABASE1)
      left = 36.0
      top = 3.0
      width = 7.0
      height = 1.0
      databaseName = \"MYDATA\"
      active = true
   endwith

   this.INS_LOOKUP1 = new QUERY(this)
   with (this.INS_LOOKUP1)
      left = 36.0
      width = 9.0
      height = 1.0
      sql = \"select * from :MYDATA:ins_info where ins_code=upper(:ins_code)\"
      params[\"ins_code\"] = \"\"
      active = true
   endwith

   this.ENTRYFIELD2 = new ENTRYFIELD(this)
   with (this.ENTRYFIELD2)
      when = {||false}
      height = 1.0
      left = 18.0
      top = 6.3636
      width = 40.0
      fontSize = 12.0
      value = \"\"
   endwith

   this.TEXT1 = new TEXT(this)
   with (this.TEXT1)
      height = 0.7727
      left = 3.1429
      top = 4.9545
      width = 10.8571
      text = \"Enter Ins ID \"
   endwith

   this.ENTRYFIELD1 = new ENTRYFIELD(this)
   with (this.ENTRYFIELD1)
      onKey = class::ENTRYFIELD1_ONKEY
      height = 1.0
      left = 4.4286
      top = 6.4545
      width = 8.0
      picture = \"!!\"
                maxlength = 2
      fontSize = 12.0
      value = \"  \"
   endwith

   this.ENTRYFIELD3 = new ENTRYFIELD(this)
   with (this.ENTRYFIELD3)
      height = 1.0
      left = 4.4286
      top = 9.0455
      width = 25.7143
      value = \"dummy to accept focus\"
   endwith

   this.TEXT2 = new TEXT(this)
   with (this.TEXT2)
      height = 1.7273
      left = 5.0
      top = 11.1818
      width = 48.4286
      text = \"Entering a valid two character stateID will look up the State name and dispay it in entryfield2.\"
   endwith

   this.TEXT3 = new TEXT(this)
   with (this.TEXT3)
      height = 1.5
      left = 5.0
      top = 13.2727
      width = 48.1429
      text = \"Entryfield2 can never receive focus as its WHEN event handler has been set {||false}\"
   endwith

   this.TEXT4 = new TEXT(this)
   with (this.TEXT4)
      height = 2.2727
      left = 5.0
      top = 16.1818
      width = 48.1429
      text = \"A valid stateId will lookup the State name and display it in entryfield2.  Focus will move to the next object in the z_order.\"
   endwith

   this.TEXT5 = new TEXT(this)
   with (this.TEXT5)
      height = 1.5
      left = 5.0
      top = 19.2273
      width = 48.1429
      text = \"An invalid stateID will blank the entry in entryfield1 and wait for a new value.\"
   endwith

   this.TEXT6 = new TEXT(this)
   with (this.TEXT6)
      height = 1.5
      left = 4.2857
      top = 0.6818
      width = 30.7143
      text = \"Mimic the DML LOOKUP() function in OODML\"
   endwith


   function ENTRYFIELD1_OnKey(nChar, nPosition,bShift,bControl)
      if  len(TRIM(this.value)) >1  // Two characters entered
         form.INS_LOOKUP1.params[\'INS_CODE\'] = this .value //pass value in entryfield to query parameter
         form.INS_LOOKUP1.requery()  // fetch state name for the given stateID
         //Test to see if a valid stateID was entered
         if form.INS_lookup1.rowset.count() = 1 //found the state
            form.entryfield2.value = form.Ins_lookup1.rowset.fields[\'ins_name\'].value
            this.before.setfocus()  //Move focus to next object in z-order
         else // stateId not found  
            form.entryfield2.value = \'Invalid INS Code\'
            form.entryfield1.value = \'\' //Empty entryfield
            form.entryfield1.setfocus() //Back to entryfield to try again
         endif  
      endif  
      return

   function form_onOpen()
      form.entryfield1.setfocus()
      return

endclass



> Mervyn Bick Wrote:

> >
> >
> > ** END HEADER -- do not remove this line
> > //
> > // Generated on 2023-05-01
> > //
> > parameter bModal
> > local f
> > f = new lookup_testForm()
> > if (bModal)
> >    f.mdi = false // ensure not MDI
> >    f.readModal()
> > else
> >    f.open()
> > endif
> >
> > class lookup_testForm of FORM
> >    with (this)
> >       onOpen = class::FORM_ONOPEN
> >       height = 21.5455
> >       left = 27.1429
> >       top = 0.0455
> >       width = 60.2857
> >       text = \"\"
> >    endwith
> >
> >    this.STATES_LOOKUP1 = new QUERY(this)
> >    with (this.STATES_LOOKUP1)
> >       left = 36.0
> >       width = 11.0
> >       height = 1.0
> >       sql = \"select * from states_lookup.DBF where stateID = upper( :stateID)\"
> >       params[\"stateID\"] = \"\"
> >       active = true
> >    endwith
> >
> >    this.ENTRYFIELD2 = new ENTRYFIELD(this)
> >    with (this.ENTRYFIELD2)
> >       when = {||false}
> >       height = 1.0
> >       left = 24.0
> >       top = 6.3636
> >       width = 29.0
> >       value = \"\"
> >    endwith
> >
> >    this.TEXT1 = new TEXT(this)
> >    with (this.TEXT1)
> >       height = 0.7727
> >       left = 3.1429
> >       top = 4.9545
> >       width = 14.5714
> >       text = \"Enter State ID \"
> >    endwith
> >
> >    this.ENTRYFIELD1 = new ENTRYFIELD(this)
> >    with (this.ENTRYFIELD1)
> >       onKey = class::ENTRYFIELD1_ONKEY
> >       height = 1.0
> >       left = 4.4286
> >       top = 6.4545
> >       width = 8.0
> >       value = \"\"
> >    endwith
> >
> >    this.ENTRYFIELD3 = new ENTRYFIELD(this)
> >    with (this.ENTRYFIELD3)
> >       height = 1.0
> >       left = 4.4286
> >       top = 9.0455
> >       width = 25.7143
> >       value = \"dummy to accept focus\"
> >    endwith
> >
> >    this.TEXT2 = new TEXT(this)
> >    with (this.TEXT2)
> >       height = 1.7273
> >       left = 5.0
> >       top = 11.1818
> >       width = 48.4286
> >       text = \"Entering a valid two character stateID will look up the State name and dispay it in entryfield2.\"
> >    endwith
> >
> >    this.TEXT3 = new TEXT(this)
> >    with (this.TEXT3)
> >       height = 1.5
> >       left = 5.0
> >       top = 13.2727
> >       width = 48.1429
> >       text = \"Entryfield2 can never receive focus as its WHEN event handler has been set {||false}\"
> >    endwith
> >
> >    this.TEXT4 = new TEXT(this)
> >    with (this.TEXT4)
> >       height = 2.2727
> >       left = 5.0
> >       top = 16.1818
> >       width = 48.1429
> >       text = \"A valid stateId will lookup the State name and display it in entryfield2.  Focus will move to the next object in the z_order.\"
> >    endwith
> >
> >    this.TEXT5 = new TEXT(this)
> >    with (this.TEXT5)
> >       height = 1.5
> >       left = 5.0
> >       top = 19.2273
> >       width = 48.1429
> >       text = \"An invalid stateID will blank the entry in entryfield1 and wat for a new value.\"
> >    endwith
> >
> >    this.TEXT6 = new TEXT(this)
> >    with (this.TEXT6)
> >       height = 1.5
> >       left = 4.2857
> >       top = 0.6818
> >       width = 30.7143
> >       text = \"Mimic the DML LOOKUP() function in OODML\"
> >    endwith
> >
> >
> >    function ENTRYFIELD1_OnKey(nChar, nPosition,bShift,bControl)
> >       if  len(this.value) >1  // Two characters entered
> >          form.states_lookup1.params[\'stateID\'] = this .value //pass value in entryfield to query parameter
> >          form.states_lookup1.requery()  // fetch state name for the given stateID
> >          //Test to see if a valid stateID was entered
> >          if form.states_lookup1.rowset.count() = 1 //found the state
> >             form.entryfield2.value = form.states_lookup1.rowset.fields[\'state\'].value
> >             this.before.setfocus()  //Move focus to next object in z-order
> >          else // stateId not found  
> >             form.entryfield2.value = \'Invalid StateID\'
> >             form.entryfield1.value = \'\' //Empty entryfield
> >             form.entryfield1.setfocus() //Back to entryfield to try again
> >          endif  
> >       endif  
> >       return
> >
> >    function form_onOpen()
> >       form.entryfield1.setfocus()
> >       return
> >
> > endclass
> >
>
> I haven\'t forgotten about you, Mervyn.
> I am trying to change your form to use the actual DBF names that I have.
> If I get stumped I will paste what I have changed and resend to you.
> Peter