急VFP+MySQL更新表信息不同步

waterxcfg304 2012-03-01 04:52:11
我用VFP+MySQL开发了一个信息管理系统,两个用户同时登陆系统,A用户修改的信息B用户查询的时候不能看到A用户最新修改的信息。B只能退出系统重新登陆系统才可以看到A该后的信息。为什么啊?我以前用VFP+MS SQL SERVER2005 都是可以的啊,为什么Mysql 不行呢?
具体的连接Mysql的句柄如下:
Str_Connect = 'DRIVER=MYSQL ODBC 5.1 Driver;SERVER='+MyServer+';UID='+Uid+';PWD='+Pwd+';DATABASE='+MyDB
gnConnHandle = SQLSTRINGCONNECT(Str_Connect)

...全文
177 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterxcfg304 2012-03-02
  • 打赏
  • 举报
回复
谢谢Trainee, 您的方法正解。
十豆三 2012-03-02
  • 打赏
  • 举报
回复
你看看这个:
<VFP 客户/服务器应用程序中的事务处理>
http://blog.csdn.net/apple_8180/article/details/1229946
trainee 2012-03-02
  • 打赏
  • 举报
回复
你启用了mysql的事务, mysql的默认事务级别为repeatable read, 你可改为read committed级别
或者干脆关掉手工持久事务, 把SQLSETPROP(gnConnHandle,'Transactions',2) 这个语句去掉.
需要开启的时候, 再手动启动事务,发SQL语句star transaction,并即时commit或rollback.


waterxcfg304 2012-03-02
  • 打赏
  • 举报
回复
我现在纳闷的是为什么在MS SQL Server的数据库上是可以用上面的连接句柄获取后台表里被其他用户Update的信息而在MYSQL数据库就不可以呢,我也知道,B用户重新登陆肯定是可以看到A更新后的数据的。因为B重新登陆做了一次重新连接数据库。
waterxcfg304 2012-03-02
  • 打赏
  • 举报
回复
Str_Connect = 'DRIVER=MYSQL ODBC 5.1 Driver;SERVER='+MyServer+';UID='+Uid+';PWD='+Pwd+';DATABASE='+MyDB
gnConnHandle = SQLSTRINGCONNECT(Str_Connect)

=SQLSETPROP(gnConnHandle,'DispWarnings',.t.)
=SQLSETPROP(gnConnHandle,'Transactions',2)


我的gnConnHandle是个public 变量。在系统登陆的时候就做以上连接赋值操作。

我每次做数据库操作的时候直接用 gnConnHandle进行处理的。
十豆三 2012-03-02
  • 打赏
  • 举报
回复
开始服务器上的事务处理代码写在哪了?

另外在这段代码后加代码,查询你修改的数据,看看数据真的修改了吗?

还是 B用户 查询数据的代码是在这段代码之后运行的吗?
waterxcfg304 2012-03-02
  • 打赏
  • 举报
回复
使用了事务提交的。我尝试修改代码,需要重新获取连接句柄gnconnhandle连接才可用获取最新的信息。难道gnconnhandle是某一个时刻登陆时间的连接状态。在MS SQL SERVER 数据库是可以的啊。不明白。代码如下:连接句柄代码
Str_Connect = 'DRIVER=MYSQL ODBC 5.1 Driver;SERVER='+MyServer+';UID='+Uid+';PWD='+Pwd+';DATABASE='+MyDB
gnConnHandle = SQLSTRINGCONNECT(Str_Connect)


更新代码:
lcSql=" update copq set item=?lnItem,Equipment_Engineering=?lcEquipment,"
lcSql=lcSql+" Description=?lcDescription,Unit=?lcUnit, Impact_hours=?lnImpact_hours, lcSql=lcSql+" Failure_Cost_Type=?lcFailure_Cost_Type,Category=?lcCategory where idcopq=?thisform.idcopq"
lnSucc=SQLEXEC(gnconnhandle,lcSql)
IF lnSucc<0
MESSAGEBOX("This record has not been modified successful",16,"System Information")
=SQLROLLBACK(gnconnhandle)
RETURN
ELSE
=MESSAGEBOX("Edit Successfully",64,"System Information")
=SQLCOMMIT(gnconnhandle)
ENDIF
十豆三 2012-03-02
  • 打赏
  • 举报
回复
B用户重新读取数据应该可以看到
wwwwb 2012-03-01
  • 打赏
  • 举报
回复
使用了事务?贴代码
lc_apple 2012-03-01
  • 打赏
  • 举报
回复
因为B端没有更新数据!

既然“B只能退出系统重新登陆系统才可以看到A该后的信息。”

那就是说A的数据已经提交了,不存在A没提交

A提交了但B查询不到,但B退出后重新登陆却能看到

说明系统登陆时用的提取数据命令没问题,那只能是B的查询有问题了,也就是B没有成功从数据库中更新到实时数据,而只是登陆时提取到的旧数据!
ACMAIN_CHM 2012-03-01
  • 打赏
  • 举报
回复
你的信息是否提交了?
如果使用了事务,则只能当一个用户提交了它的修改,另一个用户连接才有可能看到这些修改。
wwwwb 2012-03-01
  • 打赏
  • 举报
回复
你的SQL语句、代码是什么

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧