friend class QSqlTableModel; < selectStatement() bekommen

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

friend class QSqlTableModel; < selectStatement() bekommen

Beitrag von patrik08 »

wieso geht die methode friend class nicht...
ich moechte ja nur den selectStatement() bekommen....

sowie die feldnamen zu bekommen um row hinzuzufuegen und loeschen...


QString QSqlTableModel::selectStatement () const [virtual protected]
Returns the SQL SELECT statement used internally to populate the model. The statement includes the filter and the ORDER BY clause.


muss ich extra die class ableiten? fuer eine variable?

friend class kommt so rein....

Code: Alles auswählen

class Include_Table : public QWidget, public Ui::Include_Table
{
    friend class QSqlTableModel; 
	Q_OBJECT
	//
public:
	Include_Table( QWidget* = 0);
    void RefillTable( QString tablesql );
    QSqlTableModel *sqlmodel;
    QHeaderView *qheader;
    QSqlRelationalTableModel *sqlmodeler;

die table aufuellen sqlite3

Code: Alles auswählen

/*  in table sql name out editable QTableView (tabella_core) */
void Include_Table::RefillTable( QString tablesql )
{
        QSqlQuery query;
        int looper = 0;
        query.exec("SELECT * FROM "+tablesql); /* field name not know !*/
        QSqlRecord rec = query.record();  /* nummer col */
        int columntot = rec.count();
        while (query.next()) {
            looper++;
        }
        /*  discovery total row..... */
        QString totaltext = QString( "%1" ).arg( int2char( looper ) );
        row_total->display( totaltext );
        sqlmodel = new QSqlTableModel(this);
        sqlmodel->setTable( tablesql );
        sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange);
        sqlmodel->select();
        debugline->setText( QString( "Total cools = %1" ).arg( int2char( columntot ) ) );
        /*  PROTECTED! debugline->setText( QString(sqlmodel->selectStatement() ) ); */ 
        tabella_core->setModel(sqlmodel);
        tabella_core->setItemDelegate(new QSqlRelationalDelegate(tabella_core));
        qheader = new QHeaderView(Qt::Horizontal,this);
        qheader = tabella_core->horizontalHeader();
        connect (qheader,SIGNAL(sectionClicked(int)),this,SLOT(sortColumn(int)));
}

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du hast friend nicht richtig verstanden (Du hast es vertauscht).
Ja, du musst es wohl dann ableiten.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

danke... habe es vermutet.....

Gibt es sonst eine andere art an die feldnamen zu kommen?
ausser .... eine
SELECT sql FROM sqlite_master WHERE type!='meta' AND sql NOT NULL AND name "tabellen-namen"
und langen regular expression?

ich bekomme sqlmodel->rowCount() anzahl zeilen...
sqlmodel->columnCount() anzahl kolonnen...

+ feldname .. .dan kann ich mit einem kleinen dialog zeilen hinzufuegen... mit QSqlQuery einfach alle NULL rein....
zeile loeschen habe ich mit der vertikale (QHeaderView) gefunden wie es etwa geht....
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

neue zeilen einfuegen geht....
aber wenn kein index ist ( INTEGER PRIMARY KEY )
kann man nicht editieren... ist ja logisch....

kann vielleich isDirty vom QSqlTableModel das herausfinden...?
so kann man ein INTEGER PRIMARY KEY appenden/hinzufuegen...

einfach ein button zu AppendRow() und man kann wahlen .. wie viele zeilen einfugen...

Code: Alles auswählen

void Include_Table::AppendRow()
{
    QSqlQuery query;
    QString rowone = "NULL";
    QString line;
    int loop;
    int loopnewroow;
    bool ok = false;
    int appendrow = QInputDialog::getInteger(this, tr("New row append on table") + " "+tablename,
                                         tr("Select a nummer:"), 1, 1, 25, 1, &ok);
    if (ok) {
    for(loopnewroow=0; loopnewroow < appendrow; loopnewroow++) { 
    
                 for(loop=0; loop < summ_cools; loop++) {  
                      if (loop !=summ_cools-1) {
                        line = line+QString( "%1," ).arg( rowone ); /* construct query */
                      } else {
                       line = line+rowone;    /* construct query */
                      } 
                  }
    
    line.prepend("INSERT INTO "+tablename+" VALUES (");  /* construct query */
    line.append(")"); /* construct query */
    query.exec("BEGIN TRANSACTION");
    query.exec(line);
    query.exec("COMMIT");
    loop = 0; /* reset  */
    line = ""; /* reset  */
    }
    }
    RefillTable( tablename );  
}
void Include_Table::RefillTable( QString tablesql )
{
        tablename = tablesql; /*  save on class !*/
        QSqlQuery query;
        sqlmodel = new QSqlTableModel();
        sqlmodel->setTable( tablesql );
        sqlmodel->setEditStrategy(QSqlTableModel::OnRowChange);
        sqlmodel->select();
        tabella_core->setModel(sqlmodel);
        tabella_core->setItemDelegate(new QSqlRelationalDelegate(tabella_core));
        qheader = new QHeaderView(Qt::Horizontal,this);
        qheader = tabella_core->horizontalHeader();
        connect (qheader,SIGNAL(sectionClicked(int)),this,SLOT(sortColumn(int)));
        /*  discovery total row/cools  register on class ..... start */
        summ_rows = sqlmodel->rowCount();  /*  save on class !*/
        summ_cools = sqlmodel->columnCount(); /*  save on class !*/
        /*  discovery total row/cools ..... end  */
        debugline->setText( QString( "%1" ).arg( int2char( summ_cools ) ) );
        row_total->display( QString( "%1" ).arg( int2char( summ_rows ) ) );       
}
Antworten