示例#1
0
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();
   }
}