设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: olderdream2007@
打印 上一主题 下一主题

[模块/函数] 关于VBA获取某个表信息 及 获取当前数据库信息 的问题

[复制链接]
11#
发表于 2013-1-26 16:33:52 | 只看该作者
本帖最后由 smilingkiss 于 2013-1-26 16:40 编辑


使用"$-类型"字符串函数会更快
VB官方文档似乎很鼓励使用"无$"类字符串函数,比如:Left、LTrim或者UCase,而不是实现同样功能的Left$、LTrim$和UCase$函数。但是我们必须认识到:前者返回variant类型的数值,当用于字符串表达式中时,最终必须要转换为字符串(string)类型。
由于String运算比Variant运算快,所以Left$比Left快

因此,在严格要求时间的代码段中,我们应该使用后者,它们将快5-10%。
12#
发表于 2013-1-26 18:27:49 | 只看该作者
如何获取信息呢























评分

参与人数 1经验 -5 收起 理由
roych -5 灌白开水不好,而且回复内容居然占一半屏幕.

查看全部评分

13#
发表于 2013-1-26 18:49:14 | 只看该作者
笑嘻嘻哦 发表于 2013-1-26 18:27
如何获取信息呢

你的回复怎么很像纯粹为了回复而回复的呀?
14#
 楼主| 发表于 2013-1-26 20:27:52 | 只看该作者
本帖最后由 olderdream2007@ 于 2013-1-26 20:39 编辑

谢谢各位高人的指点   收获许多知识。

不过我下面的问题还是没有解决,请知道的高人指点下
"1. 如何用VBA获取某个表所有字段的名称及 字段类型?'

另外,

”"1. 如何用VBA获取当前数据库中所有查询的名字?'“
15#
发表于 2013-1-27 12:16:15 | 只看该作者
olderdream2007@ 发表于 2013-1-26 20:27
谢谢各位高人的指点   收获许多知识。

不过我下面的问题还是没有解决,请知道的高人指点下

问题1:字段类型将显示为数值,例如数值型字段显示为4。大部分同志可能需要对照表看得懂是什么玩意儿(反正Roy是记不住哪个数值代表文本或者日期)。这里的代码包含系统表相关信息。我没有Henry那么细致去剔开它们,更没有他那么耐心去解释。
  1. Sub test()
  2. Dim tbl As DAO.TableDef
  3. Dim s As String, k As String
  4. Dim fld As DAO.Field
  5.     For Each tbl In CurrentDb.TableDefs
  6.         k = "TableName:" & tbl.Name & Chr(13)
  7.         For Each fld In tbl.Fields
  8.             s = "FieldName:" & fld.Name & "---FieldType:" & fld.Type & Chr(13) & s
  9.         Next fld
  10.         Debug.Print k & s
  11.         k = ""
  12.         s = ""
  13.     Next
  14. End Sub
复制代码
问题2:
  1. Sub test2()
  2. Dim qry As DAO.QueryDef
  3. For Each qry In CurrentDb.QueryDefs
  4.     Debug.Print qry.Name
  5. Next
  6. End Sub
复制代码
事实上,像这些代码,除了回帖之外,我应该没在其它场合上用过。
我是个规规矩矩的人,所以设置字段时,只会点击“新建”、“设计视图”之类来完成。用代码建查询这种事情也是极少的。即便需要用到临时查询,也是建立好之后,指定SQL语句而已。
用代码来建表、建查询这种事情我做不来。当然,也许某些人做得很顺溜。在这里我必须得恭喜一声:你已经超越Roych斑竹了!
16#
 楼主| 发表于 2013-1-27 12:59:20 | 只看该作者
谢谢版主指点

"Dim tbl As DAO.TableDef"   中的DAO有啥用?不懂

另外,CURRENTDB指的是当前数据库   那么CURRENTPROJECT指的是当前工程, 当前工程与当前数据库弄不太明白区别?
(从各位高人对我我帖子的回复看:表和查询可以再当前数据库里获得,窗体和报表就要到当前工程中获得------,有点晕)
17#
发表于 2013-1-27 13:08:31 | 只看该作者
olderdream2007@ 发表于 2013-1-26 12:00
谢谢高人指点  明白了

“1. 如何用VBA获取某个表所有字段的名称及 字段类型?” 这个问题是否有答案呢   ...

引用ado
  1. Private Sub Command0_Click()
  2.    Dim str As String
  3.    Dim rs As New ADODB.Recordset
  4.    Dim i As Integer
  5.    rs.Open "A", CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  6.     For i = 0 To rs.Fields.Count - 1
  7.          str = str & "字段名: " & rs.Fields(i).Name & ", 类型: " & rs.Fields(i).Type & Chr(13)
  8.     Next
  9.    MsgBox str
  10.    rs.Close
  11.    Set rs = Nothing
  12. End Sub
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
18#
发表于 2013-1-27 17:09:06 | 只看该作者
olderdream2007@ 发表于 2013-1-27 12:59
谢谢版主指点

"Dim tbl As DAO.TableDef"   中的DAO有啥用?不懂

虽然对TableDef来说,可以不加DAO,但是从科学角度上看,加上DAO比较严谨些。
举例来说,ADO里有recordset对象,DAO里也有recordset对象。假定同时引用了ADO和DAO库,而且ADO引用库排在上面(即优先第一顺位),现在你想更新一个字段的记录,用的是DAO的Edit方法,于是便写成:
rst.Fields("FieldName").Edit
但是,别忘了,ADO的Field是没有这个方法的,而系统根据顺序来判断,先认为你定义的就是ADODB.Recordset
结果当然——出错了。
19#
 楼主| 发表于 2013-1-27 22:31:41 | 只看该作者
谢谢版主的指点 原来如此  学习中----
20#
发表于 2013-2-3 11:26:31 | 只看该作者
olderdream2007@ 发表于 2013-1-26 11:52
谢谢斑竹的指点,我的第一个问题搜过论坛好像没看到。可否指点一下

另外  LFFT函数后为何要加$ 符号( ...

加不加“$”符号是ascii和unicode的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-5-5 01:50 , Processed in 0.107979 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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