[Interest] Storing complex SQL relations with Qt
Jason H
scorp1us at yahoo.com
Thu Dec 12 20:24:27 CET 2013
I'm just coming into this, but I don't see the problem. Just make DataMapper ignorant about the ID, but let the TableModel know about it.
Also, SQLite has a implied RowID in addition (or instead of) your own autoincrement ID. Maybe that will help?
________________________________
From: Knut Krause <knut.krause at lagom.de>
To: interest at qt-project.org
Sent: Thursday, December 12, 2013 2:00 PM
Subject: Re: [Interest] Storing complex SQL relations with Qt
Thanks for your opinion. I thought I'd be at least this far right now but it
looks like I cannot insert new rows. I already opened a new thread
[Interest] How to insert a new record with generated primary key into a
QSqlTableModel
for that. But I've been readin all day long and I can't find a solution on how
I can initialize a new record with my DataMapper form …
Knut
Am Donnerstag, 12. Dezember 2013, 21:24:09 schrieb Constantin Makshin:
> Usually if you don't explicitly ask for a transaction, RDBMS creates an
> implicit one for each statement. AFAIK, SQLite uses this idea too.
>
> And the next to last paragraph at http://www.sqlite.org/autoinc.html
> gives an impression that uniqueness of values in AUTOINCREMENT columns
> isn't affected by transactions, i.e. automatically generated customer
> IDs will be unique no matter what happens to your application after step 1.
>
> SQLite driver's lastInsertId() returns the result of
> sqlite3_last_insert_rowid(), so step 2 looks safe enough (according to
> SQLite documentation, INTEGER PRIMARY KEY [AUTOINCREMENT] column is just
> an alias to row ID). Just remember to get it from the same query object
> you use to insert the customer. ;)
>
> Conclusion — your idea looks good to me. Not very portable (different
> RDBMSes [may] have different notation of "last insert ID"), but should
> work with SQLite.
>
> On 12/12/2013 10:57 AM, Knut Krause wrote:
> > Hi,
> >
> > my application uses sqlite for its data and I modeled some complex
> > relations for customers, appointments and so on.
> >
> > Now I want to edit such a relation using a custom dialog where the
> > appointments go to a list and some other stuff to a table (all are
> > QSqlTableModels).
> >
> > The problem is: How do I insert the data depending on other things? Let's
> > say an appointment needs a customer. I insert the new customer data and
> > the appointments and when I click on submit I'd have to do something like
> >
> > 1. insert customer (I think with primary key autoincrement I can simply do
> > that)
> >
> > 2. retrieve the inserted customers ID. Can I use the models query() to get
> > lastInsertId()? Is this save?
> >
> > 3. Set this ID to all models that depends on customer (by hand?) and
> > submit
> > them as well
> >
> > Is this approach safe? I mean AFAIK there are no transactions involved and
> > what happens for example if I insert the customer and then my application
> > crashes leaving my database in an inconsistent state?
> >
> > Would be nice if someone could explain how I'm supposed to do this.
> >
> > regards
> >
> >
> > Knut
_______________________________________________
Interest mailing list
Interest at qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20131212/2dbb4b1e/attachment.html>
More information about the Interest
mailing list