一、MDBDIFF 最后问题来了,http://www.shengfang.org版本升级后,在编写文档或者原用户数据库升级时需要详细的数据库升级前后的差异比较时,我就只好一个表单一个表单进行比较了,当表单比较多时,头晕眼花,非常容易导致遗漏。 实在受不了手工比较,http://www.shengfang.org经过一阵搜索,终于找到了MDBDIFF软件,解决了我这个大问题。 它可以比较两个MDB数据库结构,http://www.shengfang.org表、字段、索引、关联、查询等差异都可以列举出来。从主文件后缀名来看,它是用ACCESS打开的MDE 文件,应该是使用ACCESS的VBA编制后进行编译的。 双击运行后,出现向导界面引导操作,http://www.shengfang.org分别选择需要比较的两个数据库文件;是否密码输入;选择比较的项目,最后选择屏幕显示(以表格显示)、打印以及另存为文件就可以了。非常方便。 这是一个自由文件,可以从其网站下载 (这里分ACCESS97和ACCESS2000两个版本) 国内可以从这里下载 http://www.shengfang.org (这里是ACCESS2000版本) 二、数据库结构打印 的确让我心动,http://www.shengfang.org然而下载下来一使用,发现两点不好,一个是这软件需要注册,未注册的版本具有 30 天的使用时间限制;另外一个不支持带密码保护的数据库。实在不方便。于是就想干脆自己做一个好了。 以前使用DAO时,http://www.shengfang.org可以通过Database对象、TableDefs集合获得各个表的定义(TableDef对象)。再通过TableDef.Fields集合获得表的各个字段,由Field对象的属性获得字段名、字段类型等信息。 但是使用ADO就没有上述对象、集合了,http://www.shengfang.org应该使用ADOX进行编程,基本过程如下: 1、 升级VB到SP5 2、 添加引用:“Microsoft ADO Ext. for DDL and Security.” 3、 新建一个窗口,添加一个按钮 4、 在按钮点击事件中添加如下代码: Dim cat As New ADOX.Cataloghttp://www.shengfang.org cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;_ ‘连接数据库http://www.shengfang.org Dim i As Integer Dim j As Integer For i = 0 To cat.Tables.Count – 1 ‘循环所有表单 Debug.Print "http://www.shengfang.org表单名称:" + cat.Tables(i).Name For j = 0 To cat.Tables(i).Columns.Count – 1 ‘循环表单所有字段 Debug.Print "字段名称:http://www.shengfang.org" + cat.Tables(i).Columns(j).Name Debug.Print "字段类型:http://www.shengfang.org" + GetDataTypeEnum(cat.Tables(i).Columns(j).Type) Debug.Print "字段大小:http://www.shengfang.org"; Format(cat.Tables(i).Columns(j).DefinedSize) Next Next Set cat=Nothing 其实,ADOX提供了类似DAO TableDefs集合的 TABLES、Columns等集合,经过循环,就能方便的获得各个表单名称以及表单字段的定义和http://www.shengfang.org大小。大家可以自行进行完善,例如写入文件、获得默认值、索引等 上面代码用到了一个函数GetDataTypeEnum,因为cat.Tables(i).Columns(j).Type返回的都是数字,不是很直观,所以用这函数将其转化为VB的http://www.shengfang.org常量定义。 mk: at MSITStore:H:\msdn\MSDN\kb dot chm::/Source/adobj/q181199.htm Function GetDataTypeEnum(lngDataTypeEnum As Long) As String 'Given ADO data-type constant, returns readable constant name. Dim strReturn As Stringhttp://www.shengfang.org Select Case lngDataTypeEnum Case 0: strReturn = "adEmpty" Case 16: strReturn = "adTinyInt"http://www.shengfang.org Case 2: strReturn http://www.shengfang.org= "adSmallInt" Case 3: strReturn = "adInteger" Case 20: strReturn = "adBigInt" Case 17: strReturn = "adUnsignedTinyInt" Case 18: strReturn http://www.shengfang.org= "adUnsignedSmallInt" Case 19: strReturn http://www.shengfang.org= "adUnsignedInt" Case 21: strReturn = "adUnsignedBigInt" Case 4: strReturn = "adSingle" Case 5: strReturn = "adDouble" Case 6: strReturn = "adCurrency" Case 14: strReturn http://www.shengfang.org= "adDecimal" Case 131: strReturn = "adNumeric" Case 11: strReturn = "adBoolean" Case 10: strReturn = "adError" Case 132: strReturn http://www.shengfang.org= "adUserDefined" Case 12: strReturn = "adVariant" Case 9: strReturn = "adIDispatch" Case 13: strReturn = "adIUnknown" Case 72: strReturn = "adGUID" Case 7: strReturn http://www.shengfang.org= "adDate" Case 133: strReturn = "adDBDate" Case 134: strReturn = "adDBTime" Case 135: strReturn = "adDBTimeStamp" Case 8: strReturn = "adBSTR" Case 129: strReturn http://www.shengfang.org= "adChar" Case 200: strReturn = "adVarChar" Case 201: strReturn = "adLongVarChar" Case 130: strReturn = "adWChar" Case 202: strReturn = "adVarWChar" Case 203: strReturn http://www.shengfang.org= "adLongVarWChar" Case 128: strReturn = "adBinary" Case 204: strReturn = "adVarBinary" Case 205: strReturn = "adLongVarBinary" Case Else: strReturn = http://www.shengfang.org"Unknown DataTypeEnum of " & lngDataTypeEnum & " found." End Select GetDataTypeEnum = strReturn End Function 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/vbaccesstools1.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1110604595 |
2005年3月12日13:16星期六 [Dev开发]





