You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL视图在Access中返回重复数据问题求助

问题:Access查询PostgreSQL视图返回重复数据

环境信息

  • Postgres v9.4
  • MS-Access 365 v2303
  • PostgreSQL Unicode驱动v13.02
  • 连接参数:PORT=5432;A1=7.4-1;B0=255;B1=8190;B6=0;C2=dd_

查询结果对比

在PostgreSQL中

  • 查询Deposits表:
    SELECT *
    FROM "Deposits"
    WHERE "Deposit_Slip_Number"='2305-6';
    
    返回5条不同的正确数据。
  • 查询vw_rptDeposits_OnBankStatement视图:
    SELECT *
    FROM "vw_rptDeposits_OnBankStatement"
    WHERE "Deposit_Slip_Number"='2305-6';
    
    返回15条不同的正确数据。

在Access中

  • 查询Deposits直通表:
    SELECT *
    FROM Deposits
    WHERE Deposit_Slip_Number='2305-6';
    
    返回5条不同的正确数据。
  • 查询vw_rptDeposits_OnBankStatement直通视图:
    SELECT *
    FROM vw_rptDeposits_OnBankStatement
    WHERE Deposit_Slip_Number='2305-6';
    
    返回15条数据,但全部与第一条重复,数据异常。

已排查操作

  • 重启机器、Postgres服务
  • 更换Postgres服务器
  • 确认驱动未更新,仅修改过该视图,其他视图显示正常,所有表/视图均为无DNS的代码链接直通对象

可能的原因及解决方法

  1. 视图缺少唯一标识字段
    Access的ODBC直通视图需要明确的唯一主键或唯一标识字段来区分每条记录。如果PostgreSQL视图未返回唯一标识字段,Access会重复填充第一条记录到所有行。

    • 解决:修改PostgreSQL视图,确保返回包含唯一标识的字段(如原表主键列),且该字段在视图结果集中保持唯一。
  2. ODBC驱动与视图的兼容性问题
    当前使用的PostgreSQL驱动v13.02与Postgres v9.4可能存在视图字段解析的兼容性问题,尤其是视图包含复杂关联、聚合或特殊字段类型时。

    • 解决:
      • 给视图中所有字段显式指定别名,避免字段名冲突或类型模糊;
      • 检查视图中是否存在Access无法识别的PostgreSQL特定字段类型,转换为通用类型(如TEXT、INT);
      • 测试升级/降级驱动版本(需兼容Postgres v9.4),匹配数据库与驱动的版本适配性。
  3. 视图SQL逻辑的ODBC解析异常
    由于仅修改过该视图,需排查视图的关联、分组等逻辑是否使用了Access ODBC不支持的PostgreSQL特定语法,导致结果集被错误处理。

    • 解决:简化视图SQL,逐步移除复杂逻辑(如多表关联、子查询),每一步测试Access查询结果,定位到导致重复的具体逻辑后,调整为Access ODBC兼容的写法。

内容的提问来源于stack exchange,提问作者BWhite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:47:09