我使用VBA运行带有Currentdb.Execute命令的INSERT INTO ... SELECT ... SQL查询。但是,我的结果有问题。有一些行缺少数据。MS Access currentdb.excute与Docmd.RunSQL的结果不同
当使用Docmd.RunSQL和相同的SQL时,结果是正确的,但我不希望将警告消息插入表中。
我也试过只使用SELECT ...和Currentdb.Execute并在调试窗口上打印结果。结果是正确的,没有丢失的数据。
这里是我的代码:
strsql = strsql & "INSERT INTO tempLineItems (OrderNo, PositionNo, PartNo, [Description], PlannedDeliveryDate, Qty, Unit, Price, Curr, txta, LineItemText, Discount, Tax) "
strsql = strsql & "SELECT dbo_ttdsls041600.t_orno, dbo_ttdsls041600.t_pono, dbo_ttdsls041600.t_item, IIF(dbo_ttipcs021600.t_dsca is null,dbo_ttiitm001600.t_dsca,dbo_ttipcs021600.t_dsca) AS t_dsca, dbo_ttdsls041600.t_ddta, dbo_ttdsls041600.t_oqua, dbo_ttdsls041600.t_cups, dbo_ttdsls041600.t_pric, dbo_ttdsls040600.t_ccur, dbo_ttdsls041600.t_txta, Null AS LineItemText, dbo_ttdsls041600.t_disc_1, dbo_ttdsls041600.t_cvat "
strsql = strsql & "FROM dbo_ttdsls040600 INNER JOIN ((dbo_ttipcs021600 RIGHT JOIN dbo_ttdsls041600 ON (dbo_ttipcs021600.t_item = dbo_ttdsls041600.t_item) AND (dbo_ttipcs021600.t_cprj = dbo_ttdsls041600.t_cprj)) LEFT JOIN dbo_ttiitm001600 ON dbo_ttdsls041600.t_item = dbo_ttiitm001600.t_item) ON dbo_ttdsls040600.t_orno = dbo_ttdsls041600.t_orno "
strsql = strsql & "WHERE (((dbo_ttdsls041600.t_orno)=" & Me.txtSalesOrderNo.Value & ") AND ((dbo_ttdsls041600.t_pono)>0)) "
strsql = strsql & "ORDER BY dbo_ttdsls041600.t_pono;"
的问题是在
IIF(dbo_ttipcs021600.t_dsca is null,dbo_ttiitm001600.t_dsca,dbo_ttipcs021600.t_dsca) AS t_dsca
我使用ISNULL()函数,它具有相同的结果作为使用IS NULL
3/28/2017更新: 这些表是来自SQL Server的链接表。我根据链接数据的子集数据创建了本地表,并且根本没有丢失数据。
或者只是使用'NZ(dbo_ttipcs021600.t_dsca,dbo_ttiitm001600.t_dsca)'并保存一些按键。 – geeFlo
我尝试过NZ()函数,但结果与丢失的数据一样。 – Hulapig
为什么你打扰别名t_item,特别是用它自己的名字?记录已插入,但缺少说明字段中的数据?任何其他?想要提供用于测试的示例数据?我推荐Box.com fileshare网站。 – June7