What are you returning in case no rows are found? Also, you can instead do:
row = db(db.invent.partnum == request.vars.partnum).select().first() if row: etc. .first() returns the first row or None if there are no records. Anthony On Thursday, June 7, 2012 10:49:54 AM UTC-4, Joel Robinson wrote: > > Thanks for the reply, but its still not working correctly. I changed the > code to the following: > > if rows: > row = rows[0] > record = crud.update(db.invent, row.id ) > return dict(record=record) > > with a URL like: > > http://localhost:8000/GeorgesTV/qrinv/update_inventory?partnum=LAMP-4 > > I will get the correct web page, but when I change a value and hit the > submit button I just get sent to > a page that says "None". If I reload the page the values are unchanged. > Nothing was updated. > > Joel Robinson > > On Thursday, June 7, 2012 9:33:57 AM UTC-5, Anthony wrote: >> >> Same problem -- everything has to go inside your "if rows:" block -- >> don't attempt to create a crud.update form if no rows have been returned. >> >> Anthony >> >> On Thursday, June 7, 2012 10:30:17 AM UTC-4, Joel Robinson wrote: >>> >>> Thanks for the reply. I tried your sugestion but am still getting an >>> error, though a different one: >>> >>> Traceback (most recent call last): >>> File "/home/joel/Source/web2py/gluon/restricted.py", line 205, in >>> restricted >>> exec ccode in environment >>> File >>> "/home/joel/Source/web2py/applications/GeorgesTV/controllers/qrinv.py" >>> <http://127.0.0.1:8000/admin/default/edit/GeorgesTV/controllers/qrinv.py>, >>> line 136, in <module> >>> File "/home/joel/Source/web2py/gluon/globals.py", line 173, in <lambda> >>> self._caller = lambda f: f() >>> File >>> "/home/joel/Source/web2py/applications/GeorgesTV/controllers/qrinv.py" >>> <http://127.0.0.1:8000/admin/default/edit/GeorgesTV/controllers/qrinv.py>, >>> line 131, in update_inventory >>> record = crud.update(db.invent, row.id ) >>> UnboundLocalError: local variable 'row' referenced before assignment >>> >>> Just to be clear the page is coming up initialy. This error only happens >>> when I click >>> on the submit button. Thanks again for your help. >>> >>> Joel Robinson >>> >>> >>> >>> On Wednesday, June 6, 2012 4:14:29 PM UTC-5, Massimo Di Pierro wrote: >>>> >>>> Looks like the error is at >>>> >>>> row = rows[0] >>>> >>>> because rows is empty (no records matching query). You need a check >>>> like >>>> >>>> if rows: >>>> row = rows[0] >>>> >>>> >>>> >>>> On Wednesday, 6 June 2012 12:19:14 UTC-5, Joel Robinson wrote: >>>>> >>>>> First, let me give some background on what I've been trying to do. We >>>>> wanted to set up an inventory system using QR codes which would be put on >>>>> stickers on our stock and then scaned with smartphone when removing >>>>> inventory bring up the appropiate web page. The QR code should contain >>>>> something like: >>>>> >>>>> http://GeorgesTV/qrinv/update_inventory?partnum=12345 >>>>> >>>>> and the following is the code I wrote for update_inventory: >>>>> >>>>> rows = db(db.invent.partnum == request.vars.partnum).select() >>>>> # change rows object to row object >>>>> row = rows[0] >>>>> >>>>> # display queried object >>>>> record = crud.update(db.invent, row.id) >>>>> return dict(record=record) >>>>> >>>>> initialy it would work fine it would run the query and pull up the >>>>> correct record but >>>>> if I tried to update the record I would get the folling error: >>>>> >>>>> >>>>> Traceback (most recent call last): >>>>> File "/home/joel/Source/web2py/gluon/restricted.py", line 205, in >>>>> restricted >>>>> exec ccode in environment >>>>> File >>>>> "/home/joel/Source/web2py/applications/GeorgesTV/controllers/qrinv.py" >>>>> <http://127.0.0.1:8000/admin/default/edit/GeorgesTV/controllers/qrinv.py>, >>>>> line 123, in <module> >>>>> File "/home/joel/Source/web2py/gluon/globals.py", line 173, in <lambda> >>>>> self._caller = lambda f: f() >>>>> File >>>>> "/home/joel/Source/web2py/applications/GeorgesTV/controllers/qrinv.py" >>>>> <http://127.0.0.1:8000/admin/default/edit/GeorgesTV/controllers/qrinv.py>, >>>>> line 116, in update_inventory >>>>> row = rows[0] >>>>> File "/home/joel/Source/web2py/gluon/dal.py", line 7755, in __getitem__ >>>>> row = self.records[i] >>>>> IndexError: list index out of range >>>>> >>>>> I thought maybe the request variable wasn't getting passed correctly when >>>>> updated so I made the following change: >>>>> >>>>> session.partnum = request.vars.partnum >>>>> rows = db(db.invent.partnum == session.partnum).select() >>>>> >>>>> which didn't help either, but I then noticed that if I tried to pull up >>>>> the update_inventory page now without the query string >>>>> it would come up since session varible was already set and it would >>>>> update correctly! >>>>> >>>>> I was eventualy able to get it work more or less how I wanted by writing >>>>> a page whose only function was to take the >>>>> query string set a session variable and then redirect you to the >>>>> update_inventory page. But I worry that using session varibles >>>>> may cause unforseen problems eventualy. >>>>> >>>>> So what I would like to know, is this a bug I've found or am I going >>>>> about doing this incorrectly? Could someone explains >>>>> what happens when you use crud.update and why I get this error when I try >>>>> to use query strings? >>>>> >>>>> Thanks in advance for your help. >>>>> >>>>> Joel Robinson >>>>> >>>>>