Yes, I don't think you can use SQLFORM crud unless you have an 'id' column, or another primary key column that is an INT.
On Wednesday, March 28, 2012 5:28:44 PM UTC-7, Andrew wrote: > > Thankyou Derek, > I will give it a try , but this was only a simple, cut down, test case to > get it to work initially. I originally had a string for the PK, and I > also wanted to test multi column PKs. > I am confident the 'id' will work, but it doesn't address the other > scenarios. My real goal is to change another base adaptor, but I'm using > MSSQL as my baseline as it is supposed to work OK. > The next thing I will try is to do some db interaction without forms or > grids. I think that might be where the issue is. > Thanks again. > > On Thursday, March 29, 2012 10:50:41 AM UTC+13, Derek wrote: >> >> Try changing your field1 type to 'id'. >> like this: >> Field('Field1', 'id'), >> >> On Tuesday, March 27, 2012 10:56:44 PM UTC-7, Andrew wrote: >>> >>> Hello, >>> I posted on this issue some time ago and I'm pretty sure it was working >>> again after a fix from DenesL. >>> However I can't get Primary Key tables in MSSQL to work. They get >>> created OK, but I get errors with a Form in a view. >>> I originally made the Key a string, but then switched to integer just to >>> see if it made a difference. : >>> >>> *Model:* >>> dbSQL = DAL('mssql://....) >>> # 1 Column PK >>> dbSQL.define_table('web2py_int_PK', >>> Field('Field1', 'integer'), >>> Field('Field2', 'string', length=20), >>> format='%(Field1)s', >>> primarykey = ['Field1'], >>> migrate=True) >>> >>> *Controller:* >>> def web2py_int_PK_form(): >>> form = SQLFORM(dbSQL.web2py_int_PK) >>> if form.process().accepted: >>> response.flash = 'form accepted' >>> elif form.errors: >>> response.flash = 'form has errors' >>> else: >>> response.flash = 'please fill out the form' >>> return dict(form=form) >>> >>> *View:* >>> {{extend 'layout.html'}} >>> <h1>Primary Key Form Test</h1> >>> {{=form}} >>> >>> I get this in the ticket: >>> File "D:\Mercurial\web2py\gluon\dal.py", line 6912, in __getitem__ >>> return dict.__getitem__(self, str(key)) >>> KeyError: '_id' >>> >>> It looks like it is trying to retrieve the value for "_id" , but looking >>> at the code __init__ for a table, _id never gets set for a table with a >>> Primary Key. (look at lines 6752, 6762, 6772). >>> >>> Just wondering if something like line 772 in sqlhtml.py (In the SQLFORM >>> __init__ method). "self.id_field_name = table._id.name" could >>> cause the above lookup of the _id key ? Do Forms work with keyed tables ? >>> >>> Thanks >>> Andrew W >>> >>> >>>