PDA

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...