Seite 1 von 1

Mysql tabellen mit QDataWidgetMapper updaten.

Verfasst: 1. März 2008 11:58
von patrik08
warum kann QDataWidgetMapper mit sqlite umgehen und mit mysql nicht?

QDataWidgetMapper ist super ... man setz die QItemDelegate
und er fuelt die daten richtig aus, jedoch mit speichern in mysql dass kann er nicht warum?


Ich kann nur das original model mit dem QDataWidgetMapper vergleichen und auf aenderungen schauen die man dann updatend....
gibt es eine andere methode mit mysql ausser die tabelle?

Code: Alles auswählen

QStringList sets;  /* mysql update SET */

       bool OnModelSave = mapper->submit();
       /* undo ist nicht mehr moeglich */
	        if (OnModelSave) {
              /*  QDataWidgetMapper  model lesen */
		const QAbstractItemModel *model_map = mapper->model();   /* vergleichen mit dem original sql model  */
						  QSqlQueryModel *modupdate = mod;
						  if (modupdate->lastError().isValid())  {
		          QMessageBox::warning(0, tr("Error SQL!"),tr("Message: %1").arg(modupdate->lastError().text()));
							return;
              } else {
									for (int e = 0; e < modupdate->rowCount(); ++e) {
										if (mapper->currentIndex() == e) {
												QSqlRecord r = modupdate->record(e);
													for (int x = 0; x < modupdate->columnCount(); ++x)  {
														QModelIndex index = model_map->index(e,x);
														const QString cellTxt = r.value(x).toString();
														const QString NewcellTxt = model_map->data(index,Qt::DisplayRole).toString();
                                 /* gibt es neue daten aus der differenz? */
														     if (cellTxt != NewcellTxt) {
																	 sets.append(QString("%1='%2'").arg(r.fieldName(x)).arg(G_Quote(NewcellTxt)));
																 }
													}
										}
                 }
							}
					} 	else {
             qDebug() << "### QDataWidgetMapper error " << OnModelSave;
					}						
          
    /* wenn sets.size() > 0  update ja */


Verfasst: 1. März 2008 12:28
von upsala
QDataWidgetMapper kommunziert nur mit deinem Model und weis nichts von einer Datenbank. Somit muß der Fehler am Model liegen.

Verfasst: 1. März 2008 13:22
von patrik08
upsala hat geschrieben:QDataWidgetMapper kommunziert nur mit deinem Model und weis nichts von einer Datenbank. Somit muß der Fehler am Model liegen.
Aber ich nehme doch einen normale QSqlQueryModel
glaube kaum das der mapper QSqlTableModel will...
und noch einen setEditStrategy ( EditStrategy strategy ) zu setzen

Code: Alles auswählen

/* db = DB_Manager from 2 connection */
mod = new QSqlQueryModel();
mod->setQuery(QString("SELECT * FROM %1").arg(TABLE_DEFINE),db->current());
mapper = new QDataWidgetMapper(this);
mapper->setModel(Fmake.get());
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
mapper->setItemDelegate(new EditMapDelegate(db,mapper));
mapper->addMapping(Tid0,0);  /* id  id */
............
mapper->setCurrentIndex(index);