【发布时间】:2026-01-20 13:40:02
【问题描述】:
我正在使用 vb 6.0 应用程序。我在查询中使用了替换功能。该查询在访问中工作正常,但是当它在 vb 中运行时,它给了我错误:
“表达式中未定义函数'Replace'。运行时错误3085”。
我认为我缺少参考资料。我目前添加了以下参考。
“替换”位于 where 子句中:
...WHERE ((DateValue(Replace(Invoice.InvoiceDate, ': ', ' ')) Between...
以下完整查询给了我错误。
Set DrsInv = db.OpenRecordset("SELECT Invoice.InvoiceDate, InvoicedProduct.InvoiceType, Invoice.InvoiceStatus, Invoice.RetailerID, Invoice.DailySalesID, Invoice.RepID, InvoicedProduct.Quantity, InvoicedProduct.UnitRate, InvoicedProduct.TotalItemValue From Invoice INNER JOIN InvoicedProduct ON (Invoice.DailySalesID = InvoicedProduct.DailySalesID) AND (Invoice.RepID = InvoicedProduct.RepID) AND (Invoice.InvoiceID = InvoicedProduct.InvoiceID)" _
& " WHERE ((DateValue(Replace(Invoice.InvoiceDate, ': ', ' ')) Between #" & Format(dtpFrom.value, "yyyy/mm/dd") & "# And #" & Format(dtpTo.value, "yyyy/mm/dd") & "#) AND (InvoicedProduct.ProductID = '" & Srs("ProductID") & "'))" _
& " GROUP BY Invoice.InvoiceDate, InvoicedProduct.InvoiceType, Invoice.InvoiceStatus, Invoice.RetailerID, Invoice.DailySalesID, Invoice.RepID, InvoicedProduct.Quantity, InvoicedProduct.UnitRate, InvoicedProduct.TotalItemValue HAVING ((InvoicedProduct.InvoiceType)='Invoice' AND (Invoice.InvoiceStatus)='VALID') Order By Invoice.InvoiceDate DESC")
我使用替换功能是因为 InvoiceDate 是一个文本字段。因此,当我尝试将其转换为查询中的日期字段时,它给了我错误“数据类型不匹配”。日期内的冒号是此错误的原因。这就是为什么我需要更换冒号。我无法更改数据库字段。所以这就是我所看到的解决方案。
InvoiceDate 字段的数据如下所示
【问题讨论】:
-
替换属于 Visual Basic for Applications。最新的 DLL 是 VBE7.DLL。
-
你是如何定义
db的?请添加初始化代码 -
看起来问题是数据库引擎无法识别
Replace。我无法复制它,但我知道Replace位于一个奇怪的地方,它是一个标准函数,但不允许在默认值中使用。 -
Jet Expression Service 没有实现 Replace、InStrRev 或其他几个较新的函数。 MS Access 使用专有方案在其位置注入自己的 VBA 处理器,但 VB6 程序无法做到这一点。
-
您能否通过使用左侧、右侧等并将它们连接在一起从 InvoiceDate 字段构建您想要的格式?看看您的系统中的一些 InvoiceDate 值示例是什么样子会有所帮助。
标签: vb6 ms-access-2010