void setFromStatement(TsSqlVariant &variant, void *statement, int col) { using namespace IBPP; Statement &st = *reinterpret_cast<Statement*>(statement); switch(st->ColumnType(col)) { case sdBlob: { Blob b = BlobFactory(st->DatabasePtr(), st->TransactionPtr()); if (st->Get(col, b)) variant.setNull(); else { std::string temp; b->Load(temp); variant.setVariant(QVariant(QString::fromStdString(temp))); } break; } case sdDate: { Date d; if (st->Get(col, d)) variant.setNull(); else { int year, month, day; d.GetDate(year, month, day); variant.setVariant(QVariant(QDate(year, month, day))); } break; } case sdTime: { Time d; if (st->Get(col, d)) variant.setNull(); else { int hour, minute, second, msec; d.GetTime(hour, minute, second, msec); variant.setVariant(QVariant(QTime(hour, minute, second, msec))); } break; } case sdTimestamp: { Timestamp d; if (st->Get(col, d)) variant.setNull(); else { int year, month, day, hour, minute, second, msec; d.GetTime(hour, minute, second, msec); d.GetDate(year, month, day); variant.setVariant( QVariant(QDateTime( QDate(year, month, day), QTime(hour, minute, second, msec)))); } break; } case sdString: { std::string temp; if (st->Get(col, temp)) variant.setNull(); else variant.setVariant(QVariant(QString::fromStdString(temp))); break; } case sdSmallint: { TsSqlSmallInt temp; if (st->Get(col, temp)) variant.setNull(); else variant.setVariant(QVariant(temp)); break; } case sdInteger: { TsSqlInt temp; if (st->Get(col, temp)) variant.setNull(); else variant.setVariant(QVariant(temp)); break; } case sdLargeint: { TsSqlLargeInt temp; if (st->Get(col, temp)) variant.setNull(); else variant.setVariant(QVariant(temp)); break; } case sdFloat: { float temp; if (st->Get(col, temp)) variant.setNull(); else variant.setVariant(QVariant(temp)); break; } case sdDouble: { double temp; if (st->Get(col, temp)) variant.setNull(); else variant.setVariant(QVariant(temp)); break; } default: variant.setNull(); } }