'===========================================================
' 过程及函数名: 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
' 电子邮件 : 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
' 电子邮件 : 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
|