Office中国论坛/Access中国论坛

标题: [已解决]如何自动设置适当的字段长度 [打印本页]

作者: fang123    时间: 2008-3-25 21:43
标题: [已解决]如何自动设置适当的字段长度
如何自动设置适当的字段长度?即当导入一个txt文件后,很多字符型的字段长度都是255,如何设置系统自动调整字段到适当的长度,如字段中最大的记录长度为40<去掉前后空白>,即设成长度40.谢谢!

[ 本帖最后由 fang123 于 2008-3-29 04:50 编辑 ]
作者: huangxiuwen    时间: 2008-3-25 23:57
关注..................................
作者: fang123    时间: 2008-3-26 09:24
再次请求..谢谢!
作者: fang123    时间: 2008-3-27 09:28
再次请求..谢谢!
作者: huangqinyong    时间: 2008-3-27 12:31
原帖由 fang123 于 2008-3-25 21:43 发表
如何自动设置适当的字段长度?即当导入一个txt文件后,很多字符型的字段长度都是255,如何设置系统自动调整字段到适当的长度,如字段中最大的记录长度为40,即设成长度40.谢谢!

你可以事先在表里设置字段的属性为备注。
作者: fang123    时间: 2008-3-27 13:16
谢谢!已上传附件.
q

[ 本帖最后由 fang123 于 2008-3-27 13:19 编辑 ]
作者: fang123    时间: 2008-3-27 13:18
我建一新的表,在没有设置字段长度,就导入TXT,这时就想有没有什么工具或是程序可以自动设置适当的字段长度,这样可以减小文件的大小,谢谢
作者: eyewitnes    时间: 2008-3-27 14:39
据我所知,没有
作者: fang123    时间: 2008-3-27 14:44
每次从Txt/xls等导入时都要计算一下字段最大有多长,再设置长度,很麻烦,要是能够在Access中设置公式或是VBA<或是其他外部的插件或是其他软件,>能够自动设置最合理的字段长度,就不用每次都操作那那多次..谢谢大家!
作者: huangqinyong    时间: 2008-3-27 14:51
txt 的文件我没导过,但EXCLE的文件,我导入前,先在数据库内建一个表,对哪些字段大于255的,我是把它设置成备注型的。
作者: fang123    时间: 2008-3-27 15:13
那对于那些小于255的如何设置到最合理的长度?
作者: huangqinyong    时间: 2008-3-27 15:57
原帖由 fang123 于 2008-3-27 15:13 发表
那对于那些小于255的如何设置到最合理的长度?

保险起见,建议设置成255
作者: fang123    时间: 2008-3-27 16:42
但这样的话,要是转成DBF格式的话,容量就会变得很大..这是一个困扰我很多年的问题...郁闷中...谢谢!
作者: huangqinyong    时间: 2008-3-27 17:00
你别讲一半留一半,这个问题解决了或解决了一部分,又冒出另一个问题,这样谁吃得消???有问题一步到位,说清楚。
作者: fang123    时间: 2008-3-28 07:42
谢谢huangqinyong的提醒.记住了.
作者: kangking    时间: 2008-3-28 13:45
讲点我的想法:先将数据导入,导入新表也好,导入旧表也好(说错了,旧表应该设置了字段宽度的).
导入后用dmax("len(trim(字段名称))", "表名称")计算字段值的长度,其中的字段名称你可以设置一个变量,用以循环所有字段,将结果保存在一个数组中.
再用SQL语句修改表的结构,OK!
作者: fang123    时间: 2008-3-28 17:17
谢谢kangking,提一个太过份的请求:能不能帮我用一个实例演示一下,非常谢谢!
作者: kangking    时间: 2008-3-28 21:03
原帖由 fang123 于 2008-3-28 17:17 发表
谢谢kangking,提一个太过份的请求:能不能帮我用一个实例演示一下,非常谢谢!


Public Sub fitSize()
Dim a()
Dim i As Integer
Dim j As Integer
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Set rs = db.OpenRecordset("w1")
j = rs.Fields.Count
ReDim a(j, 2)
For i = 0 To j - 1
    a(i, 1) = rs.Fields(i).Name
    a(i, 2) = DMax("len(trim(" & rs.Fields(i).Name & "))", "w1")
Next
rs.Close
Set rs = Nothing
For i = 1 To j - 1
    db.Execute "alter table w1 alter column " & a(i, 1) & " char(" & a(i, 2) & ")"
Next

End Sub
作者: fang123    时间: 2008-3-28 22:29
再次谢谢kangking的帮助,又快又准.要浪费您宝贵的时间真的很抱歉,终于解决了心头中的困惑.向您学习了!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3