Subject |
Re: Forms Processing Text Box buffer to Data Fields |
From |
maurizio S. <mau@mau.it> |
Date |
Fri, 12 Sep 2014 15:12:09 +0200 |
Newsgroups |
dbase.getting-started |
Recently (almost dB 8.x and 9.x) I changed my programming mind approach,
follows other tips here in NG
to keep much clear the code, in case you will switch to backend server, but
also continue using BDE, they convinced me to NOT use rowset.methods nor
datalinked nor editable grid
use Server side approach, like Insert, Update, Delete...
just my two cents
Maurizio
"Mervyn Bick" ha scritto nel messaggio news:op.xl2ctuzl380wm4@mervynb...
On Thu, 11 Sep 2014 01:25:25 +0200, Robert Hughes <hughes@infoconn.com>
wrote:
> Hello, I have not coded anything since COBOL for Y2K. Can anyone point me
> to a sample File Maintenance Form that manages a sub-form Master/Detail
> relationship using the native .dbf file format. Is there any
> documentation concerning the Forms Processing definitions and Variables
> created by the Forms program generator.
If you ask 12 programmers how to do this you'll probably get a dozen
different answers and each programmer will tell you that his/her method is
better than all the others. <g>
The examples below have been tested with dBASE Plus 2.8 and dBASE Plus
8.1.3. They haven't been tested with dBASE Plus 9 but they should work.
Mark and copy the code in masterrowset.wfm. In the dBASE command panel
enter modi comm masterrowset.wfm and press enter. This will open the
sourcecode editor. Paste the code into the editor and save. Follow the
same process with master_edit.wfm and child_edit.wfm. You can then run
masterrowset.wfm. The examples are written to recreate the tables every
time masterrowset.wfm is run. To change this simply comment out each of
the two "drop table" commands at the top of masterrowset.wfm by placing //
at the start of each line
dBASE is now focused on Object Oriented Programming (OOP) although most of
the old hierarchical commands that date back to CP/M and MSDOS based dBASE
are still available. With OOP it is more common to use properties of
objects rather than variables although variables are available to the
programmer.
The properties of all objects are listed in the Language Reference and the
dBASE help file. In addition when a form is open in the form designer all
the properties, events and methods for the form and any objects on the
form can be seen in the Inspector. If the Inspector isn't visible
pressing F11 should do the trick.
You don't say what experience you have with OOP or which version of dBASE
you will be using. Later versions of dBASE came with a complimentary copy
of the second issue of Ken Mayer's The dBASE Book. (A copy of the third
edition would be a good investment. Ken has also published the dBASE
Reports Book. http://www.goldenstag.net/dbase/ ) You could also have a
look at the dBASE knowledgebase at
http://www.dbase.com/support/knowledgebase/
Event driven programming for the Windows environment is a whole new ball
game compared to hierarchical programming so if you don't follow the code
in the examples please feel free to come back with questions.
Mervyn.
******** Start of masterrowset.wfm ***************
if file('mbcustomer.dbf')
drop table mbcustomer
endif
if not file('mbcustomer.dbf')
create table mbcustomer (custid autoinc,custname character(10),;
custcity character(15))
insert into mbcustomer (custname,custcity) values ("Alpha
","Bloemfontein ")
insert into mbcustomer (custname,custcity) values ("Bravo ","Durban ")
insert into mbcustomer (custname,custcity) values ("Charlie ","Cape Town
")
insert into mbcustomer (custname,custcity) values ("Delta
","Johannesburg ")
insert into mbcustomer (custname,custcity) values ("Echo ","Brandfort ")
endif
if file('mbtrans.dbf')
drop table mbtrans
endif
if not file('mbtrans.dbf')
create table mbtrans (id autoinc,custid numeric(10,0),invno
character(10),invdate date,;
invamt numeric(10,2))
insert into mbtrans (custid,invno,invdate,invamt) values (1,"1001
","01/31/2011",100.00)
insert into mbtrans (custid,invno,invdate,invamt) values (2,"1002
","02/28/2011",200.00)
insert into mbtrans (custid,invno,invdate,invamt) values (3,"1003
","03/31/2011",300.00)
insert into mbtrans (custid,invno,invdate,invamt) values (4,"1004
","04/30/2010",400.00)
insert into mbtrans (custid,invno,invdate,invamt) values (1,"1005
","05/31/2010",500.00)
insert into mbtrans (custid,invno,invdate,invamt) values (2,"1006
","06/30/2010",110.00)
insert into mbtrans (custid,invno,invdate,invamt) values (3,"1007
","07/31/2010",120.00)
insert into mbtrans (custid,invno,invdate,invamt) values (4,"1008
","08/31/2010",130.00)
insert into mbtrans (custid,invno,invdate,invamt) values (1,"1009
","09/30/2010",150.00)
insert into mbtrans (custid,invno,invdate,invamt) values (2,"1010
","10/31/2010",150.00)
insert into mbtrans (custid,invno,invdate,invamt) values (3,"1011
","11/30/2010",160.00)
insert into mbtrans (custid,invno,invdate,invamt) values (4,"1012
","12/31/2010",170.00)
insert into mbtrans (custid,invno,invdate,invamt) values (4,"1013
","12/31/2010",180.00)
use mbtrans exclusive
index on custId tag custid
use
endif
** END HEADER -- do not remove this line
//
// Generated on 2014/09/11
//
parameter bModal
local f
f = new masterrowsetForm()
if (bModal)
f.mdi = false // ensure not MDI
f.readModal()
else
f.open()
endif
class masterrowsetForm of FORM
with (this)
onOpen = class::FORM_ONOPEN
onClose = class::FORM_ONCLOSE
height = 24.5455
left = 4.8571
top = 0.3636
width = 124.7143
text = ""
endwith
this.MBCUSTOMER1 = new QUERY()
this.MBCUSTOMER1.parent = this
with (this.MBCUSTOMER1)
left = 2.8571
top = 0.4091
sql = 'select * from "mbcustomer.DBF"'
active = true
endwith
with (this.MBCUSTOMER1.rowset)
autoEdit = false
endwith
this.MBTRANS1 = new QUERY()
this.MBTRANS1.parent = this
with (this.MBTRANS1)
left = 20.4286
top = 0.4091
sql = 'select * from mbtrans.dbf"'
active = true
endwith
with (this.MBTRANS1.rowset)
autoEdit = false
indexName = "CUSTID"
masterRowset = form.mbcustomer1.rowset
masterFields = "custid"
endwith
this.GRID1 = new GRID(this)
with (this.GRID1)
dataLink = form.mbcustomer1.rowset
allowEditing = false
allowAddRows = false
height = 7.7727
left = 5.0
top = 4.2273
width = 85.1429
endwith
this.GRID2 = new GRID(this)
with (this.GRID2)
dataLink = form.mbtrans1.rowset
allowEditing = false
allowAddRows = false
height = 7.7727
left = 5.0
top = 13.8182
width = 85.1429
endwith
this.TEXTLABEL1 = new TEXTLABEL(this)
with (this.TEXTLABEL1)
height = 1.0
left = 5.8571
top = 2.7273
width = 12.0
text = "Master"
endwith
this.TEXTLABEL2 = new TEXTLABEL(this)
with (this.TEXTLABEL2)
height = 1.0
left = 5.8571
top = 12.2727
width = 12.0
text = "Child"
endwith
this.PUSHBUTTON1 = new PUSHBUTTON(this)
with (this.PUSHBUTTON1)
onClick = class::PUSHBUTTON1_ONCLICK
height = 1.0909
left = 97.0
top = 7.5455
width = 15.2857
text = "Update Master"
endwith
this.PUSHBUTTON2 = new PUSHBUTTON(this)
with (this.PUSHBUTTON2)
onClick = class::PUSHBUTTON2_ONCLICK
height = 1.0909
left = 97.8571
top = 16.7273
width = 15.2857
text = "Update Child"
endwith
this.rowset = this.mbcustomer1.rowset
function PUSHBUTTON1_onClick
form.master_edit.mbcustomer1 = form.mbcustomer1
form.master_edit.entryfield1.datalink =
form.mbcustomer1.rowset.fields["custid"]
form.master_edit.entryfield2.datalink =
form.mbcustomer1.rowset.fields["custname"]
form.master_edit.entryfield3.datalink =
form.mbcustomer1.rowset.fields["custcity"]
form.master_edit.readmodal()
return
function PUSHBUTTON2_onClick
form.child_edit.mbcustomer1 = form.mbcustomer1
form.child_edit.entryfield1.datalink =
form.mbtrans1.rowset.fields["id"]
form.child_edit.entryfield2.datalink =
form.mbtrans1.rowset.fields["custid"]
form.child_edit.entryfield3.datalink =
form.mbtrans1.rowset.fields["invno"]
form.child_edit.entryfield4.datalink =
form.mbtrans1.rowset.fields["invdate"]
form.child_edit.entryfield5.datalink =
form.mbtrans1.rowset.fields["invamt"]
form.child_edit.readmodal()
return
function form_onClose
form.mbcustomer1.active = false
form.mbtrans1.active = false
return
function form_onOpen
set procedure to master_edit.wfm
form.master_edit = new master_editform()
form.master_edit.mdi = false
form.master_edit.parent = this
set procedure to child_edit.wfm
form.child_edit = new child_editform()
form.child_edit.mdi = false
form.child_edit.parent = this
return
endclass
*********** End of masterrroset.wfm ************
******** Start of master_edit.wfm *************
** END HEADER -- do not remove this line
//
// Generated on 2014/09/11
//
parameter bModal
local f
f = new master_editForm()
if (bModal)
f.mdi = false // ensure not MDI
f.readModal()
else
f.open()
endif
class master_editForm of FORM
with (this)
height = 16.0
left = 54.4286
top = 7.9091
width = 74.1429
text = "Update master table"
sysMenu = false
endwith
this.PUSHBUTTON1 = new PUSHBUTTON(this)
with (this.PUSHBUTTON1)
onClick = class::PUSHBUTTON1_ONCLICK
height = 1.0909
left = 2.4286
top = 12.1364
width = 15.2857
text = "New"
endwith
this.PUSHBUTTON2 = new PUSHBUTTON(this)
with (this.PUSHBUTTON2)
onClick = class::PUSHBUTTON2_ONCLICK
height = 1.0909
left = 2.8571
top = 10.5
width = 15.2857
text = "Edit"
endwith
this.PUSHBUTTON3 = new PUSHBUTTON(this)
with (this.PUSHBUTTON3)
onClick = class::PUSHBUTTON3_ONCLICK
height = 1.0909
left = 51.8571
top = 10.5
width = 15.2857
text = "Save"
endwith
this.PUSHBUTTON4 = new PUSHBUTTON(this)
with (this.PUSHBUTTON4)
onClick = class::PUSHBUTTON4_ONCLICK
height = 1.0909
left = 51.8571
top = 12.1364
width = 15.2857
text = "Abandon/Close"
endwith
this.ENTRYFIELD1 = new ENTRYFIELD(this)
with (this.ENTRYFIELD1)
onOpen = class::ENTRYFIELD1_ONOPEN
when = {||false}
height = 1.0
left = 8.1429
top = 6.4545
width = 8.0
value = ""
endwith
this.ENTRYFIELD2 = new ENTRYFIELD(this)
with (this.ENTRYFIELD2)
onOpen = class::ENTRYFIELD2_ONOPEN
height = 1.0
left = 21.5714
top = 6.5
width = 16.2857
value = ""
endwith
this.ENTRYFIELD3 = new ENTRYFIELD(this)
with (this.ENTRYFIELD3)
onOpen = class::ENTRYFIELD3_ONOPEN
height = 1.0
left = 43.2857
top = 6.5
width = 20.0
value = ""
endwith
this.TEXTLABEL1 = new TEXTLABEL(this)
with (this.TEXTLABEL1)
height = 1.0
left = 8.1429
top = 4.5909
width = 12.0
text = "custid"
endwith
this.TEXTLABEL2 = new TEXTLABEL(this)
with (this.TEXTLABEL2)
height = 1.0
left = 21.5714
top = 4.5909
width = 12.0
text = "custname"
endwith
this.TEXTLABEL3 = new TEXTLABEL(this)
with (this.TEXTLABEL3)
height = 1.0
left = 43.2857
top = 4.5909
width = 12.0
text = "custcity"
endwith
this.PUSHBUTTON5 = new PUSHBUTTON(this)
with (this.PUSHBUTTON5)
onClick = class::PUSHBUTTON5_ONCLICK
height = 1.0909
left = 27.2857
top = 10.5
width = 15.2857
text = "Delete"
endwith
function PUSHBUTTON1_onClick
form.entryfield1.datalink = null
form.entryfield1.value = "AutoInc"
form.parent.mbcustomer1.rowset.beginAppend()
form.entryfield2.setfocus()
return
function PUSHBUTTON2_onClick
form.parent.mbcustomer1.rowset.beginEdit()
return
function PUSHBUTTON3_onClick
form.parent.mbcustomer1.rowset.save()
form.close()
return
function PUSHBUTTON4_onClick
form.parent.mbcustomer1.rowset.abandon()
form.close()
return
function PUSHBUTTON5_onClick
local cMessage
cMessage = "Are you sure you want to delete this
record?"+chr(13)+chr(10)
cMessage += "All its child records will be deleted as well."
if msgbox( cMessage, "Delete", 4) == 6
form.parent.mbtrans1.rowset.first()
do while not form.parent.mbtrans1.rowset.endofset
form.parent.mbtrans1.rowset.delete()
form.parent.mbtrans1.rowset.next()
enddo
form.mbcustomer1.rowset.delete()
form.close()
endif
return
endclass
*********** End of master_edit.wfm ***************
***********child_edit.wfm ******************
** END HEADER -- do not remove this line
//
// Generated on 2014/09/11
//
parameter bModal
local f
f = new child_editForm()
if (bModal)
f.mdi = false // ensure not MDI
f.readModal()
else
f.open()
endif
class child_editForm of FORM
with (this)
height = 16.0
left = 54.4286
top = 7.9091
width = 74.1429
text = "Update master table"
sysMenu = false
endwith
this.PUSHBUTTON1 = new PUSHBUTTON(this)
with (this.PUSHBUTTON1)
onClick = class::PUSHBUTTON1_ONCLICK
height = 1.0909
left = 2.4286
top = 12.1364
width = 15.2857
text = "New"
endwith
this.PUSHBUTTON2 = new PUSHBUTTON(this)
with (this.PUSHBUTTON2)
onClick = class::PUSHBUTTON2_ONCLICK
height = 1.0909
left = 2.8571
top = 10.5
width = 15.2857
text = "Edit"
endwith
this.PUSHBUTTON3 = new PUSHBUTTON(this)
with (this.PUSHBUTTON3)
onClick = class::PUSHBUTTON3_ONCLICK
height = 1.0909
left = 51.8571
top = 10.5
width = 15.2857
text = "Save"
endwith
this.PUSHBUTTON4 = new PUSHBUTTON(this)
with (this.PUSHBUTTON4)
onClick = class::PUSHBUTTON4_ONCLICK
height = 1.0909
left = 51.8571
top = 12.1364
width = 15.2857
text = "Abandon/Close"
endwith
this.ENTRYFIELD1 = new ENTRYFIELD(this)
with (this.ENTRYFIELD1)
when = {||false}
height = 1.0
left = 7.4286
top = 2.9545
width = 8.0
value = ""
endwith
this.ENTRYFIELD2 = new ENTRYFIELD(this)
with (this.ENTRYFIELD2)
when = {||false}
height = 1.0
left = 20.8571
top = 3.0
width = 8.0
value = ""
endwith
this.ENTRYFIELD3 = new ENTRYFIELD(this)
with (this.ENTRYFIELD3)
height = 1.0
left = 6.2857
top = 6.6818
width = 17.4286
value = ""
endwith
this.TEXTLABEL1 = new TEXTLABEL(this)
with (this.TEXTLABEL1)
height = 1.0
left = 7.4286
top = 1.0909
width = 12.0
text = "id"
endwith
this.TEXTLABEL2 = new TEXTLABEL(this)
with (this.TEXTLABEL2)
height = 1.0
left = 20.8571
top = 1.0909
width = 12.0
text = "custid"
endwith
this.TEXTLABEL3 = new TEXTLABEL(this)
with (this.TEXTLABEL3)
height = 1.0
left = 6.2857
top = 5.1818
width = 12.0
text = "invno"
endwith
this.PUSHBUTTON5 = new PUSHBUTTON(this)
with (this.PUSHBUTTON5)
onClick = class::PUSHBUTTON5_ONCLICK
height = 1.0909
left = 27.2857
top = 10.5
width = 15.2857
text = "Delete"
endwith
this.ENTRYFIELD4 = new ENTRYFIELD(this)
with (this.ENTRYFIELD4)
height = 1.0
left = 27.4286
top = 6.7273
width = 17.4286
value = " "
endwith
this.ENTRYFIELD5 = new ENTRYFIELD(this)
with (this.ENTRYFIELD5)
height = 1.0
left = 48.5714
top = 6.6818
width = 17.4286
value = " "
endwith
this.TEXTLABEL4 = new TEXTLABEL(this)
with (this.TEXTLABEL4)
height = 1.0
left = 27.4286
top = 5.1818
width = 12.0
text = "invdate"
endwith
this.TEXTLABEL5 = new TEXTLABEL(this)
with (this.TEXTLABEL5)
height = 1.0
left = 48.5714
top = 5.0455
width = 12.0
text = "invdate"
endwith
function PUSHBUTTON1_onClick
form.entryfield1.datalink = null
form.entryfield1.value = "AutoInc"
form.parent.mbtrans1.rowset.beginAppend()
form.entryfield3.setfocus()
return
function PUSHBUTTON2_onClick
form.parent.mbtrans1.rowset.beginEdit()
return
function PUSHBUTTON3_onClick
form.parent.mbtrans1.rowset.save()
form.close()
return
function PUSHBUTTON4_onClick
form.parent.mbtrans1.rowset.abandon()
form.close()
return
function PUSHBUTTON5_onClick
if msgbox( "Are you sure you want to delete this record?", "Delete",
4) == 6
form.parent.mbtrans1.rowset.delete()
form.close()
endif
return
endclass
*********** End of child_edit.wfm ***********
|
|