1

我和一个朋友已经尝试了几个小时,但几乎没有取得任何进展,以便为我们作为一个项目设计的发票系统获得一段正确的代码。

我们正在尝试将 InvoiceNo 字段更新为一个值(在前面的 VisualBasic 代码中计算出来),其中 CustomerNo 是一个特定值,FinishDate 介于两个日期之间。起初我试图使用 TO_DATE,但后来我们意识到 Access 使用的 SQL 中不一样(经过大量搜索)。

这是我一直在使用的简单语句,用于测试并尝试使某些东西起作用,然后转换为 VisualBasic 并放入我们的变量中。它更容易阅读,所以我想我会提供它。

UPDATE tblJob SET tblJob.InvoiceNo = '8' WHERE tblJob.CustomerNo = '1' AND (tblJob.FinishDate BETWEEN cdate(format('08/09/2013', '##/##/####')) AND cdate(format('03/10/2013', '##/##/####')));

看了几个例子后,我有一种感觉,我们的日期应该没有正斜杠。所以我尝试了它,它也没有工作。

这是从所有这些中得出的 VisualBasic 代码,它完全相同,但使用了一些变量,而不是我一直用于测试的设置值。

DoCmd.RunSQL ("UPDATE tblJob SET tblJob.InvoiceNo = '" & newInvoiceNo & "' WHERE tblJob.CustomerNo = '" & VbCustNo & "' AND (tblJob.FinishDate BETWEEN cdate(format('" & Forms![frmMainMenu][txtFirstDate] & "', '##/##/####')) AND cdate(format('" & Forms![frmMainmenu][txtEndDate] & "', '##/##/####')));")

我们看了一下:在 Access 中将字符串转换为日期,它帮助我们意识到它是 cdate(format()) 而不是 Oracle 中的 TO_DATE。但我们似乎无法让它正常运行,任何帮助将不胜感激。

4

1 回答 1

1

如果您将从 Access 应用程序会话中运行查询,则可以让 db 引擎使用 Access 表达式服务从表单上的文本框中获取值。

Dim db As DAO.Database
Dim strUpdate As String
strUpdate = "UPDATE tblJob" & vbCrLf & _
    "SET InvoiceNo = '" & newInvoiceNo & "'" & vbCrLf & _
    "WHERE CustomerNo = '" & VbCustNo & "'" & vbCrLf & _
    "AND FinishDate BETWEEN Forms!frmMainMenu!txtFirstDate AND Forms!frmMainmenu!txtEndDate;"
Debug.Print strUpdate
Set db = CurrentDb
db.Execute strUpdate, dbFailOnError
Set db = Nothing

但是,如果您希望将这些文本框中的文字日期值构建到您的UPDATE语句中,您可以使用Format().

"AND FinishDate BETWEEN " & _
Format(Forms!frmMainmenu!txtFirstDate, "\#yyyy-m-d\#") & _
" AND " & Format(Forms!frmMainmenu!txtEndDate, "\#yyyy-m-d\#") & ";"

无论哪种方式,使用字符串变量来保存您的UPDATE语句都让您有机会检查您要求数据库引擎执行的已完成语句。

Debug.Print您可以在“立即”窗口中查看输出(使用Ctl+去那里g)。对于故障排除,您可以从那里复制语句文本,然后将其粘贴到新 Access 查询的 SQL 视图中。

于 2013-10-03T17:34:29.060 回答