View Full Version : QSqlField discovery auto_increment int value
patrik08
30th November 2006, 22:59
i suppose to find Index field auto_increment from a mysql or other .... fld.isAutoValue() must return true....
fld.requiredStatus give true ....
wy is evry QSqlRecord false?
how i can find it....?
QString Browser::StructureTable( QSqlRecord now )
{
QSqlRecord rec = now;
QString createtable;
QString sqltipename;
QStringList CreateTable;
int totalcools = rec.count();
if (totalcools > 0) {
/* sqlite3 table construct from odbc converter */
for (int i = 0; i < totalcools; ++i) {
QSqlField fld = rec.field(i);
QString name = Strtrimmed(fld.name());
QString typeoffield = QString(QVariant::typeToName(fld.type()));
/* fld.isAutoValue() never true from auto_increment mysql ??? */
if (fld.requiredStatus() and i < 2 and typeoffield == "int") {
sqltipename = QString("%1 INTEGER PRIMARY KEY").arg(name);
} else if ( typeoffield == "double" or typeoffield == "int" ) {
sqltipename = QString("%1 NUMERIC").arg(name);
} else if ( typeoffield == "QByteArray") {
sqltipename = QString("%1 BLOB").arg(name);
} else {
sqltipename = QString("%1 TEXT").arg(name);
}
CreateTable.append(sqltipename);
////////qDebug() << "### fieldname " << name;
///////////qDebug() << "### typeoffield " << typeoffield;
}
QString midlecreate = CreateTable.join(",");
midlecreate.prepend(QString("CREATE TABLE %1 (").arg(runningtable));
midlecreate.append(");");
createtable = midlecreate;
}
return createtable;
}
wysota
30th November 2006, 23:08
How do you create the QSqlRecord object?
patrik08
1st December 2006, 07:45
How do you create the QSqlRecord object?
simply on a qtextedit a select statment
qx is the full query
QSqlQuery query(qx,connectionWidget->currentDatabase());
QSqlRecord rec = query.record();
////////cvslines.append(StructureMYSQLTable(rec));
cvslines.append(StructureTable(rec));
svn co https://svn.sourceforge.net/svnroot/qtexcel-xslt/_odbc_wizard/ odbcwizard
cd odbcwizard && qmake a.pro && make
enter the text query && export .....
void Browser::exec()
{
last_query = sqlEdit->toPlainText();
tablelisten.clear();
QSqlDatabase currendb(connectionWidget->currentDatabase());
tablelisten = currendb.tables();
for (int i = 0; i < tablelisten.size(); ++i) {
QString tabi = tablelisten.at(i);
if (last_query.contains(tabi,Qt::CaseInsensitive)) {
runningtable = tabi;
}
}
QSqlQueryModel *model = new QSqlQueryModel(table);
model->setQuery(QSqlQuery(last_query,currendb));
table->setModel(model);
if (model->lastError().type() != QSqlError::NoError) {
emit statusMessage(model->lastError().text());
} else if (model->query().isSelect()) {
emit statusMessage(tr("Query OK on table %1").arg(runningtable));
emit registerQuerySuccess(last_query,runningtable); /* take last register table name .... */
} else {
emit statusMessage(tr("Query OK, number of affected rows: %1").arg(
model->query().numRowsAffected()));
}
updateActions();
}
void Export_Xml( QString qx , QString table )
{
bool okformat;
if (table.size() > 0) {
runningtable = table;
}
QStringList items;
items << "XML" << "CSV" << "SQLITE3" << "MYSQL";
QString msgDB =tr("You like to export last \"Query\" from table \"%1\"?").arg(runningtable);
int removeyes = QMessageBox::question(this, tr("Please Confirm:"),msgDB,tr("&Yes"), tr("&No"),QString(),8888,9999);
QString responder = QString::number(removeyes);
if (responder =="0") {
QString form = QInputDialog::getItem(this, tr("Select one export format..."),tr("Format:"), items, 0, false, &okformat);
if (okformat && !form.isEmpty()) {
if (form == "XML") {
ExportXmlPrimary(qx);
} else if (form == "CSV") {
ExportCSVPrimary(qx);
} else if (form == "MYSQL") {
ExportMysql(qx);
} else if (form == "SQLITE3") {
ExportSqlite3(qx);
}
}
}
QApplication::restoreOverrideCursor();
}
wysota
1st December 2006, 11:17
How is the code you posted above related to the problem?
Did you check that the query is valid using QSqlQuery::isValid()?
patrik08
2nd December 2006, 09:24
How is the code you posted above related to the problem?
Did you check that the query is valid using QSqlQuery::isValid()?
QSqlQuery::isValid() is valid true
QSqlRecord::requiredStatus() is true
only QSqlRecord::isAutoValue() is every time false on all field auto_increment mysql or index from sqlite.... http://doc.trolltech.com/4.2/demos-sqlbrowser-browser-cpp.html
wysota
2nd December 2006, 13:39
What happens if you pass NULL as a value to that field? Does the database generate a correct record for it? I think isAutoValue() will return true only if you first use QSqlField::setAutoValue().
patrik08
3rd December 2006, 11:19
What happens if you pass NULL as a value to that field? Does the database generate a correct record for it? I think isAutoValue() will return true only if you first use QSqlField::setAutoValue().
i need only to discover a clean shema from odbc driver mysql , access , sqlite ... ecc
if table is so.....
CREATE TABLE `BASE_0` (
`ID` int(22) NOT NULL auto_increment,
`LANGUAGE` varchar(100) default NULL,
`PREFIX` varchar(55) default NULL,
`TITLE` varchar(150) default NULL,
`NAME` varchar(100) default NULL,
`FIRST_NAME` varchar(110) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
i like to discover field "ID auto_increment" but i think is impossibel to make a clean dump from table .... driver mysql give a different result shema as odbc...
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.