Seite 1 von 1

QSqlRecord qt4 sqlite3 dump to file int erkennen.

Verfasst: 25. April 2006 13:51
von patrik08
Ich habe ein sqlite3 dump export fertig bekommen .. dank auch an dieses forum... er funktioniert doch nun im TablesDump... gibt es sowas is_numeric? bool um zahlen nicht zu quoten?..

Code: Alles auswählen

void Gui_Main::PrepareDump()
{
       QString dumpfile = "sqlinsert.sql"; /* put to file */
       QSqlQuery query;
       QString table_name;
       QString table_typ;
       QString table_sqlinsert;
       QString tablequery ="SELECT name, type, sql  FROM sqlite_master WHERE type!='meta' AND sql NOT NULL ORDER BY name";
       query.exec(tablequery);
       
       QSqlRecord rec = query.record();  /* nummer col */
       file_put_contents(dumpfile,"BEGIN TRANSACTION;\n"); /* reset file */
       while (query.next()) {
            table_name = query.value(rec.indexOf("name")).toString();
            table_typ = query.value(rec.indexOf("type")).toString();
            table_sqlinsert = query.value(rec.indexOf("sql")).toString();
            file_put_contents_append(dumpfile,table_sqlinsert+";");
            TablesDump(table_name,dumpfile);
        }
        file_put_contents_append(dumpfile,"COMMIT;"); /* last line append end \n */
}

void Gui_Main::TablesDump(QString t,QString file)
{
     QString tablequery ="SELECT * FROM "+t;
     QString line;
     QString rowone;
     QSqlQuery query;
     query.exec(tablequery);
     QSqlRecord rec = query.record();  /* nummer col */
     int numcol = rec.count();
     int loop;
          while (query.next()) {
            line="";
              for(loop=0; loop < numcol; loop++) {
                  rowone = query.value(loop).toString();
                  if (loop !=numcol-1) {
                  line = line+QString( "'%1'," ).arg( rowone );
                  } else {
                  line = line+QString( "'%1'" ).arg( rowone );   
                  }
              }
                line.prepend("INSERT INTO "+t+" VALUES (");
                line.append(");");                
            file_put_contents_append(file,line);
        }
}

Re: QSqlRecord qt4 sqlite3 dump to file int erkennen.

Verfasst: 25. April 2006 14:20
von macman
patrik08 hat geschrieben:gibt es sowas is_numeric?

Code: Alles auswählen

float QString::toFloat ( bool * ok = 0 ) const
Returns the string converted to a float value.
Returns 0.0 if the conversion fails.
If ok is not 0: if a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
Example:
    QString str1 = "1234.56";
    str1.toFloat();             // returns 1234.56

    bool ok;
    QString str2 = "R2D2";
    str2.toFloat(&ok);          // returns 0.0, sets ok to false

Verfasst: 25. April 2006 15:42
von patrik08
Die paar zeile haetten sicher auch irgendwo platz gehabt in irgend eine datei..

Code: Alles auswählen

bool is_numeric(QString incomming)
{
    incomming.replace(QString(" "), QString("")); /* trimm */
    QString str2 = incomming;
    bool ok; 
    str2.toFloat(&ok); 
return ok;
}

Verfasst: 25. April 2006 15:56
von macman
Wozu? Is_numeric macht bei PHP Sinn, da man da nicht weiß was in einer Variable drin steht, bzw. alles Mögliche drin stehen kann. Bei C++ legst Du aber vorher fest was in eine Variable kommt und dann kann da auch nichts anderes rein. Ein String ist ein String und nicht vielleicht eine Zahl.

Baust Du dir die anderen jetzt auch? is_int, is_bool etc.

Verfasst: 25. April 2006 16:35
von patrik08
sinn macht nur nummern um eben so ein dump nicht zu quoten.. oder in einem sql model um id zu finden und mit slot zu versehen ... oder user input zu pruefen ... oder datum format eingabe...... sowie im xml um digit oder string attribute zu geben.... ansonsten stimt es .... das man weiss in welchen format die daten sind .... mit kleinen ausnahmen....

was ist eigentlich http://php.net/strpos im qstring um die letzte position vom punkt zu finden? /path/.path/filen_.ame.txt fuer die extension zu bekommen? str.remove(1, 4); habe ich gefunden aber etwas wie strpos nicht...

Verfasst: 25. April 2006 16:38
von macman
QString::indexOf(".") findet den ersten Punkt
QString::lastIndexOf(".") findet den letzten
Für Dateioperationen empfehle ich aber QFileInfo. Ist einfacher und besser lesbar.

Verfasst: 26. April 2006 10:28
von patrik08
Super .... Danke...

gefunden....

Code: Alles auswählen

QFileInfo fi("/tmp/archive.tar.gz");
    QString ext = fi.completeSuffix();  // ext = "tar.gz"
nun habe ich fast alles zusammen ..