代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

访问vba-从SQL查询打印最后一条记录

  •  2
  • Tony The Lion  · 技术社区  · 15 年前

    我有以下正在执行的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
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Patrick Karcher    15 年前

    ( 编辑: 重新安排以关注可能的罪犯)

    不,你不容易拿到最后一张唱片。你可以试试 Select Top 5000 . . . 等等,如果它起作用的话就提高值,如果不起作用的话就降低值,这样就等于零了。但是,不太可能是某个特定的IS记录导致了这个问题。我觉得没有 不良数据 某处。这是查询。

    在select查询中关注sum。把它拿出来,你就可以进行查询了。很可能是总和超过了SQL用来添加值的数值类型。实际上,我想得越多,这可能就是它。是啊。如果是,则需要将其强制为能够处理较大数字的类型,如:

    SELECT blah blah, SUM(CAST([TotaalPrijs]/([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal] AS DECIMAL)) AS GezaagdeOmzet

    MSAccess的语法可能稍有不同,但会是这样。作为访问,默认值可能是int,在这种情况下,您可以指定long。否则,请指定小数。如果可以的话,尽量避免使用实数(单号等),如果不小心的话,它们会把你搞得一团糟。

    尽管可能性较小,但还有其他一些可能的罪魁祸首:

    • 您确定这个查询符合逻辑吗 对的?此查询可能由以下原因引起: 结果集太大 返回。使用 Select Top 1000 etc. 语法,并分析结果 以确保连接正常工作 如你所愿,不要误会 造成 cartesian 结果,用于 例子。
    • 如果您的查询返回合法 结果,那么可能是 合法结果太大了? 如果你真的应该得到 10亿个结果,这也是 太多了,那你就得换你的 整体策略,或减少列数 被退回等。
        2
  •  1
  •   Tomalak    15 年前

    我猜这个表达方式是:

    Sum([TotaalPrijs]/([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal])
    

    为某些记录产生数字溢出。不知道您的列使用什么数据类型,我只能建议在计算期间尝试将它们转换为“更大”的数据类型。

        3
  •  0
  •   Kevin Ross    15 年前

    查询的部分是否可能

    ([tbl_ArtikelsPerOrder]![Aantal]*[Totaal])*[tbl_ArtikelVerwijderdUitZaaglijst]![Aantal])
    

    正在返回0?如果这样会导致错误,那么可能不是大数据出错,而是数据太小或不存在。

    推荐文章