请教关于VB中利用环境设计器完成记录的操作方法

novman 2000-04-22 07:43:00
我在利用环境设计器对数据库操作时,在以下例句中出现“实时错误3251”“提供者不支持应用程序所要求的操作”
代码如下:
Set datev = New DataEnvironment1
datev.cmdsyscfg '''数据库名:syscfg
If datev.rsCmdsyscfg.RecordCount > 0 Then
' Delete any records that in the table
datev.rsCmdsyscfg.MoveFirst
Do While datev.rsCmdsyscfg.EOF = False
'datev.rsCmdsyscfg.Delete adAffectCurrent
datev.rsCmdsyscfg.Delete
datev.rsCmdsyscfg.MoveNext
Loop
End If
希望能有人帮助,谢谢。
...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
novman 2000-04-24
  • 打赏
  • 举报
回复
非常感谢major2,经过他的提示,我已经解决了这个问题,谢谢!
major2 2000-04-22
  • 打赏
  • 举报
回复
我估计问题出在datev.rscmdsyscfg.movefirst上,因为数据环境中的记录集的游标类型默认是只向前滚的,即rscmdsyscfg.cursortype=adopenforwardonly的,所以不能用movefirst方法。另外,还有其他可能,我把我碰到过的有关经验写在下面供参考:
从这段语句看来,datev还没有设置连接对象,每一个数据环境下应该先是有某些连接对象,命令对象建立在连接对象中。每一个连接对象连接到一个数据库中,建立连接对象时要用到连接串,其中要写明数据提供者的类型,通俗地说就是指明你用什么样的数据引擎以及用什么“数据库驱动程序”,比如说OLE DB for SQL Server,OLE DB for ODBC等,在VB的可视化数据环境管理器中你可以通过连接生成向导来完成连接对象的建立工作。每种不同的数据提供者能支持的操作虽说大同小异,但是还是有很大区别的,比如说用ODBC提供者的话就不支持事务处理。另外,数据环境中的每一个命令对象对应的记录集有三个属性跟某些ADO操作能否支持息息相关,一个是CursorLocation,可以定义为vbUseClient或vbUseServer,如果用了客户端游标类型,有些数据库引擎自身的功能就支持不了了。一个是CursorType,它定义了游标的类型,比如说有vbOpenKeyset键值型游标,vbOpenDynamic,动态型游标,vbOpenForwardOnly,只向前滚型,还有一个怎么写我忘了,是批处理式打开的游标类型。最后一个是LockType属性,定义记录锁定类型,有一个是vbLockReadOnly,可能跟你的错误有关系。如果你用数据环境操作数据库,那么这些属性的控制就比较隐蔽,所以我建议你还是不要用数据环境了,而是直接建立ADODB的数据连接对象(ADODB.Connection),在其上直接建立自己的记录集对象(ADODB.Recordset)在建立记录集时自己按照需要设置好相关属性。还有,尽量用SQL语句来完成数据操作,不要直接连接到表,用select * from ... 来建立一个你自己的只读记录集,进行删除、修改等操作时用delete from ...和update ... set 语句跳过记录集进行操作,这样比较好。如果你用的是古董级的数据库,不支持SQL语句,那么用ODBC提供者来连接它,也可以用SQL语句进行操作,只不过不支持事务处理。象你上面的那段程序可以这样写:
dim cnMyDatabase as adodb.connection
dim strSQL as string

set cnMyDatabase=new adodb.connection
cnmydatabase.open "provider=...[连接串]"
strsql="delete from syscfg"
cnmydatabase.execute strsql
如果要读这个表,建立记录集,可以这样写
dim rssyscfg as adodb.recordset

set rssyscfg=new adodb.recordset
rssyscfg.activeconnection=cnmydatabase
rssyscfg.cursorlocation=aduseclient
rssyscfg.cursortype=adopendynamic
rssyscfg.locktype=adlockreadonly
rssyscfg.open "select * from syscfg"

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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