On Saturday 28 March 2009 08:13:50 am Paul McNett wrote:
> Manoharan Durga wrote:
> > I have a SQlite database called salarydata; it has a table called
> > stafflist. I want to generate a report to print the departmentwise
> > totals of salaries and advances. The department detail for each staff is
> > given in a field called ledger.
> >
> > I modified the Sample Report generated by AppWizard and tried making a
> > simple report. The code is given below.
> >
> > # -*- coding: utf-8 -*-
> >
> > import datetime
> > import decimal
> > import dabo
> >
> > def getLedgerDataSet():
> >
> > import sqlite3
> > conn=sqlite3.connect('/home/manoharan/apps/Salary/db/salarydata')
> > crs = conn.cursor()
> > crs.execute("select ledger, sum(salary), sum(advance) from
> > stafflist GROUP BY ledger")
> > #ds = crs.fetchall()
> > ds = []
> > for staff in crs.fetchall():
> > dsentry = "{'ledger': '" + staff[0] + "', "
> > dsentry = dsentry + "salarytotal: " + str(staff[1]) + ", "
> > dsentry = dsentry + "advancetotal: " + str(staff[2]) + "}, "
> > ds.append(dsentry)
> > return ds
> >
> > The dataset is actually generating the correct number of records; that
> > is, one record for each of the department that are in the table. But, in
> > the report generated, instead of the values, all the fields display a
> > message "string indices must be integers".
> >
> > The expressions used in the report are self.Record['ledger'] and
> > self.Record['salarytotal'] and self.Record['advancetotal']
> >
> > When I changed the str(staff[1]) to just staff[1], I get this error
> > message: TypeError: coercing to Unicode: need string or buffer, int found
> >
> > Can you please let me know what needs to be changed?
>
> The python expression:
>
> dsentry = dsentry + "salarytotal: " + str(staff[1])
>
> is valid, because you are concantating a string and a string.
>
> The python expression:
>
> dsentry = dsentry + "salarytotal: " + staff[1]
>
> is invalid, because apparently staff[1] is an int.
>
>
> What you want (I think) is a dataset with record names of 'ledger',
> 'salarytotal' and 'advancetotal', but you haven't boned up on basic Python
> yet so you don't know how to do it.
>
> Try this:
>
> def getLedgerDataSet():
>
> import sqlite3
> conn = sqlite3.connect('/home/manoharan/apps/Salary/db/salarydata')
> crs = conn.cursor()
>
> crs.execute("""
> select ledger,
> sum(salary),
> sum(advance)
> from stafflist
> GROUP BY ledger""")
>
> ds = []
> for staff in crs.fetchall():
> dsentry = {'ledger': staff[0],
> 'salarytotal': staff[1],
> 'advancetotal': staff[2],}
> ds.append(dsentry)
> return ds
>
> Paul
I always hate the determining the how to quote the strings etc.. So I build
them as follows:
dsentry['ledger']=staff[0]
dsentry['salarytotal'] = staff[1]
dsentry['advancetotal']= staff[2]
ds.append(dsentry)
--
John Fabiani
_______________________________________________
Post Messages to: [email protected]
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/[email protected]