事务问题

townee 2004-09-23 10:21:35
lj=cursorgetprop("ConnectHandle","bm")
sqlexec(lj,"set lock_timeout 10000")
allok=.f.
DO while allok=.f. &&当没成功时做
Requery("bm")
BEGIN TRANSACTION
SQLSetProp( lj, 'Transactions', 2 ) &&人工事务
replace 标记 with 101

IF tableupdate(.t.,.f.,"bm")

&&问题在这,我不执行下面的话,sql server照样成功,为什么?

SQLCOMMIT(lj) &&提交sql 后台
END TRANSACTION &&提交本地视图
allok=.t.

ELSE
SQLROLLBACK(lj) &&回滚远程
ROLLBACK &&回滚本地
WAIT "放弃锁,事务回滚..." wind timeout 2
ENDIF
ENDDO &&完成所有事务

****事务结束(长期医嘱与临时医嘱成为一个事务)
SQLSetProp( lj, 'Transactions', 1 )
****事务结束(长期医嘱与临时医嘱成为一个事务)


&&问题在这,我不执行下面的话,sql server照样成功,为什么?
SQLCOMMIT(lj) &&提交sql 后台
END TRANSACTION &&提交本地视图
...全文
71 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
13003517962 2004-09-23
  • 打赏
  • 举报
回复
****事务结束(长期医嘱与临时医嘱成为一个事务)
SQLSetProp( lj, 'Transactions', 1 )
****事务结束(长期医嘱与临时医嘱成为一个事务)
表示自动提交,就算不用sqlcommit
十豆三 2004-09-23
  • 打赏
  • 举报
回复
请参阅:············


指定一个活动连接的设置。

SQLSETPROP(nConnectionHandle, cSetting [, eExpression])
返回值
数值型

参数
nConnectionHandle
指定由 SQLCONNECT() 返回的、指向数据源的连接句柄。
cSetting
指定设置,下表列出了 cSetting 的值。 设置 说明
Asynchronous 指定结果集合是同步返回 (默认值为“假”(.F.)),还是异步返回(“真”(.T.))。可读写。
BatchMode 指定 SQLEXEC() 是一次返回全部结果集合 (默认值为“真”(.T.)),还是用 SQLMORERESULTS() 单个返回结果集合(“假”(.F.))。可读写。
ConnectBusy 如果共享连接繁忙,为“真”(.T.);否则为“假”(.F.)。只读。
ConnectString 注册的连接字符串。只读。
ConnectTimeOut 指定返回一个连接超时错误之前的等待时间 (以秒计算)。如果指定为 0 (默认值),将无限期等待,而不会返回超时错误。ConnectTimeOut 可以从 0 到 600。可读写。
DataSource 和 ODBC.INI 文件中相同的数据源文件名。可读写。
DispLogin 包含一个数值,决定什么时候显示“ODBC 注册”对话框。DispLogin 可以设定为下列值:1 或 DB_COMPLETE(在 FOXPRO.H 中定义)。
1 是默认值。2 或 DB_PROMPT(在 FOXPRO.H 中定义)。3 或 DB_NOPROMPT(在 FOXPRO.H 中定义)。如果指定为 1 或 DB_COMPLETE,则当需要的信息未得到时,总是显示“ODBC 注册”对话框。如果指定为 2 或 DB_PROMPT,则总是显示“ODBC 注册”对话框,允许连接前更改设置。如果指定为 3 或 DB_NOPROMPT,则不显示“ODBC 注册”对话框并且当所需要的注册内容不可用时,Visual FoxPro 产生一个错误。可读写。
DispWarnings DispWarnings 指定要显示一个错误信息 (“真”(.T.)),还是不显示一个错误信息 (“假”(.F.),默认值)。可读写。
IdleTimeout 以秒计算的空闲超时间隔。在指定的时间间隔之后,活动的连接成为不活动的,默认值是 0 (无限期等待)。可读写。
ODBChdbc 内部 ODBC 连接句柄,外部库文件 (FLL文件) 在调用 ODBC 时使用该句柄。只读。
ODBChstmt 内部 ODBC 语句句柄,外部库文件 (FLL文件) 在调用 ODBC 时使用该句柄。只读。
PacketSize 连接所用的网络包的大小,调整该值可以改善性能。默认值是 4096 字节 (4K)。可读写。
Password 连接口令。只读。
QueryTimeOut 指定在返回一般超时错误之前等待的时间 (以秒计算)。如果指定为 0,将无限期等待而不会返回超时错误。QueryTimeOut 可以是 0 到 600,默认值是 15。可读写。
Shared 指定是否基本的连接是否是共享连接 (真 (.T.)), 或不是 (假 (.F.))。
只读。

Transactions 包含一个数值,该数值决定连接如何管理远程表上的事务处理。Transactions 可以设定为下列值:1 或 DB_TRANSAUTO(在 FOXPRO.H 中定义)。
1 是默认值,自动处理远程表的事务。2 或 DB_TRANSMANUL(在 FOXPRO.H 中定义)。通过 SQLCOMMIT() 和 SQLROLLBACK() 人工处理事务。可读写。
UserId 用户标识。只读。
WaitTime 在 Visual FoxPro 检查 SQL 语句是否结束执行之前延迟的以毫秒计的时间值。默认值是 100 毫秒。可读写。

eExpression
对 cSetting 标明的设置指定值。如果省略了 eExpression 参数,则还原成设置的默认值。
备注
如果调用成功,SQLSETPROP() 返回 1;否则,如果发生连接级错误则返回 -1,发生环境级错误则返回 -2。

使用 SQLSETPROP() 在连接级上指定设置。若要在环境级指定 Visual FoxPro 默认设置,用 0 作为连接句柄。

ConnectTimeOut 选项只能在 Visual FoxPro 级上设置,而不能在连接级上使用。所有其他选项既可在连接级,也可在 Visual FoxPro 级上进行设置,每个在 Visual FoxPro 级的设置作为随后连接的默认值。

可用 SQLGETPROP() 返回指定设置的当前值

注意 ODBC 登录对话框必须禁止来支持 SQL pass through 和 Microsoft Transaction Server。使用 SQLSETPROP(cConnectionHandle, 'DispLogin', 3) 来禁止 ODBC 登录对话框。ODBC 登录对话框也可以在 连接设计器 中禁止。
示例
SQLSETPROP() 用于为当前连接设置数据包大小。

* 清除环境
CLOSE ALL
CLEAR ALL
CLEAR

* 显示选定连接或数据源对话框
* 来选择一个连接
nHandle=SQLCONNECT()

* 测试连接, 报告结果
IF nHandle > 0
* Set PacketSize
nSet=SQLSETPROP(nHandle, "PacketSize", 2048 )
* 测试设置并显示结果
IF nSet > 0
=MESSAGEBOX("PacketSize 是设置为 2048",0,"连接结果")
ELSE
=MESSAGEBOX("错误设置 PacketSize",0,"连接结果")
ENDIF
ELSE
=MESSAGEBOX("无连接",0,"连接结果")
ENDIF
=SQLDISCONNECT(nHandle)
Hewiit 2004-09-23
  • 打赏
  • 举报
回复
UP
相关推荐
发帖
VFP

2576

社区成员

VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
帖子事件
创建了帖子
2004-09-23 10:21
社区公告
暂无公告