Using text databases in Qt
-
wrote on 24 Apr 2011, 18:07 last edited by
Hi there
I need to use a CSV database with Qt. I read documentation but there is nothing about connection strings, defining provider etc. In fact
the program should be something like this: "http://support.microsoft.com/kb/210073":http://support.microsoft.com/kb/210073It read records stored in a text file, search between them and add records to it. there should be a file named Schema.ini like as described in above link.
note: I'm writing my homework. My TA send me some C# examples but I don't have Windows installed on my laptop.
-
wrote on 24 Apr 2011, 19:09 last edited by
That example from the link uses MS DAO which is not cross-platform so Qt will not have any direct support for it.
The supported drivers can be found in your Qt source directory under src/sql/drivers. These include odbc so maybe you can access your csv "database" by using odbc with a suitable connection string to hok up to the DAO stuff. Not something I have ever tried.
I would instead simply import your csv file into a proper SQL database table(s) or maybe write a custom QAbstractTableModel sub-class that provides access to your data via Qt's modelview architecture.
-
wrote on 24 Apr 2011, 19:19 last edited by
Hmmm,
How do I import a csv into SQL with Qt? -
wrote on 24 Apr 2011, 22:01 last edited by
To import csv into SQLite (for example) you should create new sqlite database, create table there, read your csv file line by line, parse each line and insert it into sqlite database. Nothing extra hard here.
But I think that another ZapB's solution is better (about sub-classing QAbstractItemModel) -
wrote on 25 Apr 2011, 07:19 last edited by
What's more: I know somebody has already "done that subclassing":http://libqxt.bitbucket.org/doc/0.6/qxtcsvmodel.html for you, and created a QAbstractItemModel that reads CSV files.
-
wrote on 25 Apr 2011, 07:42 last edited by
Andre, that's great. I think it will help OP to solve his problem.
-
wrote on 25 Apr 2011, 09:19 last edited by
Unles the whole point of the homework assignment was to use SQL of course ;-)
-
wrote on 25 Apr 2011, 09:31 last edited by
ZapB, for me it looks a bit strange to use sql for csv :)
-
wrote on 25 Apr 2011, 09:33 last edited by
I think I can't describe what I really need. In this project there are various text database in CSV format with a single Schema.ini file. The .ini file includes description about records stored in each database. something like this:
@
[customers.txt]
customerID/name/last/
delimiter=';'[sales.txt]
customerID/stuffID/count/fee/date
delimiter=';'
@then we should use a SQL command object to interact with data. like this:
@
"select * from customers.txt where ..."
@which returns an array of System.Object. libqxt (what Andre says) is great for working with CSV's but I can't find a way to use sql with that model.
-
wrote on 25 Apr 2011, 09:36 last edited by
So sql is required? In this case I think the best approach is firstly convert csv to sqlite and after it use sqlite databases.
-
wrote on 25 Apr 2011, 10:12 last edited by
ok thank you, I'll try and come back...
-
wrote on 25 Apr 2011, 10:34 last edited by
Agreed, import them into sqlite would be the simplest approach to this somewhat artificial assignment.
-
wrote on 25 Apr 2011, 17:35 last edited by
Agreed, though that approach will not give you System.Object's, whatever those may be exactly. It will give you a QSqlQuery with records containing a QVariant for each field in the record.
1/13