Как сохранить QTime в таблице SQL Server Express и прочитать его обратно? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть таблица в SQL Server Express с полями name varchar(10) и timeVar time, и я хочу сохранить значение переменной QTime в поле time.

Это то, что япробовал:

QTime time = QTime::currentTime();
QString timeString = time.toString("hh:mm:ss");
QString query = QString("insert into timeHold(name,timeVar) values ('ABC','%2')").arg(timeString);

qry->prepare(query);
qry->exec();

Однако я получаю QSqlQuery::value: not positioned on a valid record.

Когда я вставляю значения в таблицу из SQL Server Management Studio, insert into timeHold values('XYZ', '12:17:35') работает отлично.К моему удивлению, когда я попытался прочитать значения, хранящиеся в таблице, из студии управления, мне удалось получить поле имени, но не поле времени.

Вот код, который я использую для чтения значенийиз таблицы:

QString query = QString("select * from timeHold");

qry->prepare(query);
qry->exec();
qry->first();

int noOfRecords = qry->numRowsAffected();

do {
    qDebug() << qry->value(0).toString();
    qDebug() << qry->value(1).toString();
} while (qry->next());

Код выдает следующий вывод:

"ABC"
"\u0017"
"world"
"\u000B"
"Mama"
"\u000B"
"Gerama"
"\u000B"

Как я могу заставить его работать?

1 Ответ

0 голосов
/ 12 сентября 2018

Для истории сохранения я бы сказал, что метод arg не работает, потому что вы запрашиваете% 2, но есть только один элемент для замены

   query = QString("insert into timeHold(name,timeVar) values ('ABC','%2')").arg(timeString);

Я думаю, что это должно быть

query =  QString("insert into timeHold(name,timeVar) values ('ABC','%1')").arg(timeString);

Для извлечения из БД это либо потому, что вы должны указать формат при вставке или при чтении

...