Seite 1 von 1

friend class QSqlTableModel; < selectStatement() bekommen

Verfasst: 3. Mai 2006 13:28
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)));
}


Verfasst: 3. Mai 2006 14:54
von Christian81
Du hast friend nicht richtig verstanden (Du hast es vertauscht).
Ja, du musst es wohl dann ableiten.

Verfasst: 3. Mai 2006 15:22
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....

Verfasst: 3. Mai 2006 18:45
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 ) ) );       
}