Author: Dennis Lee Bieber
Posted: 2011-12-31 at 20:01:01
On Sun, 1 Jan 2012 07:51:00 +1100, James Bull
<jamesmhbull@gmail.com> wrote:
>I use SQLite.
>Below are bizobjs; done using classdesigner, added datastructure as needed.
>In both allergies and ptmeds(medication).
>
>
>class AllergiesBizobj(dabo.biz.dBizobj):
> def initProperties(self):
> self.super()
> self.Caption = "Allergies"
> self.DataSource = "allergies"
> self.KeyField = "pkid"
>
> self.DataStructure = (
> ("pkid", "I", True, "allergies", "pkid"),
> ("ptid", "I", False, "allergies", "ptid"),
> ("allergywhat", "C", False, "allergies", "allergywhat"),
> ("allergydscrp", "C", False, "allergies", "allergydscrp"),
> )
>
> def afterInit(self):
> self.DataSource = "allergies"
> self.KeyField = "pkid"
> self.LinkField="ptid"
> self.addFrom("allergies")
>
> self.addField("allergywhat")
> self.addField("allergydscrp")
> self.addField("pkid")
> self.addField("ptid")
>
> self.ParentLinkField="ptid"
> self.FillLinkFromParent="True"
> self.NewRecordOnNewParent="True"
>
>class PtmedsBizobj(dabo.biz.dBizobj):
> def afterInit(self):
> self.DataSource = "ptmeds"
> self.KeyField = "pkid"
> self.addFrom("ptmeds")
>
> self.addField("mednote")
> self.addField("stop")
> self.addField("medfreq")
> self.addField("meds")
> self.addField("meddose")
> self.addField("start")
> self.addField("pkid")
> self.addField("ptid")
>
> self.LinkField="ptid"
> self.FillLinkFromParent="True"
> self.NewRecordOnNewParent="True"
>
>ptds is patient dataset
>allergiesds = ptds.execute("""select d.ptid, d.fname,d.lname, allergies.allergywhat, allergies.pkid as allpkid, ptmeds.pkid as medpkid, ptmeds.meds
> from dataset d
> join allergies
> on d.ptid = allergies.ptid
> join ptmeds
> on d.ptid = ptmeds.ptid""")
The first thing I see is that there is no sort order specified on
the result set. Without that, you'd have a hard time doing any report
break points. Oh, and do you need the allergy and medication primary
keys (I presume pkid is primary key) in the results? For a report
probably not.
... order by d.ptid, allergies.pkid, ptmeds.pkid
or
... order by d.lname, d.fname, allergies.pkid, ptmeds.pkid
and then treat d.ptid (or d.lname + d.fname) as a first level break, and
allergies.pkid (if you output it, otherwise use allergies.allergywhat)
as a second level break.
firstLevel = None
secondLevel = None
for rec in resultset:
if rec.ptid = firstLevel:
outLine.= ["", "", ""] #same patient, don't repeat data
else:
outLine = [str(rec.ptid), rec.lname, rec.fname]
firstLevel = rec.ptid
if rec.allergieswhat = secondLevel:
outLine.append("") #same allergy, don't repeat it
else:
outLine.append(rec.allergieswhat)
secondLevel = rec.allergieswhat
outLine.append(rec.ptmeds)
# format the output line using the fields from outLine
--
Wulfraed Dennis Lee Bieber AF6VN
wlfraed@ix.netcom.com HTTP://wlfraed.home.netcom.com/
_______________________________________________
Post Messages to: Dabo-users@leafe.com
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message: http://leafe.com/archives/byMID/hpavf75ar8jqp3hh882g24g1bnbslfch10@4ax.com