William Bryant wrote:

> On Nov 15, 2007 3:57 PM, Paul McNett <[EMAIL PROTECTED]> wrote:
>>
>> William Bryant wrote:
>>
>> > Hello all,
>> >
>> > I've generated a very simple app with the class designer.  The app 
>> > connects to
>> > a MySQL database.  Queries work fine, editing and deleting records work
>> > fine, but new records do not get inserted.
>> >
>> > I can insert records into the target table with a non-dabo python program.
>> >
>> > In the dabo app, I'm trying to insert by selecting "New Record" from
>> > the "Actions"
>> > pulldown, then selecting "Save Changes" from "Actions."  A traceback ends 
>> > with
>> > "No records updated" exception raised via 
>> > self.BackendObject.noResultsOnSave
>> > in dCursorMixin.py.
>> >
>> > I expect I've overlooked something pretty obvious; if so, please treat
>> > me gently,
>> > and many thanks!
>>
>> The first thing that comes to my mind is primary-key (pk) related. Is
>> the pk on the MySQL side an integer set to auto-increment?
>>
>> If so, you need one set of property settings on the bizobj, and if not,
>> you need another set.
>>
>> Also, can you please post the entire traceback you are getting?
>> Hopefully it'll show a MySQL exception and we can figure out what is
>> wrong from that.

 > The primary key is indeed an integer, but it is not set to 
auto-increment.


Okay, I believe that's your problem. Because you don't have your mysql 
table set to auto increment its primary key, you need to send a unique 
primary key. In Dabo, you do this by setting an appropriate entry in 
biz.DefaultValues. Such as:

class MyBizobj(dabo.biz.dBizobj):
   def initProperties(self):
     self.DefaultValues["my_pk_field_name"] = self.getRandomKey

   def getRandomKey(self):
     import random
     return random.randint(10000, 10000000)


Obviously, you need a better way to get your primary key value, but it 
shows what you need to do. The better solution in your case, since you 
are using integer keys, is to set your MySQL table to auto-increment 
your keys.


 > Below is the traceback; thanks so much for your help!
 >
 > Traceback (most recent call last):
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\lib\eventMixin.py",
 > line 98, in raiseEvent
 >     bindingFunction(event)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\lib\datanav2\Page.py",
 > line 334, in onRequery
 >     self.requery()
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\lib\datanav2\Page.py",
 > line 362, in requery
 >     ret = frm.requery(_fromSelectPage=True)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\lib\datanav2\Form.py",
 > line 483, in requery
 >     return self.super(dataSource)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\lib\autosuper\autosuper.py",
 > line 176, in __call__
 >     return method(*p, **kw)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\ui\uiwx\dForm.py",
 > line 431, in requery
 >     if not self.confirmChanges(bizobjs=bizobj):
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\ui\uiwx\dForm.py",
 > line 184, in confirmChanges
 >     self.save(dataSource=biz.DataSource)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\lib\datanav2\Form.py",
 > line 53, in save
 >     ret = super(Form, self).save(dataSource)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\ui\uiwx\dForm.py",
 > line 342, in save
 >     bizobj.saveAll()
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\biz\dBizobj.py",
 > line 272, in saveAll
 >     startTransaction=False, topLevel=False)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\biz\dBizobj.py",
 > line 639, in scanChangedRows
 >     func(*args, **kwargs)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\biz\dBizobj.py",
 > line 325, in save
 >     cursor.save()
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\db\dCursorMixin.py",
 > line 1066, in save
 >     saverow(self.RowNumber)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\db\dCursorMixin.py",
 > line 1037, in saverow
 >     self.__saverow(row)
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\db\dCursorMixin.py",
 > line 1150, in __saverow
 >     self.BackendObject.noResultsOnSave()
 >   File 
"C:\Python25\lib\site-packages\dabo-0.8.1s-py2.5.egg\dabo\db\dBackend.py",
 > line 108, in noResultsOnSave
 >     raise dException.dException, _("No records updated")
 > dException: No records updated

Unfortunately, we don't tend to preserve the original traceback from the 
database backend.

-- 
pkm ~ http://paulmcnett.com


_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message: http://leafe.com/archives/byMID/dabo-users/[EMAIL PROTECTED]

Reply via email to