最近,我参加了一个 IT 考试,其中有一个关于使用 LibreOffice 与 Linux 操作系统和 Access 97 数据库作为数据源进行邮件合并的问题。问题指出,没有连接到在 Linux 上正常工作的 Access 97 数据库的连接器
在我必须选择的选项中,其中之一是将 Access 数据导出到 CSV 文件,然后在 LibreOffice 上针对 CSV 文件定义数据源。
另一种是直接针对 Access 定义一个 LibreOffice 数据源。
我有一些过去使用 UCanAccess 从 Access 2000 数据库中提取一些数据的记忆,所以即使说没有合适的连接器可用,我还是选择了第二个选项,将 LibreOffice 直接连接到 Access。
显然,正确的答案是导出为 CSV 并使用它。
我很好奇,我从 Office 97 示例中获得了一个 Access 97 数据库。名称是(西班牙语)Neptuno.mdb
当我尝试在 UCanAccess 的 console.sh 中打开它时,我得到的是以下内容:
警告:未知表达式:GenUniqueID()(IdProducto 表 Detalles de pedidos 列的默认值) 首次加载 Cat�logo 时发生错误 转换后的视图为:CREATE VIEW "CAT�LOGO" AS SELECT DISTINCT Categor�as.NombreCategor�a、Categor�as.Descripti�n、Categor�as.Imagen、Productos.IdProducto、Productos.NombreProducto、Productos.CantidadPorUnidad、Productos。 PrecioUnidad FROM "CATEGOR�AS" INNER JOIN Productos ON Categor�as.IdCategor�a = Productos.IdCategor�a WHERE (((Productos.Suspendido)=false)) 错误信息是 :palabra no esperado: � 加载表: 类别, 客户, Compa��as de env�os, Empleados, Pedidos, Proveedores, Productos, Detalles de pedidos 加载的查询: Detalle de pedidos con descuento, Lista de productos actual, Los diez productos m�s caros, Productos sobre el precio medio, Subtotales por pedido 加载程序: 加载索引: 分类列上的唯一索引:(NombreCategor.a) , 分类列上的主键:(IdCategor.a) , Clientes 列上的主键:(IdCliente) , Compa��as de env�os 列上的主键:(IdCompa��aEnv�os) , Detalles de pedidos 列上的主键:(IdPedido,IdProducto) , Empleados 列上的主键:(IdEmpleado) , Pedidos 列上的主键:(IdPedido) , Productos 列的主键:(IdProducto) , Proveedores 列上的主键:(IdProveedor) , FK on "DETALLES DE PEDIDOS" 列:(IdPedido) 参考 PEDIDOS 列:(IdPedido) , FK on "DETALLES DE PEDIDOS" 列:(IdProducto) 参考 PRODUCTOS 列:(IdProducto) , FK on PEDIDOS Columns: (IdCliente) References CLIENTES Columns: (IdCliente) , FK on PEDIDOS 列:(FormaEnv�o)参考“COMPA��AS DE ENV�OS”列:(IdCompa��aEnv�os) , FK on PEDIDOS Columns: (IdEmpleado) 参考 EMPLEADOS Columns: (IdEmpleado) , FK on PRODUCTOS 列:(IdCategor�a) 参考“CATEGOR�AS”列:(IdCategor�a) , FK on PRODUCTOS Columns: (IdProveedor) 参考 PROVEEDORES Columns: (IdProveedor) , 客户列索引: (Ciudad) ,客户列索引:(C�dPostal) , 客户列索引:(NombreCompa��a) , 客户列索引: (Regi�n) , Empleados 列索引:(Apellidos) , Empleados 列索引:(C�dPostal) , Pedidos 列索引:(C�dPostalDestinatario) , Pedidos 列索引:(FechaEnv�o) , Pedidos 列索引:(FechaPedido) , Productos 列索引:(NombreProducto) , Proveedores 列索引:(C�dPostal) , Proveedores 列索引:(NombreCompa��a) 无法加载视图 Facturas : palabra no esperado: � 无法加载视图 Lista alfab�tica de productos : palabra no esperado: � 无法加载视图 Resumen de ventas por triestre : palabra no esperado: � 无法加载视图 Filtro facturas : usuario no tiene privilegios suficientes o objeto no encontrado: FACTURAS 无法加载视图 Ventas por categor�a para 1995 : palabra no esperado: � 无法加载视图 Pedidos triestrales por producto : palabra no esperado: # 无法加载视图 Consulta de pedidos : palabra no esperado: � 无法加载视图 Pedidos triestrales : palabra no esperado: � 无法加载视图 Productos por categor�a : palabra no esperado: � 无法加载视图 Cat�logo : palabra no esperado: � 无法加载视图 Ventas por a�o : usuario no tiene privilegios suficientes o objeto no encontrado: PARAMETERS 无法加载视图 Clientes y Proveedores por ciudad : palabra no esperado: � 无法加载视图 Totales de ventas por cantidad : palabra no esperado: � 无法加载视图 Ventas de empleado por pa�s : usuario no tiene privilegios suficientes o objeto no encontrado: PARAMETERS 无法加载视图 Ventas por categor�a : palabra no esperado: � 无法加载查看 Ventas de productos para 1995 : palabra no esperado: � 无法加载视图 Resumen de ventas por a�o : palabra no esperado: � UCanAccess> 版权所有 (c) 2021 Marco Amadei UCanAccess 版本 5.0.1 你已经连接了!! 输入quit退出 命令以 ; 结尾 利用: 导出 [--help] [--bom] [-d ] [-t ] [--big_query_schema ] [--newlines] ; 用于将最后执行的查询或特定表中的结果集导出到 .csv 文件中
示例数据库经常使用西班牙语字符(ñ、á、é、í、ó、ú 等)。在这些链接之后,除其他外:
我已经修改了一些代码片段来创建一个 jar 文件:
public class PruebaUCanAccess {
public static void main(String[] args) {
try {
String base = "/home/some_username/access/office97_samples/NEPTUNO.MDB";
java.util.Properties propiedades = new java.util.Properties();
propiedades.put("jackcessOpener", "prueba.ucanaccess.CharsetOpener");
Connection conn= DriverManager.getConnection(String.format("jdbc:ucanaccess://%s", base),propiedades);
try (ResultSet rsMD = conn.getMetaData().getTables(null, null, null, null)) {
while (rsMD.next()) {
String tblName = rsMD.getString("TABLE_NAME");
System.out.println(tblName);
}
}
Statement st =conn.createStatement();
ResultSet rs=st.executeQuery("SELECT * FROM Clientes");
while (rs.next()) {
System.out.println(
rs.getString("NombreCompañía")
+ " , " + rs.getString("NombreContacto")
+ " , " + rs.getString("Dirección")
+ " , " + rs.getString("Ciudad")
+ " , " + rs.getString("CódPostal")
+ " , " + rs.getString("País"));
}
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
而且我可以看到表名并包含正确拼写(即没有 ? 字符)。如果我包含我在 LibreOffice 类路径中生成的 jar,并将“;jackcessOpener=prueba.ucanaccess.CharsetOpener”添加到 LibreOffice 连接字符串,我设法在 LibreOffice 表和视图中查看拼写正确,并记录。
所以,关键是错误,当我创建一个链接到 mdb 的 odb 文件时也会出现错误,显然,错过加载表
任何人都可以对此有所了解吗?提前致谢。