导出有错误的 Access 数据库
Posted
技术标签:
【中文标题】导出有错误的 Access 数据库【英文标题】:Exporting Access Database with Errors 【发布时间】:2021-06-14 18:15:37 【问题描述】:我可以访问与 oracle 连接的 MS Access 数据库(我只有查看和复制信息的权限,而不是编辑权限):
我发现了一些值为“#Error”的行:
当我点击错误行时,会显示此警告:
我想导出这个数据库,但是这个警告再次出现并且导出过程失败。
我构建了一个可以导出数据库的宏,但它没有导出所有数据:
导出的结果是一个有 65534 行的 excel 文件,而我的数据库有 72437 行!有 6903 行包含值信息,我的宏没有将其拉入 excel 文件。
我有一个用于从访问中提取数据的宏,在出现此 #Error 行之前,它已经成功运行:
Public Sub Bajada_OIT()
Sheets("OIT").Select
'variable para almacenar la conexion
Dim conexion As Object
'variable para almacenar los datos de la consulta al fichero access
Dim recordSet As Object
'variable con la consulta SQL
Dim consulta As String
'viarable donde almacenamos la cadena de conexión
Dim cadenaConexion As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'instanciamos el objeto conexion
Set conexion = CreateObject("ADODB.Connection")
'elegimos el proveedor que vamos a usar y donde se encuentra nuestra base de datos
cadenaConexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\SEC\COST\COST\DIT\DIT.accdb"
'consulta que haremos a la base de datos
consulta = "SELECT * FROM ADAS_PCO_OIT;"
'abrimos la conexión
conexion.Open cadenaConexion
'ejecutamos la consulta y nos traemos los resultados (recordset)
Set recordSet = conexion.Execute(consulta)
On Error Resume Next
Sheets("OIT").Range("A2").CopyFromRecordset recordSet
'Este error es debido a que la base de datos tiene filas con valores #Error que no pueden ser copiados al portapapeles.
If Err.Number = -2147467259 Then
MsgBox "La base de datos contiene datos imposibles de copiar, se ha cancelado la extracción automática."
Remove_Bajada_OIT
Exit Sub
End If
On Error GoTo 0
'cerramos el recordset
recordSet.Close
Set recordSet = Nothing
'cerramos conexion
conexion.Close
Set conexion = Nothing
MsgBox "Extraccion de Acces: ADAS_PCO_OIT (OIT) Satisfactoria.", vbInformation, "Ayuda"
End Sub
什么是适当的 SQL 查询以便不显示错误并且宏再次工作?
或者我必须在数据库中进行什么配置才能不出现这些错误(记住我不是这个数据库的管理员)?
【问题讨论】:
您是否因为 #ERROR 而丢失数据?建议您与管理员交谈并找出这些数据是什么,并找出 Access 不处理它的原因。也许查询可以使用 IsError() 函数:SELECT * FROM ADAS_PCO_OIT WHERE NOT IsError(somefieldname);
。使用 VBA 和 TransferSpreadsheet 代替宏。
您使用的是最新版本的 Oracle ODBC 驱动程序吗? oracle.com/database/technologies/odac-downloads.html
感谢@June7 并为您解答!不幸的是,我试过了,错误再次发生,提取没有完成。
感谢@HackSlash 的回答!我有这个驱动程序:“Oracle in OraClient12Home 1_32bit”来建立连接。我可以在新的 Access 文件中再次解决我的问题。
【参考方案1】:
我可以在新的 Access 文件中再次连接来解决这个问题:
-
正在创建新的 Access Blank 桌面数据库。
在“外部数据”功能区中,选择“导入和链接”部分中的“ODBC 数据库”选项。
选择源和目标区域(您可以指定在当前数据库中存储数据的方式和位置)。
创建新的 DSN 文件数据源。
-
选择您要为其设置数据源的驱动程序(在我的情况下,我使用“Oracle in OraClient12Home 1_32bit”12.01.00.02 驱动程序版本)
键入要保存此连接的文件数据源的名称。
完成(如果数据库具有用户/密码安全性,接下来您需要具有访问权限才能进入数据库)。
似乎我的数据库连接已损坏,再次执行此步骤已解决了我的问题。
如果有人遇到同样的问题,我希望这个解决方案可以解决这个问题。
【讨论】:
以上是关于导出有错误的 Access 数据库的主要内容,如果未能解决你的问题,请参考以下文章
Access数据库通过ODBC导出到Oracle的两个小问题ora-24801Ora-01401