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
>>>>>
>>>>>

Reply via email to