Der designer qt4 richtig eingesetzt .... kann wahre wunder vollbringen ....
ich habe gesehen dass viele leuten die sql formulare vermissen mit dem qt3...
Im qt4 && designer habe ich es fertig bekommen automatische sql-insert update und automatische aufuellen von QLineEdit oder QComboBox zu machen..
Ohne nur einen feldnamen von hand zu schreiben im code.... (sondern nur im designer...)
Ich benenne einfach die QLineEdit & QComboBox objektnamen mit den feldnamen von der sql tabelle... mit einem DB_ vorann "DB_FELDNAME"....
Einfach in der classe die objekte abspeichern....
setupUi( this );
textList= this->findChildren<QLineEdit *>();
boxList= this->findChildren<QComboBox *>();
Dann kann man die perfekte insert/update vollbringen...
und die editierbare QComboBox haben eintragen von andere zeilen .. damit der user sie nicht neu schreiben muss...
aufuellen so....
Code: Alles auswählen
/* QLineEdit editable true */
for (int i=0;i<textList.size();i++){
obname =QString(textList[i]->objectName());
if (obname.startsWith("DB_")) {
dbfieldname = obname.right(obname.size() - 3);
textList[i]->setText(ItemAddo(dbfieldname,dbid));
qlinedb.append(dbfieldname);
}
}
/* QComboBox editable true */
int activateatebd = 0;
for (int i=0;i<boxList.size();i++){
obname =QString(boxList[i]->objectName());
if (obname.startsWith("DB_")) { /* exeption here */
dbfieldname = obname.right(obname.size() - 3);
/*qDebug() << "### dbfieldname " << dbfieldname; */
boxList[i]->clear();
QString running = ItemAddo(dbfieldname,dbid); /* grab current value */
boxList[i]->addItem(running);
QStringList actual = Query_List_Unique(QString( "SELECT DISTINCT %1 FROM CLIENTE order by %1" ).arg( dbfieldname ));
QStringListIterator o(actual);
while (o.hasNext()) {
QString nowset = QString(o.next());
boxList[i]->addItem(nowset);
}
boxList[i]->setEditable(true);
qboxCdb.append(dbfieldname);
}
}
QString Tab_Addo::ItemAddo(QString feldname , int id )
{
QString resu ="";
QString sqlop =QString("SELECT %1 FROM CLIENTE WHERE ID=%2 LIMIT 1").arg( feldname , QString::number(id));
QStringList oneitem = Query_List_Unique(sqlop);
if (oneitem.count() == 1) {
resu=oneitem.at(0);
}
return resu;
}
und update so...
Code: Alles auswählen
/* QLineEdit grab text */
for (int i=0;i<textList.size();i++){
obname =QString(textList[i]->objectName());
if (obname.startsWith("DB_")) {
dbfieldname = obname.right(obname.size() - 3);
Text_att.insert(i,QStringList() << dbfieldname << textList[i]->text());
CopyToNew.insert(copyN++,QStringList() << dbfieldname << textList[i]->text());
}
}
/* QComboBox grab text */
for (int i=0;i<boxList.size();i++){
obname =QString(boxList[i]->objectName());
if (obname.startsWith("DB_")) { /* exeption */
dbfieldname = obname.right(obname.size() - 3);
Box_att.insert(i+3,QStringList() << dbfieldname << boxList[i]->currentText()); /* 3 ++ moore at special policy*/
CopyToNew.insert(copyN++,QStringList() << dbfieldname << boxList[i]->currentText());
}
}
/* build insert query qlineedit */
QStringList setupqlines;
UpdateQuery::Iterator it;
for ( it = Text_att.begin(); it != Text_att.end(); ++it ) {
QStringList itemsetter = it.value();
QString sx = QString(itemsetter.at(0))+"='"+QString(itemsetter.at(1))+"'";
setupqlines.append(sx);
}
QString update_1 = setupqlines.join(", ");
Text_att.clear(); /* tank and by */
setupqlines.clear(); /* tank from qlinedit see you on combobox */
QString queryUpdate = QString( "UPDATE CLIENTE SET %1 WHERE ID=%2" ).arg( update_1 , QString::number(dbid) );
/*qDebug() << "### queryUpdate" << queryUpdate; */
ok1 = executeSQL(queryUpdate);
/* build insert query combobox */
UpdateQuery::Iterator de;
for ( de = Box_att.begin(); de != Box_att.end(); ++de ) {
QStringList itembox = de.value();
QString sxbox = QString(itembox.at(0))+"='"+QString(itembox.at(1))+"'";
setupqlines.append(sxbox);
}
QString update_2 = setupqlines.join(", ");
Box_att.clear(); /* tank and by */
setupqlines.clear(); /* tank from combobox */
QString queryUpdate1 = QString( "UPDATE CLIENTE SET %1 WHERE ID=%2" ).arg( update_2 , QString::number(dbid) );
/*qDebug() << "### queryUpdate1" << queryUpdate1; */
ok2 = executeSQL(queryUpdate1);