Using text databases in Qt
-
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.
-
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.
-
Hmmm,
How do I import a csv into SQL with Qt? -
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) -
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.
-
Andre, that's great. I think it will help OP to solve his problem.
-
Unles the whole point of the homework assignment was to use SQL of course ;-)
-
ZapB, for me it looks a bit strange to use sql for csv :)
-
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.
-
So sql is required? In this case I think the best approach is firstly convert csv to sqlite and after it use sqlite databases.
-
ok thank you, I'll try and come back...
-
Agreed, import them into sqlite would be the simplest approach to this somewhat artificial assignment.
-
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.