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]

Reply via email to