On Saturday, 4 May 2013 00:33:37 UTC+10, Anthony wrote:
>
> Hard to say what's going on. Just loading the grid doesn't do any writing 
> to the database, so something else must be happening. Can you produce a 
> minimal app that replicates this behavior with SQLite?


Yes, it seems so. At least, when I change the database vci_admin to by 
sqlite (and allow migration to create the table), I get exactly the same 
behavior. 
 I use Windows sqlite software navicat to watch the sqlite database, and 
it's the same. The match_patient controller updates the table, and 
everytime I dispaly the sqlform.grid, it resets every value in the 
cm_patient_id column to the default.

tomorrow I'll try to make a minimal app.



> Anthony
>
> On Friday, May 3, 2013 10:15:43 AM UTC-4, Tim Richardson wrote:
>>
>>
>>
>> On Friday, 3 May 2013 23:59:51 UTC+10, Anthony wrote:
>>>
>>> How did the record get created to begin with? Did it start with a 
>>> cm_patient_id value of 0? Are you sure you committed your change when using 
>>> the database management tool?
>>
>>
>> This works:
>> I open up the grid in web2py, and click on the button "Match Patients" 
>> which invokes the controller match_patient, allowing me to edit that record.
>> I match the patient, which updates the foreign key cm_patient_id via the 
>> requires=IS_IN_DB.
>> The calculated fields works too.
>>
>> So if I go to Management Studio and look at the table, I can see the 
>> foreign key (an integer) and the the calculated field (a string). So I'm 
>> definitely convinced that the edit of the record in the SQLFORM of 
>> match_patient() is committing. 
>>
>> Going back to web2py, if I refresh the SQLFORM.grid or enter it again, at 
>> that point the table is reset. The foreign key is set to 0, which is the 
>> default value, and the calculated field is set to NULL. Other fields are 
>> unaffected. Is it a database migration? (migrate = False in the model). The 
>> fact the the calculated field is set to NULL is probably not as interesting 
>> as the resetting of cm_patient_id.
>>
>> (if I change the table definition in Management Studio so that the 
>> default value is 99, then opening the controller which displays the grid 
>> puts 99 in every row (inspected via Management Studio)
>> Then I can edit the definition to make the default value 55, refresh the 
>> controller and I get 55 in every row. 
>> So the grid is wiping out that field and the database replaces it with 
>> the default value. 
>> I guess there is something wrong with my table definition.
>>
>>
>> This is what I have right now (I've disabled the compute) 
>>
>> db_vciadmin = DAL('mssql://tim:xxx@vci-win2003\hcnsql07/vciadmin',
>> lazy_tables=True,pool_size=10)
>> .
>> .
>> .
>>
>>
>>
>> db_vciadmin.define_table("web_form_1te",
>>             Field("patient_details_id",'integer',unique=True),
>>             Field("date_submitted","date"),
>>             Field("first_name","string"),
>>             Field("surname","string"),
>>             Field("dob","date"),
>>             #Field("cm_patient_id","reference cm_patient"),
>>             Field("cm_patient_id","integer"),
>>             #Field("patient","string", compute=lambda r: 
>> patient_name(r['cm_patient_id'])),
>>             Field("patient","string"),
>>             format='%(first_name)s %(surname)s',
>>             migrate=False
>>             ) 
>>
>>
>>
>>
>>
>>
>>  
>>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to