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

Reply via email to