| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3330 人关注过本帖
标题:vfp如何列出Access数据库结构
只看楼主 加入收藏
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
结帖率:87.5%
收藏
已结贴  问题点数:10 回复次数:13 
vfp如何列出Access数据库结构
请各位高手指导vfp如何列出Access数据库结构的方法
搜索更多相关主题的帖子: 数据库 如何 
2016-11-13 08:59
hujj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:42
专家分:131
注 册:2006-5-1
收藏
得分:4 
用远程视图打开access数据库后,试试看能不能将视图复制为DBF表,如果可以的话,得到其结构就简单了。
2016-11-13 19:53
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
2016-11-14 07:10
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
收藏
得分:0 
直接读取access数据库结构,有什么办法列出小数位数?请各位高手指点谢谢!
2016-11-15 21:24
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:989
专家分:4966
注 册:2013-2-16
收藏
得分:4 
我有一个例子,是读取Access表字段信息的,没有去获取小数位长度,因为他有的字段,小数位是设置的“自动”,所以,我觉得在这个问题上,不必纠结。
程序代码:
* 连接Access并尝试读取指定表的字段属性。
local rst, con, fld, i,ii
local lcMDBConc As String, bmk As String  && 连接字串,源文件名
LOCAL cTable as String
cTable="cwgs"  && 表的名字。
bmk = "D:\产销存\档案.mdb"
lcMDBConc = "Provider=Microsoft.jet.oledb.4.0;Data source="

 con = CreateObject("adodb.connection")

 rst = CreateObject("adodb.RecordSet")

 con.Open( lcMDBConc + bmk)

 rst.open ("select top 1 * from " + cTable + " where 1=1 " ,con ,1,1,1)
STORE  0 TO i,ii
        CREATE CURSOR struDBF (field_name c(200) ,Vfp_type c (1) ,field_len N (4) ,field_dig N (1),allowNull l ,fType i ,FDescript c(30))
* 字段含义:字段名称、对应的VFP类型、字段长度、小数位长度、是否允许NULL、Ado字段类型、Ado字段类型描述
        For Each fld In rst.Fields
            INSERT INTO struDBF (field_name ,field_LEN ,fType ,FDescript )  ;
            VALUES ( fld.NAME , fld.DefinedSize ,fld.TYPE ,transfieldtype(fld.TYPE) )  && Type是一个数值,
        NEXT
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "L"  WHERE STRUDBF.fType=11  && 逻辑型
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "T"  WHERE STRUDBF.fType=7
*        [color=#0000FF]UPDATE STRUDBF SET STRUDBF.Vfp_type = "D"  WHERE STRUDBF.fType=7  && D、T 都是7,T优先[/color]
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "Y"  WHERE STRUDBF.fType=6  && Y 货币型
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "N"  WHERE STRUDBF.fType=5
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "V"  WHERE STRUDBF.fType=72  && GUID
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "V"  WHERE STRUDBF.fType=203  && LongVarWChar
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "I"  WHERE STRUDBF.fType=19  && UnsignedInt
        UPDATE STRUDBF SET STRUDBF.Vfp_type = "V"  WHERE STRUDBF.fType=202 OR EMPTY(STRUDBF.Vfp_type) && 不清楚的类型,一律用V型,这样兼容性最好。
rst.Close
con.Close
MESSAGEBOX("访问Access,并尝试读取指定表的字段属性,完毕。")

至于过程 transfieldtype ,就是一个翻译ADO字段类型的英文解释的,这个就不放出来了,反正意思大家都懂。

[此贴子已经被作者于2016-11-16 16:58编辑过]

2016-11-16 16:56
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
收藏
得分:0 
谢谢您的指点,之前我看过一个例子但没有成功,请您看看他使用的方法。
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-11-16 21:08
梦幻倩影
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:162
专家分:352
注 册:2016-8-19
收藏
得分:4 
COPY TO X1 STRU EXTEND
use x1
brow
2016-11-17 10:21
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
收藏
得分:0 
    set safety off
     local oo,lcStr,lcMdbFile,i,x,lnFields,lcTableName,lnFieldtype,lcCurdir
     lcCurdir = sys(5) + curdir()
     lcNowdir = getdir()
     cd (lcNowdir)
     oo = NEWOBJECT('Access.Application')
     oo.AutomationSecurity = 1
     oo.UserControl           = .F.
     lcMdbFile = getFile('mdb')
     if not empty(lcMDBFile)
        oo.OpenCurrentDatabase(lcMDBFile)
         lnTables = oo.CurrentDb.TableDefs.Count
         for i = 5 to lnTables - 1
              lcStr = ''
              lnFields = oo.CurrentDb.TableDefs(i).fields.count
              *lcTableName = JUSTSTEM(lcMDBFile) + '_' + oo.CurrentDb.TableDefs(i).Name
              lcTableName = oo.CurrentDb.TableDefs(i).Name
              *use
              if i = 5
                   create Table blank (字段名 char(9),类型 char(10),宽度 char(2),小数位 char(4),标题 char(24),对应字段 char(20),表名 char(10))
              endif
              for x = 0 to lnFields - 1
                   append blank
                   lnFieldType = oo.CurrentDb.TableDefs(i).Fields(x).type
                   do case
                   case lnFieldType  = 10
                       lcType = '字符型'
                   case lnFieldType  = 5
                       lcType = '货币型'
                   case lnFieldType  = 8
                       lcType = '日期时间型'
                   case lnFieldType  = 3
                       lcType = '整型'
                   case lnFieldType  = 6
                       lcType = '单精度型'
                   otherwise
                       lcType = ltrim(str(oo.CurrentDb.TableDefs(i).Fields(x).type))
                   endcase
                   replace 字段名 with oo.CurrentDb.TableDefs(i).Fields(x).name
                   replace 类型   with lcType
                   replace 宽度   with ltrim(str(oo.CurrentDb.TableDefs(i).Fields(x).size))
                   if inlist(lnFieldType,3,5,6)
                       lnValue = oo.Currentdb.TableDefs(i).Fields(x).Properties('DecimalPlaces').Value
                       replace 小数位 with icase(lnValue = 255,'自动',alltrim(str(lnValue)))
                   endif
                   replace 标题 with oo.CurrentDb.TableDefs(i).Fields(x).Properties('caption').value
                   replace 表名 with lcTableName
              endfor
         endfor
     endif
     oo.CloseCurrentDatabase()
     oo = null
     cd (lcCurdir)
Properties提示这个函数无效,不知道是怎么回事?请同仁指点。
 
2016-11-17 20:31
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:989
专家分:4966
注 册:2013-2-16
收藏
得分:0 
Properties 不是函数,而是一个集合,这个集合里,没有Caption这个成员,自然会报错,解决办法:
把这句去掉:
replace 标题 with oo.CurrentDb.TableDefs(i).Fields(x).Properties('caption').value
如果一定要保留,那么改成:
replace 标题 with oo.CurrentDb.TableDefs(i).Fields(x).Properties('Name').value
其实你前面已经获取了字段名,这句完全是多余的。
2016-11-18 11:43
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
收藏
得分:0 
那lnValue = oo.Currentdb.TableDefs(i).Fields(x).Properties('DecimalPlaces').Value这个可以吗?
2016-11-18 11:47
快速回复:vfp如何列出Access数据库结构
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048808 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved