|
前段时间在开发一个Excel VBA,踩了不少坑。现在统一整理一下,供大家参考。
1、跨工作簿更新记录集(Recorset,以下用rst代替)问题。关联两个不同工作簿的工作表时,rst1的值不能更新位rst2的值,只能更新位常量,而且更新数据必须是本工作簿的工作表。
2、与1类似,同样不能使用connection.execute来更新(以下用cnn代替)。cnn也只能更新本工作簿的工作表。
3、当数据连接的data source为csv时,允许读取rst,但同样不支持1和2。
4、如需跨工作簿更新数据,唯一的方法只能时打开工作簿,粘贴记录集(copyfromrecordset)。该方法会覆盖原先数据,因此,一般建议先把源数据复制到本工作簿的备用工作表,修改完毕后再打开目标工作簿,粘贴记录集。
5、开发端可以不安装Access库,通过DAO来创建Access数据库。唯一问题是不方便看表(Access不能像SQL Server那样 show tables,只能遍历)
(我用的标准版就没有Access,Office 2016专业版的价格是1600,公司舍不得装,但有DAO库)
6、Excel能导入数据的Access,DAO不一定能打开(可能报错为不可识别的数据库格式)。因此,如需使用Access,应先在文本编辑器里写好语句,用循环执行。
7、字段使用别名时,不要省略“AS”,通常会有意想不到的报错。表名称使用别名时则不会报错。
8、使用ADO.Recordset函数返回值时,不要关闭cnn和rst。而是在执行操作时关闭。比如:
- function xx(byval strSQL as string) as ADODB.recordset
- dim cnn as adodb.connection
- dim rst as adodb.recordset
- cnn.open……
- rst.open strSQL,cnn,3,1
- set xx=rst
- end function
- sub test()
- dim rst as adodb.recordset
- set rst=xx(byval strSQL as string)
- rst.addnew
- ……
- rst.close
- end sub
复制代码 暂时先这么多吧。其它有想起来的再贴
|
|