Subject Re: FILTER
From Mervyn Bick <invalid@invalid.invalid>
Date Fri, 24 Mar 2017 09:52:39 +0200
Newsgroups dbase.getting-started
Attachment(s) test_filter.wfm

On 2017-03-23 10:03 PM, Mustansir Ghor wrote:
> Dear all
>
> I am using updateset to append a rowset2 from rowset1. I have applied filter condition to rowset1 and after beginfilter() statement, when I append, all records of rowset1 are appended to rowset2.
>
> Any leads on this logical error how to rectify so that only filter records can be appended.
>
> best Regards
> Mustansir
>

When I first read your message my immediate reactions was "That's what I
would expect.  The filter doesn't change the actual rowset, it simply
hides the rows it doesn't want.  The rowset, as used by updateset, is
still the full rowset."

Although I do use filters on occasion I normally use parameter driven
queries as they are more flexible and I have never had a problem with
the updateset class.

As an aside, I seldom use the copy() method of the updateset class.
Instead I use the SQL  select * from table where ... save to whatever.
This overwrites the existing table so it can't be used where one needs
to append to an existing table.

Before replying to your message I set up a little test form and I found
that updateset DOES respect the filter.  Have a look at the code in the
example form and compare it with your own code.

Before you run the attached example form you will need to open it in the
sourcecode editor and edit the path to library.dbf if necessary.

Mervyn.




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

class test_filterForm of FORM
   with (this)
      height = 34.8182
      left = 6.0
      top = 1.7273
      width = 149.5714
      text = ""
   endwith

   this.LIBRARY2 = new QUERY(this)
   with (this.LIBRARY2)
      left = 2.0
      top = 32.0
      sql = 'select * from "D:\dUFLP11\Library.DBF" where whatitis like :what'
      params["what"] = "%"
      active = true
   endwith

   this.LIBRARY1 = new QUERY(this)
   with (this.LIBRARY1)
      left = 47.0
      top = 32.0
      sql = 'select * from "D:\dUFLP11\Library.DBF"'
      active = true
   endwith

   this.GRID1 = new GRID(this)
   with (this.GRID1)
      dataLink = form.library1.rowset
      height = 22.5
      left = 4.0
      top = 1.0
      width = 63.0
   endwith

   this.GRID2 = new GRID(this)
   with (this.GRID2)
      dataLink = form.library2.rowset
      height = 22.5
      left = 84.0
      top = 1.0
      width = 63.0
   endwith

   this.PUSHBUTTON1 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON1)
      onClick = class::PUSHBUTTON1_ONCLICK
      height = 1.0909
      left = 24.0
      top = 26.0
      width = 15.2857
      text = "Filter"
   endwith

   this.PUSHBUTTON2 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON2)
      onClick = class::PUSHBUTTON2_ONCLICK
      height = 1.0909
      left = 105.0
      top = 26.0
      width = 15.2857
      text = "Select"
   endwith

   this.ENTRYFIELD1 = new ENTRYFIELD(this)
   with (this.ENTRYFIELD1)
      height = 1.0
      left = 61.0
      top = 26.0
      width = 24.0
      value = "File Method"
   endwith

   this.PUSHBUTTON3 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON3)
      onClick = class::PUSHBUTTON3_ONCLICK
      height = 1.0909
      left = 24.0
      top = 29.0
      width = 15.2857
      text = "Clear Filter"
   endwith

   this.PUSHBUTTON4 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON4)
      onClick = class::PUSHBUTTON4_ONCLICK
      height = 1.0909
      left = 105.0
      top = 29.0
      width = 15.2857
      text = "Show all"
   endwith

   this.PUSHBUTTON5 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON5)
      onClick = class::PUSHBUTTON5_ONCLICK
      height = 1.0909
      left = 24.0
      top = 32.0
      width = 15.2857
      text = "Update filter1"
   endwith

   this.PUSHBUTTON6 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON6)
      onClick = class::PUSHBUTTON6_ONCLICK
      height = 1.0909
      left = 105.0
      top = 32.0
      width = 15.2857
      text = "Update filter2"
   endwith

   this.rowset = this.library1.rowset

   function PUSHBUTTON1_onClick()
      form.library1.rowset.filter = "whatitis = '"+form.entryfield1.value+"'"
      return

   function PUSHBUTTON2_onClick()
      form.library2.params['what'] = form.entryfield1.value+'%'
      form.library2.requery()
      return

   function PUSHBUTTON3_onClick()
      form.library1.rowset.filter = ''
      return

   function PUSHBUTTON4_onClick()
      form.library2.params['what'] = '%'
      form.library2.requery()
      return

   function PUSHBUTTON5_onClick()
      u = new UpdateSet()
      u.source = form.library1.rowset
      u.destination = "filter1.dbf"
      u.copy()
      u = null

      return

   function PUSHBUTTON6_onClick()
      u = new UpdateSet()
      u.source = form.library2.rowset
      u.destination = "filter2.dbf"
      u.copy()
      u = null
      return

endclass