• 14771阅读
  • 20回复

【求助】无法将系统当前时间插入mysql的datetime类型字段 [复制链接]

上一主题 下一主题
离线ggbt
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-17
执行不成功:

以下是相关功能代码:
void addNew::on_submitBtn_clicked()
{
    QDateTime time=QDateTime::currentDateTime();//获取当前时间
    QString str=time.toString("yy-mm-dd hh:mm:ss");//格式转换
    QSqlQuery query;
    query.prepare("INSERT INTO version1(time,id,name,sex,picNo,fingerNo,number)"
                       "VALUES (:time,:id,:name,:sex,:picNo,:fingerNo,:number)");
    query.bindValue(":time",str);//插入
    query.bindValue(":id", ui->idLineEdit->text());
    query.bindValue(":name", ui->nameLineEdit->text());
    query.bindValue(":sex",ui->sexLineEdit->text());
    query.bindValue(":picNo",ui->picLineEdit->text());
    query.bindValue(":fingerNo",ui->fingerLineEdit->text());
    query.bindValue(":number",ui->NoLineEdit->text());
    if(query.exec()==true)
    {

        QMessageBox::information(this,tr("Infom"),tr("操作成功"),QMessageBox::Yes);
        ui->idLineEdit->clear();
        ui->nameLineEdit->clear();
        ui->sexLineEdit->clear();
        ui->picLineEdit->clear();
        ui->fingerLineEdit->clear();
        ui->NoLineEdit->clear();
    }
    else
    {
        QMessageBox::critical(this,tr("Warnning"),tr("操作失败!请重新尝试"),QMessageBox::Yes);
        ui->idLineEdit->setFocus();
    }
}

这种情况该怎么处理呢?
[ 此帖被ggbt在2011-05-17 16:28重新编辑 ]
离线zzh

只看该作者 1楼 发表于: 2011-05-17
写个函数,看看数据库连接打开了没有?
离线ggbt
只看该作者 2楼 发表于: 2011-05-17
回 1楼(zzh) 的帖子
数据库连接一直正常。这些操作是在数据库连接成功之后才可以被调用的。
离线tianye2856
只看该作者 3楼 发表于: 2011-05-17
如果是在VS2008下的话,打开工程属性->配置属性->连接器->系统->子系统,将子系统改为控制台,等你再次编译运行程序的时候,可以看到在打开窗口程序的时候,又多了一个控制台输出。如果Qt在执行query时有错误,则会在控制台上输出错误信息,这时候你看一下就知道到底是哪里错了。
离线tianye2856
只看该作者 4楼 发表于: 2011-05-17
另外说一下,没有一下这种if语句的写法
if(query.exec()==true)
应该这么做
if(query.exec()),一般没有在里面写"==true"这种做法的。。。
离线ggbt
只看该作者 5楼 发表于: 2011-05-17
回 4楼(tianye2856) 的帖子
呃,因为query.exec()执行的返回值是bool型的,所以我就采用这种方式来表示,毕竟是VBird,很多规范性的问题也没有太在意,呵呵;以后注意,还是谢谢指教哦
ps:采用if(query.exec())的结果也一样,还是不能成功插入啊,可以的话,请帮忙看一下这个问题:
http://www.qtcn.org/bbs/read.php?tid=43174,主要是想用mysql中的now()函数,不过不清楚怎么操作呢。
离线ppdayz

只看该作者 6楼 发表于: 2011-05-17
引用第4楼tianye2856于2011-05-17 18:50发表的 :
另外说一下,没有一下这种if语句的写法
if(query.exec()==true)
应该这么做
if(query.exec()),一般没有在里面写"==true"这种做法的。。。

这2种有什么区别么?
离线ggbt
只看该作者 7楼 发表于: 2011-05-17
回 6楼(ppdayz) 的帖子
可以的话,请帮忙看一下这个问题:
http://www.qtcn.org/bbs/read.php?tid=43174,主要是想用mysql中的now()函数,不过不清楚怎么操作呢;使用本帖中的方法又行不通,很纠结。
离线ppdayz

只看该作者 8楼 发表于: 2011-05-17
你的数据库是怎么定义的?就是各个字段的类型啥的
离线ggbt
只看该作者 9楼 发表于: 2011-05-17
回 8楼(ppdayz) 的帖子
除了time字段是datetime类型的以外,其他的是varchar类型。
离线ppdayz

只看该作者 10楼 发表于: 2011-05-17
这个当然会出错了~~~time也要用varchar。。。。
query.bindValue(":time",str);

2个数据类型不匹配

要么都用varchar,要么就索性不要插入time,让数据库自己来
离线tianye2856
只看该作者 11楼 发表于: 2011-05-17
我不是让你打开控制台系统看么?请问你有看么?query为神马错了,错了的原因都会打在控制台上。。你不打开控制台看错误信息当然不知道哪里错了,光在那里猜测当然改不了Bug啊。。
离线tianye2856
只看该作者 12楼 发表于: 2011-05-17
回 6楼(ppdayz) 的帖子
细节上的区别,你看看Qt的Example是怎么用的。。
离线ppdayz

只看该作者 13楼 发表于: 2011-05-17
回 12楼(tianye2856) 的帖子
2个bool类型的比较有错么?
if(query.exec()){
}

只是简化了写法而已
离线ggbt
只看该作者 14楼 发表于: 2011-05-17
回 10楼(ppdayz) 的帖子

呃,非常感谢,把time改成varchar之后问题确实解决了,如果让数据库按照上述行为代码自行获取又该怎么实现呢?
离线ppdayz

只看该作者 15楼 发表于: 2011-05-17
http://www.sqlite.org/lang_datefunc.html
你可以看下这个帮助~
有一点要提示的

日期格式如果是yy-mm-dd形式的就使用范围查询,否则会查不全的。
例如: 2010年5月17号,应该写成2010-05-17,要是写上2010-5-17就会产生查不到的情况。

离线ppdayz

只看该作者 16楼 发表于: 2011-05-17
应该和mysql的用法差不多的
离线wxj120bw

只看该作者 17楼 发表于: 2011-05-18
说点外话 获取当前时间,可以不用qt代码,sql语句就可以实现,网上资源:NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。
离线hitler++

只看该作者 18楼 发表于: 2011-05-18
[    post]123123123123213[/post]
离线ggbt
只看该作者 19楼 发表于: 2011-05-18
回 17楼(wxj120bw) 的帖子
嗯,不错,mysql中确实内含这些函数,不过在调用其sql语句插入值的时候,对于各个字段必须一次性完成,诸如qt中query.exec执行insert语句,需要预先准备好要插入的值;而我想要实现的是通过交互界面,逐条获取LineEdit中的内容将其插入到数据库,而获取LineEdit中的对象所得的正好是字符串,本帖中的这种方法应该是可取的,至于当前时间的获取,可以通过Qt获取系统时间,之后将其转换成字符串格式,插入到类型为char的time字段也就可以了。(这些是我自己反思之后得到的看法)

不过还是谢谢参与关注和讨论哦,呵呵。
离线hero_71
只看该作者 20楼 发表于: 2012-05-28
query.prepare("INSERT INTO version1(time,id,name,sex,picNo,fingerNo,number)"
                       "VALUES (?,:id,:name,:sex,:picNo,:fingerNo,:number)");
query.addBindValue(0,QDateTime::currentDateTime());

改用?插入的方式就OK了
菩提本无树,明镜亦非台;本来无一物,何处惹尘埃。
快速回复
限100 字节
 
上一个 下一个