请问你认识杨章伟吧?我也买了他的《VB从入门到精通》,但是书中有一些问题,我曾经给他发过邮件询问,也可能是他太忙了吧。回了几次就没信儿了,而且书中有个错误的地方我跟他说了,他却说那样是正确的,但那样程序不能正常运行,我把我给他发的信给你复制过来,您看一下,是不是他错了。如下:
这是他给我的回复(我的问题在最后边):你好,关于第一个问题,首先str=Dir(" & App.Path & "\data.xls)的写法才是正确的,我查看了该书的印刷版和电子版,书上301页代码写的都是str = Dir(" & APP.PATH &"\data.xls),你说的temp = Dir(App.Path & "\ Data.xls")写法是从哪看到的?我在印刷版和电子版中都没找到这种写法。
第二个问题,conn连接语句可以写在整个模块的开头,作为模块级变量定义。
第三个问题,两者无明显区别,可以混用。
杨章伟2009.12.15
------------------ 原始邮件 ------------------
发件人: "smartchen"<421410211@qq.com>;
发送时间: 2009年12月15日(星期二) 中午11:06
收件人: "杨章伟"<26945824@qq.com>;
主题: 转发: 三个问题
这是VB杜撰大问题,直接回复renfulin0623@163.com。
------------------ 原始邮件 ------------------
发件人: "顼宇峰"<sxyufeng@263.net>;
发送时间: 2009年12月15日(星期二) 上午10:11
收件人: "421410211"<421410211@qq.com>;
主题: Fw: 三个问题
----- Original Message -----
From: renfulin0623
To: sxyufeng
Sent: Monday, December 14, 2009 11:06 PM
Subject: 三个问题
你好,我是《VB从入门到精通》的读者,首先感谢您前两次回答的问题。不过最近我又有了三个问题需要您来帮助解决,问题如下:
第一个问题:
这是我根据《VB从入门到精通》中第301页中的例子写的:
Private Sub Command1_Click()
Dim cn As New ADODB.Connection
Dim temp, i As String
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\student.mdb;Persist Security Info =False"
i = MsgBox("确实要备份数据库吗?", vbYesNo + vbquetion, "提示")
If i = vbYes Then
temp = Dir(App.Path & "\ Data.xls")
If temp = "" Then
cn.Execute "select 学号,姓名,年龄,性别,系部 into [Excel 8.0;DataBase=" & App.Path & "\ Data.xls].sheet1 from t_user"
MsgBox "备份成功,生成Excel文件在当前目录下"
Else
MsgBox "当前路径下已存在原数据文件", vbCritical, "警告"
End If
End If
cn.Close
End Sub
这个程序可以运行通过。但用红字标出的地方书中是这么写的:str=Dir(" & App.Path & "\data.xls),我最开始按照书上写的,程序报错,我查了一下MSDN中关于Dir()的用法,就改成上面的了,程序就可以运行了。而且在第303页的例子中好像也犯了同样的错误,书上是这样写的:str=Dir(" & App.Path & "),
我在这里跟您说一下,您看看是不是书上写错了?
第二个问题:
在最后一章《图书管理系统》中,一直没讲怎样连接的数据库,只是在Module1标准模块中定义了一些公用的变量,如:Public conn As New ADODB.Connection,用conn连接数据库的语句应该写在哪?通用模块和标准模块不都只能定义一些公用的变量或过程吗?是把用conn连接数据库的语句写在每一个需要连接数据库的过程中吗?还是通过ado控件来连接?
第三个问题:
Dim rs As New ADODB.Recordset和Dim rs1 As ADODB.Recordset的区别,前者是recordset记录集对象的实例,可用于打开记录集,例如:rs.open sql,cn,1,1.后者是recordset记录集类型的变量,可用于存储记录集,例如:set rs1=conn.execute(sql),我想问的是它们两个能不能混用,具体有什么区别或是关系?
您看一下是不是他错了,如果按他说的那样根本运行不了,您遇见他的话麻烦跟他说一声。 |