Mysql tabellen mit QDataWidgetMapper updaten.

Alles rund um die Programmierung mit Qt
Antworten
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Mysql tabellen mit QDataWidgetMapper updaten.

Beitrag 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 */

.........................
speack português italiano deutsch english castellà qt
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QDataWidgetMapper kommunziert nur mit deinem Model und weis nichts von einer Datenbank. Somit muß der Fehler am Model liegen.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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);
.........................
speack português italiano deutsch english castellà qt
Antworten