设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 9986|回复: 23
打印 上一主题 下一主题

[表] 怎样快速将所有表的记录(英文字母)全部转换为大写!

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-2 18:33:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50金钱
怎样快速将所有表的记录(英文字母)全部转换为大写!
呵呵,求助最快最捷径的方法!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-3-2 19:18:23 | 只看该作者
好大的金子
回复

使用道具 举报

3#
发表于 2009-3-2 19:34:27 | 只看该作者
有没有中英数子混合的情况
回复

使用道具 举报

4#
发表于 2009-3-2 19:51:59 | 只看该作者
本帖最后由 todaynew 于 2009-3-2 19:53 编辑

不知道这算不算最快捷的:
1、建立更新查询

UPDATE 表1 SET 表1.f1 = UCase([f1]), 表1.f2 = UCase([f2]), 表1.f3 = UCase([f2]);
2、运行更新查询

本帖子中包含更多资源

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

x
回复

使用道具 举报

5#
发表于 2009-3-2 19:56:38 | 只看该作者
好诱人噢~~
本人思路:
写一个程序连接第一个表(一个一个来),
读出这个表中字段个数
判断是否是字符串类型
如果是则再判断字符串长度
如果长度>0
读出数据,转成大写再写回
..........
我是个菜鸟,不知道能否实现
不知道有简单的小写转大写的函数,如果没有,只能一个一个字母读出判断再来转了
也不知道能否回写>.<
刚刚上路不要丢鸡蛋
回复

使用道具 举报

6#
发表于 2009-3-2 20:07:15 | 只看该作者
所有表的记录(英文字母)全部转换为大写

有些复杂。
常规的做法。通过访问
SELECT Name
FROM MSysObjects
WHERE Type=1 and name not like 'MSys%'
得到所有表名。 或者通过 currentdb.TableDefs , CurrentData.AllTables 等得到所有表名。

然后打开表,得到所有字段名及字段属性。比如用adodb.recordset.fields得到字段名field.name及字段类型field.Type(type=129 char, 200 varchar, 202 VarWChar, 130 WChar), 也可以用DAO的currentdb.TableDefs().Fields().name/type

然后生成update 语句如todaynew所用的 update tableName set fldName=ucase(fldName)

速度上要快一点的话, 可以对每个表生成一个SQL update tableName set fld1=ucase(fld1), fld2=ucase(fld2) ..

可以事先把所有表的索引删除,更新完后再重建以提高速度。
删除所有外键关系,主键,更新完后再重建。



******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
回复

使用道具 举报

7#
发表于 2009-3-2 20:25:55 | 只看该作者
  1. Public Sub UCaseAllRecord()
  2.     Dim strTblName() As String
  3.     Dim rs As New ADODB.Recordset
  4.     Dim i As Long, j As Long
  5.     Dim k As Integer
  6.     Dim db As Database
  7.     Dim tbl As DAO.TableDef
  8.     Dim strName As String
  9.     Set db = CurrentDb
  10.     For Each tbl In db.TableDefs
  11.         If Left(tbl.Name, 4) <> "msys" Then
  12.             strName = strName & tbl.Name & ","
  13.         End If
  14.     Next
  15.     strTblName = Split(strName, ",")
  16.     For i = 0 To UBound(strTblName) - 1
  17.         rs.Open strTblName(i), CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  18.         For j = 1 To rs.RecordCount
  19.             For k = 0 To rs.Fields.Count - 1
  20.                 If Not IsNull(rs.Fields(k)) Then
  21.                     rs.Fields(k) = UCase(rs.Fields(k))
  22.                 End If
  23.             Next
  24.             rs.UpdateBatch
  25.             rs.MoveNext
  26.         Next
  27.         rs.Close
  28.     Next
  29.     Set rs = Nothing
  30. End Sub
复制代码
回复

使用道具 举报

8#
发表于 2009-3-2 20:37:22 | 只看该作者
Public Sub UCaseAllRecord()
    Dim strTblName() As String
    Dim rs As New ADODB.Recordset
    Dim i As Long, j As Long
    Dim k As Integer
    Dim db As Database
    Dim tbl As DAO.TableDef
...
Henry D. Sy 发表于 2009-3-2 20:25


假设只有三两张表,此法就啰嗦了,呵呵。
回复

使用道具 举报

点击这里给我发消息

9#
发表于 2009-3-2 20:48:33 | 只看该作者
ACC里有UPPER这个函数么?
回复

使用道具 举报

10#
发表于 2009-3-2 20:53:17 | 只看该作者
ACC里有UPPER这个函数么?
pureshadow 发表于 2009-3-2 20:48
视乎没有
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-15 22:23 , Processed in 0.108167 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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