gpt4 book ai didi

sql - ADO 可更新查询 - 当其中一个连接表没有记录时出错

转载 作者:行者123 更新时间:2023-12-03 18:51:33 25 4
gpt4 key购买 nike

我使用 ADO 的“可更新查询”功能,能够从多个表和条件中选择一个数据集,并将其显示在网格或其他一些 UI 中,供用户浏览和编辑。

但是,我很惊讶我之前没有遇到过这个问题,当其中一个连接表没有(主)键的记录,并且用户尝试编辑该表中的字段时,ADO 给出帖子中著名的“无法找到行..”错误。

据我了解此错误,ADO 驱动程序正在尝试定位记录以更新其字段 - 当然,在这种情况下,没有要查找的记录。在这些情况下,我所期望的是 ADO 驱动程序将发出相当于主表的 UPDATE 查询,但发出子表的 INSERT 查询。

有没有其他人遇到过这个问题并找到了解决方法?

使用的 ADO 驱动程序是连接到 Access (mdb) 数据库的 Jet 4.0 OLE DB 提供程序。

我已经确保两个表的主键字段在查询数据集中都可用,供驱动程序使用。

这是我使用的 SQL 的基本版本:

SELECT 
Table1.CustomerNo, Table1.Field1, Table1.Fieldn,
Table2.CustomerNo, Table2.Field1, Table2.Fieldn
FROM
Table1
LEFT JOIN Table2
ON Table1.CustomerNo = Table2.CustomerNo
WHERE
Table1.CustomerNo = Newcode;

作为一个实验,我在 MS Access 2007 中尝试了同样的事情,并且奏效了,所以 ADO 中可能有一个解决方案(但 Access 可能使用了不同的驱动程序)。

最佳答案

最后,我选择了“hack”解决方案。对 2 个表的可更新 ADO 查询仅适用于
客户的记录存在于两个表中。因此,我必须检查一下,如果 table2 中缺少相关记录,则必须先插入它,然后再调用主查询。这是代码:


 //Query customer account - open query from Table1 and Table2 tables 
TwoTableQuery.Close;
//
//SELECT Table2.CustomerNo
// FROM Table2
//WHERE (Table2.CustomerNo = CustomerCode);
Table2Query.Close;
Table2Query.Parameters[0].Value := CustomerCode;
Table2Query.Open; /
//does the Table2 record exist for this customer?
if Table2Query.RecordCount = 0 then
begin //no, so create a new record
Table2Query.Insert;
Table2Query.FieldByName('CustomerNo').AsString := CustomerCode;
Table2Query.Post;
Table2Query.Close;
end;
//okay, now okay to open main query
TwoTableQuery.Parameters[0].Value := CustomerCode;
TwoTableQuery.Open;

它效率不高,还会创建可能不需要的记录(在表 2 中)。但这似乎是唯一的解决方案。

关于sql - ADO 可更新查询 - 当其中一个连接表没有记录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com