我正在执行以下SQL查询,并且我正在尝试查找运行查询时返回错误“溢出”的原因。
现在我想在进入溢出之前打印它计算的最后一条记录,这是否可以使用MS Access VBA?
Private Sub Command0_Click()
Dim sql As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb()
sql = "SELECT DatumNaarWeeknummer([tbl_ArtikelVerwijderdUitZaaglijst]![RegistratieDatum]) AS WeeknummerGezaagdeOmzet, " _
& "Sum([TotaalPrijs]/([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal]) AS GezaagdeOmzet " _
& "FROM (((tbl_ArtikelsPerOrder LEFT JOIN qry_Actieve_Orders ON tbl_ArtikelsPerOrder.OrderID = qry_Actieve_Orders.OrderID) LEFT JOIN qry_ArtikelPerOrderID_EenheidsPrijsBijFranco ON tbl_ArtikelsPerOrder.ArtikelsPerOrderID = qry_ArtikelPerOrderID_EenheidsPrijsBijFranco.ArtikelsPerOrderID) " _
& "LEFT JOIN qry_AantalArtikelTypesPerArtikelPerOrder ON tbl_ArtikelsPerOrder.ArtikelsPerOrderID = qry_AantalArtikelTypesPerArtikelPerOrder.ArtikelsPerOrderID) " _
& "RIGHT JOIN tbl_ArtikelVerwijderdUitZaaglijst ON tbl_ArtikelsPerOrder.ArtikelsPerOrderID = tbl_ArtikelVerwijderdUitZaaglijst.ArtikelsPerOrderID " _
& "GROUP BY DatumNaarWeeknummer([tbl_ArtikelVerwijderdUitZaaglijst]![RegistratieDatum]);"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
End Sub
答案 0 :(得分:1)
我猜是这个表达式:
Sum([TotaalPrijs]/([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal])
为某些记录生成数字溢出。不知道列使用的数据类型,我只建议在计算过程中尝试将它们转换为“更大”的数据类型。
答案 1 :(得分:1)
(编辑:重新排列,专注于可能的罪魁祸首)
不,你不能轻易获得最后一条记录。您可以尝试Select Top 5000 . . .
等,如果它有效则提高值,如果不有则降低值,并以此方式为零。但是,特定记录不太可能导致问题。我不认为某处有坏数据。这是查询。
关注选择查询中的Sum。拿出来,你可能会有查询工作。很可能总和超过了sql用来添加值的数字类型。实际上,我越是想到它,这可能就是它。是啊。如果是,您需要将其强制转换为可以处理更大数字的类型,如下所示:
SELECT blah blah, SUM(CAST([TotaalPrijs]/([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal] AS DECIMAL)) AS GezaagdeOmzet
MSAccess的语法可能略有不同,但它会是这样的。作为Access,默认值可能是int,在这种情况下,您可以指定Long。否则,请指定Decimal。如果可以的话,尽量避免使用真实数字(单身等),如果你不小心,他们会把你搞砸。
虽然不太可能,但这里还有一些其他可能的罪魁祸首:
Select Top 1000
etc.
语法,并分析结果
确保你的联接工作正常
如你所愿,并没有错误
导致cartesian结果
示例答案 2 :(得分:0)
是否可能是查询的一部分
([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal])
回归0?如果这样会导致错误,那么可能不是大数据有故障但数据太小或不存在