StupidBeauty
Read times:465Posted at:Tue Mar 12 01:43:16 2013
- no title specified

Wt::Dbo,在对数据库对象的成员进行修改时,使用了不同的数据类型,导致事务提交失败

这是今天遇到的一个问题。

背景知识 :Wt::Dbo中大量运用了C++模板。

本座正在做的这 个项目中, 某个部分需要 对用户的“余额” 做一个扣除动作。 本座是直接按照Wt教程里的示例来写的, 不过 有个细节没注意搞好 ,导致了今天这个问题 。具体实行扣除动作的就是这一句话:

joe.modify()-> CashCredit -= RlPrcAmt; //扣除现金券。

其中 ,joe是一个 dbo :: ptr < ManagedUser > joe ,表示将要对其进行扣除余额动作的用户 RlPrcAmt是一个 int ,表示 将要扣除的余额数量 ,在运行时 是一个非0的值,这个已经通过调试确认了

M anagedUser是一个数据库对象

class ManagedUser

{

public :

enum RoleEnum

{

Admin = 1 , //!<管理员。

NormalUser = 2 //!<普通用户。

}; //enum RoleEnum

RoleEnum Role ; //!<身份。

WString name ;

string password ; //!<密码的MD5.

WString phone ;

int verified ;

int id ; //!<编号。

int proxylevel ; //!<代理商级别。

int gender ; //!<性别。

WString postaladdress ; //!<邮寄地址。

WString recommendor ; //!<推荐人。

dbo :: collection < dbo :: ptr < MoneyFlow > > PayerFlows ; //!<作为支出者的交易流集合。

dbo :: collection < dbo :: ptr < MoneyFlow > > ReceiverFlows ; //!<作为收入者的交易流集合。

float CashCredit ; //!<现金券余额。

string loginname ; //!<登录名。

注意 看其中的CashCredit成员, 它是一个 float ,表示该用户当前拥有的余额。

本座在测试过程中,发现 这一句扣除余额数量的代码所在 的事务并没有成功提交 (或者 CashCredit的值根本没改变 ,导致提交成功也没有变化 ,也没有看到 Wt::Dbo 给出 任何错误提示。

直觉猜测 CashCredit成员与RlPrcAmt变量之间的数据类型不一致引起这句自减操作失败 ,一个是 float ,一个是 int 。因为模板 这种机制 本身 就是 数据类型 做手脚 的嘛 可能编译生成 的代码中 不知道这种类型 不一致的减法运算怎么处理呢。

于是 把RlPrcAmt的类型改成 float ,与CashCredit成员保持一致,果然就正常地扣除余额数量了

并不 了解其中的根本 ,只待日后充分了解了模板再来研究吧

未知美女

安以轩

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4