'=========================================================== ' 过程及函数名: RaiseError ' 版本号 : -- ' 说明 : 本示例演示怎样会发生“字段将不能置于记录中”错误 ' ACCESS导出到DBF时提示“字段将不能置于记录中。” ' 引起上述错误的原因可能是ACCESS表的字段中文本字段 ' 太多,造成总长度超过 DBF 限制。 ' 解决方案是减少字段总长度,或者分多个DBF导出,在 ' FoxPro 中再进行组合。 ' 测试环境 : win2003+office2007 chs ' 引用 : -- ' 输入参数 : -- ' 输出值 : -- ' 返回值 : -- ' 调用演示 : RaiseError ' 按 Alt+F11 转到VBE界面,菜单->插入->模块 ' 将下列代码赋值粘贴进模块,将光标停放(单击)在 ' Function RaiseError 这行上,然后按F5键运行看效果 ' 最后修改日期: 2008-10-26 11:59:00 ' 示例地址 : http://access911.net/?kbid;72FABF1E13DCE7F3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : access911@gmail.com ' 版权 : 作者保留一切权力, ' 请在公布本代码时将本段说明一起公布,谢谢! '=========================================================== Function RaiseError() Dim strSql As String Dim strFields As String Dim i As Long For i = 1 To 40 strFields = strFields & ", f" & i & " text(250)" Next DropTable "test_temp" strSql = "create table test_temp (f0 text(250) " & strFields & " )" CurrentProject.Connection.Execute strSql '以下这行将提示错误“字段将不能置于记录中”。 DoCmd.TransferDatabase acExport, "dBase 5.0", CurrentProject.Path, acTable, "test_temp", "aaa.dbf" '将每个文本字段的字段长度尽量减少即可解决问题,或者分多次导出到多个 DBF ,每次只导出几个字段,也可以。 End Function Function DropTable(ByVal TableName) On Error Resume Next Dim strSql As String strSql = "drop table " & TableName CurrentProject.Connection.Execute strSql End Function '=========================================================== ' 过程及函数名: TestFieldsLenCountLimit ' 版本号 : -- ' 说明 : 测试总长度达到多少时会出错。测试结果是一般为3900-4000 ' 测试环境 : win2003+office2007 chs ' 引用 : -- ' 输入参数 : -- ' 输出值 : -- ' 返回值 : -- ' 调用演示 : TestFieldsLenCountLimit ' 按 Alt+F11 转到VBE界面,菜单->插入->模块 ' 将下列代码赋值粘贴进模块,将光标停放(单击)在 ' TestFieldsLenCountLimit 这行上,然后按F5键运行看效果 ' 最后修改日期: 2008-10-26 11:59:00 ' 示例地址 : http://access911.net/?kbid;72FABF1E13DCE7F3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : access911@gmail.com ' 版权 : 作者保留一切权力, ' 请在公布本代码时将本段说明一起公布,谢谢! '=========================================================== Function TestFieldsLenCountLimit() Dim i As Long Dim lngFieldSize As Long Dim lngStart As Long lngStart = 235 lngFieldSize = 16 For i = lngStart To 255 Debug.Print "正在测试" & i & "个字段" DoEvents If RaiseError1(i, lngFieldSize) = True Then Debug.Print i, "测试长度:" & i * lngFieldSize Exit For End If Next End Function Private Function RaiseError1(ByVal fields As Long, ByVal TextLength As Long) As Boolean Dim strSql As String Dim strFields As String Dim i As Long On Error GoTo RaiseError1_Err For i = 1 To fields strFields = strFields & ", f" & i & " text(" & TextLength & ")" Next DropTable "test_temp" strSql = "create table test_temp (f0 long " & strFields & " )" Debug.Print strSql CurrentProject.Connection.Execute strSql '以下这行将提示错误“字段将不能置于记录中”。 DoCmd.TransferDatabase acExport, "dBase 5.0", CurrentProject.Path, acTable, "test_temp", "aaa.dbf" '将每个文本字段的字段长度尽量减少即可解决问题,或者分多次导出到多个 DBF ,每次只导出几个字段,也可以。 Exit Function RaiseError1_Err: Select Case Err.Number Case 0 Case 3016 RaiseError1 = True Case Else MsgBox Err.Number & Err.Description End Select End Function |