I have done slight changes in the code and its working for select() statement but still facing problem in case of delete():
code: def test(): query = request.vars['keywords'] if query: print query row =str(db(query).select(db.status.ALL)) if row: print row redirect(URL('status')) In this case query string is : *status.id = "12"* So I am getting result properly, but problem is: if I remove *db.status.ALL* from select() statement , it again gives the same error : *<type 'exceptions.SyntaxError'> Set: no tables selected* Same applies for delete() statement, even for delete we can't specify the database table name as a parameter like select(). On Wednesday, 21 November 2012 12:01:08 UTC+5:30, Amit wrote: > > I have added button "Delete" beside Clear button on SQLFORM.grid and when > user selects query and click on it , I am passing the query to my > controller function and using regular expression I just prepending "db." > and changing "=" to "==" and passing the query to the db() function but it > throws SyntaxError : Set: no tables selected. > > Please check below the code: > > def status(): > > grid = SQLFORM.grid(db.status) > > grid[0][1][1].components.append(TAG.a('Delete',_id="px-delete",\ > _class > ="btn",_onclick="window.location > = '" \ > + URL('default','test')+"?"+ "'+ > $('#web2py_keywords').serialize();\ > ")) > > return locals() > > > def test(): > > query = request.vars['keywords'] > > if query: > modfied_query = re.sub(r'(status)', r'db.\1', query) > final_query = re.sub(r'(=)', r'=\1', modfied_query) > > row =db(final_query).select().first() > if row: > print row > redirect(URL('status')) > > here, status is the grid view where I added the Delete button and after > query selection If I click button , I am able to get the query like > status.id = "12", I changed it using regex to db.status.id == "12" and > passing the final string to db() function , please check test() function. > > I am getting error on the below statement: > > *row **=db(final_query).select().first()* > > where "final_query" value will be db.status.id == "12". > > But if I use the same query like this: > > *row =db(db.status.id == "12").select().first()* > > it works fine. > > So not sure what I am doing wrong on the passing string as query. > > --