Office中国论坛/Access中国论坛

标题: docmd.runsql "sql"与conn.Execute "sql"的区别 [打印本页]

作者: lijiawy    时间: 2003-7-31 01:36
标题: docmd.runsql "sql"与conn.Execute "sql"的区别
有区别吗,两者好像都是运行sql语句,为什么docmd.runsql运行后插入的数据总不正确,而必须用conn.Execute才正确-.-''(因为要插入第一条记录后获得这条记录的相关信息并用这些信息插到其它表里去)
作者: 阿罗    时间: 2003-7-31 07:03
区别肯定是有的(废话)。不过我不能专业地解释。看上去runsql更像是宏,而后者是直接用ado对象的编程,应该能做更多的事情。恩。
至于为什么你的两种方法结果不一样,那要把你程序贴上来。通常是编程上忘掉了什么,例如,插入一条记录后,获得的却是老的数据。。。我常写一些程序,如果碰到你这样问题,我通常会写一些实验程序,例如设置断点察看变量值,或把取回的纪录显示出来等,看看问题到底出在什么地方。
作者: lijiawy    时间: 2003-7-31 07:11
不可能错的,我是做了一个命令按钮,在用docmd.runsql语句调试(逐语句调试并监测几个重要变量)的时候是插入数据是正确的,但是一到窗体上按这个按钮就不对了。。。而用conn.execute不管是单步调试或者直接按按钮都是正确,所以我搞不懂。。。。郁闷,谁能解释一下
作者: 阿罗    时间: 2003-7-31 07:26
你的意思是说,你输入一些数据,然后docomd.runsql插入,这一步是对的。然后,

以下是引用lijiawy在2003-7-30 23:11:00的发言:
一到窗体上按这个按钮就不对了。。。


这个时候,程序都做了些什么?
作者: lijiawy    时间: 2003-7-31 08:39
我贴部分代码吧!,定义部分就不贴了
sql="insert into test1(test1id,test1name) values(1,'aaa')
docmd.runsql sql
sql="select test1id,test1name from test1"
rst.open sql,conn,2,4
rst.movelast
iId=rst("test1id")
sql="insert into test2(test2id,test2name) values('" & iId &"','a')"
docmd.runsql sql

反正代码其它部份完全没动,只是把docmd.runsql sql改为conn.execute sql就正确,不改就会出现数据乱插入

作者: 阿罗    时间: 2003-7-31 11:20
我按照你的程序过了好几遍,一点错误都没有

Private Sub Command0_Click()
Dim sql As String
Dim rst As ADODB.Recordset
Dim iId As Integer
Set rst = New ADODB.Recordset
sql = "insert into test1(test1id,test1name) values(1,'aaa')"
DoCmd.RunSQL sql
sql = "select test1id,test1name from test1"
rst.Open sql, CurrentProject.Connection, 2, 4    ///我用的是adp
rst.MoveLast
iId = rst("test1id")
sql = "insert into test2(test2id,test2name) values('" & iId & "','a')"
DoCmd.RunSQL sql
End Sub

不过,就事论事,既然已经有了保存到第一个表中的值,就应该直接把它们用到第二个sql中。何苦再从第一个表中取回来。随便说说,勿怪。
作者: lijiawy    时间: 2003-8-1 00:04
因为第一个表的id值是自动编号,然后要把最新的一个自动编号的值写进第二个表里
不涉及循环的话都是正确的,但一有循环用docmd。runsql就出错,我怀疑是因为docmd.runsql做了太快了,但是得不到论证




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3