Subject Re: oodml coversion
From Mervyn Bick <invalid@invalid.invalid>
Date Tue, 24 May 2016 16:23:36 +0200
Newsgroups dbase.getting-started
Attachment(s) test_email.wfm

On 23/05/2016 21:54, Charlie wrote:

> Hi Mervyn..
>
> Thanks very much!  I'll start working on this.  I miss coding and this will give me something to learn!
>

Umm, don't spend too much time on that example as it doesn't work.  :-(

The multiple JOINs aren't doing what I thought they would and I haven't
been able to work out what is needed to fix it.

A slightly different approach using only 1 JOIN does work.  As you have
everything in one table that makes it even simpler.  (You really must
consider normalising your data.  But that's a discussion for another day.)

Have a look at the attached example.  I've tried to write it so that it
will use you nazdat table.  It is, however, not tested as I don't have a
copy of your table.  The calculated column shows the number of orders in
the selected period.  If you don't want this showing in the grid you can
use the columns property of the grid to exclude it.

To run the form you will first need to create a database alias
NAZDAT_DATA for the folder where you keep nazdat.dbf.  To do this you
will need to run the BDE admin program as Administrator.  Shout if you
need help.

Mervyn.




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

class test_emailForm of FORM
   with (this)
      onOpen = class::FORM_ONOPEN
      height = 24.3182
      left = 5.0
      top = 0.5
      width = 170.7143
      text = ""
   endwith

   this.NAZDAZ_DATA1 = new DATABASE(this)
   with (this.NAZDAZ_DATA1)
      left = 60.0
      databaseName = "NAZDAZ_DATA"
      active = true
   endwith

   this.NAZDAZ1 = new QUERY(this)
   with (this.NAZDAZ1)
      left = 75.0
      database = form.nazdaz_data1
      sql = "Select l_name,f_name,email,count(sdate) as c1 "
      sql +="From nazdaz "
      sql +="where sdate between :d1 and :d2 and not (email is null or email = ' ') "
      sql +="group by l_name,f_name,email order by l_name,f_name"
      params["d1"] = new date(1900,0,1)
      params["d2"] = new date(2200,0,1)
      active = true
   endwith

   this.RADIOBUTTON1 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON1)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 3.3182
      width = 43.0
      text = "Customers with orders in last 7 days"
      group = true
   endwith

   this.RADIOBUTTON2 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON2)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 5.6364
      width = 43.0
      text = "Customers with orders in last 30 days"
   endwith

   this.RADIOBUTTON3 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON3)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 7.9545
      width = 43.0
      text = "Customers with orders in last 90 days"
   endwith

   this.RADIOBUTTON4 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON4)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 10.2727
      width = 43.0
      text = "Customers with orders in past year"
   endwith

   this.RADIOBUTTON5 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON5)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 12.5909
      width = 43.0
      text = "Customers with orders in past 2 years"
   endwith

   this.RADIOBUTTON6 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON6)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 14.9091
      width = 43.0
      text = "Loyal customers (more than 10 orders in 2 years)"
   endwith

   this.RADIOBUTTON7 = new RADIOBUTTON(this)
   with (this.RADIOBUTTON7)
      onChange = class::RADIOBUTTON_ONCHANGE
      height = 1.0909
      left = 4.0
      top = 17.2273
      width = 44.0
      text = "All customers"
      value = true
   endwith

   this.ENTRYFIELD1 = new ENTRYFIELD(this)
   with (this.ENTRYFIELD1)
      height = 1.0
      left = 67.0
      top = 22.0
      width = 8.0
      value = 0
   endwith

   this.TEXTLABEL1 = new TEXTLABEL(this)
   with (this.TEXTLABEL1)
      height = 1.0
      left = 77.0
      top = 22.0
      width = 17.0
      text = "Records selected"
   endwith

   this.GRID1 = new GRID(this)
   with (this.GRID1)
      dataLink = form.nazdaz1.rowset
      allowEditing = false
      height = 16.0
      left = 53.0
      top = 4.0
      width = 110.0
   endwith

   this.rowset = this.nazdaz1.rowset

   function RADIOBUTTON_onChange()
      if form.radiobutton1.value =true
         form.nazdaz1.params["d1"] = form.endDate - 7
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 0'
       elseif form.radiobutton2.value = true
         form.nazdaz1.params["d1"] = form.endDate - 30
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 0'
       elseif form.radiobutton3.value = true
         form.nazdaz1.params["d1"] = form.endDate - 90
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 0'    
      elseif form.radiobutton4.value = true
         form.nazdaz1.params["d1"] = form.endDate - 365
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 0'    
      elseif form.radiobutton5.value = true
         form.nazdaz1.params["d1"] = form.endDate - 730
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 0'  
      elseif form.radiobutton6.value = true
         form.nazdaz1.params["d1"] = form.endDate - 730
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 10'
      elseif form.radiobutton7.value = true
         form.nazdaz1.params["d1"] = form.endDate - 100000
         form.nazdaz1.params["d2"] = form.endDate
         form.nazdaz1.rowset.filter = 'c1 > 0'
      endif
      form.nazdaz1.requery()
      form.entryfield1.value = form.nazdaz1.rowset.count()
      return

   function form_onOpen()
      form.endDate = new date()
      form.nazdaz1.params["d1"] = form.enddate - 100000
      form.nazdaz1.params["d2"] = form.endDate
      form.nazdaz1.requery()
      form.entryfield1.value = form.nazdaz1.rowset.count()
      return

endclass

/*

If the form is opened in the designer the sQL statement will be output as a long line.
This cop is for easy reference.

      sql = "Select l_name,f_name,email,count(sdate) as c1 "
      sql +="From nazdaz "
      sql +="where sdate between :d1 and :d2 and not (email is null or email = ' ') "
      sql +="group by l_name,f_name,email order by l_name,f_name"
      params["d1"] = new date(1900,0,1)
      params["d2"] = new date(2200,0,1)
      
      
*/