【发布时间】: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 文件中再次解决我的问题。
标签: excel vba database ms-access