ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2985|回复: 16

[求助] 请教关于EXCEL操作ACCESS的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-9-8 16:04 | 显示全部楼层 |阅读模式
1.请教代码:将数据库中,表:"成品编码规则"的字段名为“桥架数字码3”中的最大、最小值填在基 A1和A2单元格中
2.窗体数据录入到数据库中,提示"类型不匹配",请教如何更整代码?
3.请教代码:动态数据库的字段名数据录入的代码,比如:我要将单元格"B1"中的值作为数据库的字段名,如这样写不对.Fields(Trim(rst.Fields(Sheets("Sheet2").Cells(1, 2)).Name)).Value = 0

新建文件夹.rar

107.03 KB, 下载次数: 37

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-8 17:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-9-8 19:41 | 显示全部楼层
1、最值可以通过DMax和DMin(或者Max和Min)来处理,前者为域聚合函数,后者为SQL聚合函数。前者更加灵活(可以设置固定条件)。
2、把DAO库移动到ADO库上面就好了。——原因在于定义出现歧义。最标准的做法是:
Dim rst As DAO.RecordSet
Dim Fld As DAO.Field
——事实上,如果引用了DAO库,通常是可以不必再引用ADO库的了,因为大部分ADO的属性、方法是和DAO相通的,甚至DAO还有部分ADO所没有的东西(例如FindFirst方法)。
3、应该没那么复杂:rst.Fields(Sheets("Sheet2").Cells(1, 2)).Value = 0。实际上,如果在数据库里设置默认值为0,日期设置默认值为Date()等等,可以省却很多写代码的功夫。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-9 09:32 | 显示全部楼层
roych 发表于 2011-9-8 19:41
1、最值可以通过DMax和DMin(或者Max和Min)来处理,前者为域聚合函数,后者为SQL聚合函数。前者更加灵活( ...

感谢3楼 "roych " 的帮助,问题2和问题3已解决.问题1:代码Sheet2.Cells(1, 1).Value = DMax(rst.Fields("桥架规格数字码2").Value)这样写不行,还请前辈指教一下代码该怎么写.

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-9 11:57 | 显示全部楼层
请教代码如何写:比如在数据库中,表:"成品编码规则"的字段名为“字母码”中的值是"A至J"的字母.我要将该字段中下一个字母(也就是"K")填到单元格"A1"中,依此顺序类推

TA的精华主题

TA的得分主题

发表于 2011-9-9 19:03 | 显示全部楼层
这样写当然不行了:
Sheet2.Cells(1, 1).Value = DMax(rst.Fields("桥架规格数字码2").Value)
域函数是在Access里用的,而且,域函数有三个参数:字段名、表名、条件。由于你的实例过于复杂,也就不好更改或怎么着了。以下代码供参考:
  1. Sub ShowMaxMin()
  2. '定义数据库和记录集
  3. Dim db As DAO.Database
  4. Dim rst As DAO.Recordset
  5. '打开数据库和记录集
  6. Set db = DAO.OpenDatabase(ThisWorkbook.Path & "\db3.mdb")
  7. '注意记录集的排序
  8. Set rst = db.OpenRecordset("select * from 成品编码规则 where not isnull(桥架数字码3) order by 桥架数字码3")
  9. '第一条为小值
  10. '最后一条为最大值
  11. rst.MoveFirst
  12. strMin = rst("桥架数字码3")
  13. rst.MoveLast
  14. strMax = rst("桥架数字码3")
  15. Sheet2.[a1] = strMax
  16. Sheet2.[a2] = strMin
  17. End Sub
复制代码
需要注意的是,在数据格式必须保持一致,例如作为文本的,不应出现数字,否则排序会出错,导致函数出现问题。
在打开数据库的前提下,其实是可以用DMax和DMin的。不过,在Excel里运行的话,要创建一个Access组件,挺麻烦的,所以就只是在记录集下进行了粗略处理。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-10 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
roych 发表于 2011-9-9 19:03
这样写当然不行了:
Sheet2.Cells(1, 1).Value = DMax(rst.Fields("桥架规格数字码2").Value)
域函数是在 ...

非常感谢"roych "的帮助,这个问题已困扰我多日,现在终于解决了。
还有一个问题能否帮我解决一下:比如在数据库中,表:"成品编码规则"的字段名为“桥架字母码3”中的值是"C、P、T、B、F"的字母.我要将该字段中最大字母的下一个字母(也就是"T"的下一个字母“U”)填到单元格"A1"中,要时现代码该如何写。在此不胜感激!

TA的精华主题

TA的得分主题

发表于 2011-9-10 12:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 roych 于 2011-9-10 13:01 编辑

稍为麻烦些,要转ASC码,再转Chr才能处理。此外,该字段里还存在数字,——原则上这是不应该出现的,否则条件写起来很麻烦。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-10 12:54 | 显示全部楼层
roych 发表于 2011-9-10 12:34
稍为麻烦些,要转ASC码,再转Chr才能处理。

roych 兄,还请麻烦你把具体的代码写给我好吗?急等着用,谢谢!

TA的精华主题

TA的得分主题

发表于 2011-9-10 13:18 | 显示全部楼层
本帖最后由 roych 于 2011-9-10 13:19 编辑
  1. Sub ShowMaxMin()
  2. '定义数据库和记录集
  3. Dim db As DAO.Database
  4. Dim rst As DAO.Recordset
  5. '打开数据库和记录集
  6. Set db = DAO.OpenDatabase(ThisWorkbook.Path & "\db3.mdb")
  7. '注意记录集的排序(这里剔除了数字型文本)。
  8. Set rst = db.OpenRecordset("select 桥架字母码3 from 成品编码规则 where 桥架字母码3>='A' order by 桥架字母码3")
  9. '先判断最大值
  10. rst.MoveLast
  11. If rst(0).Value < "z" Then
  12. '转换为ASC码,并增加1后再用chr函数转为字母。
  13. '为了统一格式,这里用了Ucase转换为大写字母。
  14. Sheet2.[a1] = UCase(Chr(Asc(rst(0).Value) + 1))
  15. Else
  16. Sheet2.[a1] = rst(0).Value
  17. End If
  18. '第一条为最小值。
  19. rst.MoveFirst
  20. Sheet2.[a2] = rst(0).Value
  21. '关闭记录集并释放内存。
  22. rst.Close
  23. Set rst = Nothing
  24. End Sub
复制代码
我这里测试没多大问题,不过你最后根据实际做进一步的测试。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 08:04 , Processed in 0.024270 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表