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.