@@ -386,8 +386,8 @@ bool DBBrowserDB::deleteRecord( int wrow)
386386 if (!isOpen ()) return false ;
387387 bool ok = false ;
388388 rowList tab = browseRecs;
389- QStringList& rt = tab[wrow];
390- QString& rowid = rt[0 ];
389+ QList<QByteArray> rt = tab[wrow];
390+ QString rowid = rt[0 ];
391391 lastErrorMessage = QString (" no error" );
392392
393393 QString statement = QString (" DELETE FROM `%1` WHERE rowid=%2;" ).arg (curBrowseTableName).arg (rowid);
@@ -406,45 +406,52 @@ bool DBBrowserDB::deleteRecord( int wrow)
406406 return ok;
407407}
408408
409- bool DBBrowserDB::updateRecord (int wrow, int wcol, const QString & wtext)
409+ bool DBBrowserDB::updateRecord (int wrow, int wcol, const QByteArray & wtext)
410410{
411- char * errmsg;
412411 if (!hasValidBrowseSet) return false ;
413412 if (!isOpen ()) return false ;
414- bool ok = false ;
415413
416414 lastErrorMessage = QString (" no error" );
417415
418- QStringList & rt = browseRecs[wrow];
419- QString& rowid = rt[0 ];
420- QString & cv = rt[wcol+1 ];// must account for rowid
416+ QList<QByteArray> & rt = browseRecs[wrow];
417+ QString rowid = rt[0 ];
418+ QByteArray & cv = rt[wcol+1 ];// must account for rowid
421419 QString ct = browseFields.at (wcol);
422420
423- QString statement = QString (" UPDATE `%1` SET `%2`=" ).arg (curBrowseTableName).arg (ct);
421+ QString sql = QString (" UPDATE `%1` SET `%2`=? WHERE rowid=%4; " ).arg (curBrowseTableName).arg (ct). arg (rowid );
424422
425- char * formSQL = sqlite3_mprintf (" %Q" , wtext.toUtf8 ().constData ());
426- statement.append (formSQL);
427- if (formSQL) sqlite3_free (formSQL);
428-
429- statement.append (" WHERE rowid=" );
430- statement.append (rowid);
431- statement.append (" ;" );
423+ logSQL (sql, kLogMsg_App );
424+ setRestorePoint ();
432425
433- if (_db){
434- logSQL (statement, kLogMsg_App );
435- setRestorePoint ();
436- if (SQLITE_OK==sqlite3_exec (_db,statement.toUtf8 (),
437- NULL ,NULL ,&errmsg)){
438- ok=true ;
439- /* update local copy*/
440- cv = wtext;
441- } else {
442- lastErrorMessage = QString::fromUtf8 (errmsg);
443- qCritical () << " update Record: " << lastErrorMessage;
444- }
426+ sqlite3_stmt* stmt;
427+ if (sqlite3_prepare (_db, sql.toUtf8 (), -1 , &stmt, 0 ) != SQLITE_OK)
428+ {
429+ lastErrorMessage = sqlite3_errmsg (_db);
430+ qCritical () << " updateRecord: " << lastErrorMessage;
431+ return false ;
432+ }
433+ if (sqlite3_bind_blob (stmt, 1 , wtext.constData (), wtext.length (), SQLITE_STATIC) != SQLITE_OK)
434+ {
435+ lastErrorMessage = sqlite3_errmsg (_db);
436+ qCritical () << " updateRecord: " << lastErrorMessage;
437+ return false ;
438+ }
439+ if (sqlite3_step (stmt) != SQLITE_DONE)
440+ {
441+ lastErrorMessage = sqlite3_errmsg (_db);
442+ qCritical () << " updateRecord: " << lastErrorMessage;
443+ return false ;
444+ }
445+ if (sqlite3_finalize (stmt) != SQLITE_OK)
446+ {
447+ lastErrorMessage = sqlite3_errmsg (_db);
448+ qCritical () << " updateRecord: " << lastErrorMessage;
449+ return false ;
445450 }
446451
447- return ok;
452+ cv = wtext;
453+
454+ return true ;
448455}
449456
450457bool DBBrowserDB::browseTable ( const QString & tablename, const QString& orderby )
@@ -664,44 +671,43 @@ bool DBBrowserDB::renameTable(const QString& from_table, const QString& to_table
664671
665672void DBBrowserDB::getTableRecords ( const QString & tablename, const QString& orderby )
666673{
667- sqlite3_stmt *vm;
668- const char *tail;
674+ sqlite3_stmt* stmt;
669675
670676 int ncol;
671- QStringList r;
672- // char *errmsg;
673- int err=0 ;
674- // int tabnum = 0;
677+ QList<QByteArray> r;
675678 browseRecs.clear ();
676679 idmap.clear ();
677680 lastErrorMessage = QObject::tr (" no error" );
678681
679- QString statement = QString (" SELECT rowid, * FROM `%1` ORDER BY %2;" ).arg (tablename).arg (orderby);
680- logSQL (statement , kLogMsg_App );
681- QByteArray utf8Statement = statement .toUtf8 ();
682- err= sqlite3_prepare (_db,utf8Statement,utf8Statement. length (),
683- &vm, &tail );
684- if (err == SQLITE_OK){
685- int rownum = 0 ;
682+ QString sql = QString (" SELECT rowid, * FROM `%1` ORDER BY %2;" ).arg (tablename).arg (orderby);
683+ logSQL (sql , kLogMsg_App );
684+ if ( sqlite3_prepare (_db, sql .toUtf8 (), - 1 , &stmt, 0 ) != SQLITE_OK)
685+ {
686+ lastErrorMessage = QObject::tr ( " could not get fields " );
687+ return ;
688+ }
686689
687- while ( sqlite3_step (vm) == SQLITE_ROW ){
688- r.clear ();
689- ncol = sqlite3_data_count (vm);
690- for (int e=0 ; e<ncol; ++e){
691- QString rv = QString::fromUtf8 ((const char *)sqlite3_column_text (vm,e));
692- r << rv;
693- if (e==0 ){
694- idmap.insert (rv.toInt (),rownum);
695- rownum++;
696- }
690+ int rownum = 0 ;
691+
692+ while (sqlite3_step (stmt) == SQLITE_ROW)
693+ {
694+ r.clear ();
695+ ncol = sqlite3_data_count (stmt);
696+ for (int e=0 ;e<ncol;++e)
697+ {
698+ QByteArray rv = QByteArray (static_cast <const char *>(sqlite3_column_blob (stmt, e)), sqlite3_column_bytes (stmt, e));
699+ r.append (rv);
700+
701+ if (e == 0 )
702+ {
703+ idmap.insert (rv.toInt (), rownum);
704+ rownum++;
697705 }
698- browseRecs.append (r);
699706 }
700-
701- sqlite3_finalize (vm);
702- }else {
703- lastErrorMessage = QObject::tr (" could not get fields" );
707+ browseRecs.append (r);
704708 }
709+
710+ sqlite3_finalize (stmt);
705711}
706712
707713resultMap DBBrowserDB::getFindResults ( const QString & wstatement)
0 commit comments