一位朋友的訪問,我一直進展不大想了幾個小時的得到我們正在設計一個項目的發票系統的一段代碼的權利。更新一個字段依賴於日期範圍與VisualBasic中和SQL
我們正在嘗試將字段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] & "', '##/##/####')));")
我們不得不看看:Convert a string to a date in Access,它讓我們意識到,這是CDATE(格式()),而不是TO_DATE,因爲它是Oracle。但是,我們似乎無法讓它正常運行,任何幫助將不勝感激。
如果您的日期格式爲mm/dd/yyyy,您可以使用#字符,如BETWEEN#08/09/2013#和#03/10/2013#訪問將會看到這是一個日期 – engineersmnky
@engineersmky謝謝,但我們使用dd/mm/yyyy,但我猜測它不會以相同的方式工作? –
你可以隨時使用'DateSerial'這是'DateSerial(年,月,日)'所以,像'DateSerial(右([YourDate],4),MID([YourDate],3,2),左([YourDate] ,2)'。這將以正確的格式返回一個日期對象,這就是我如何正確處理格式化的字符串日期。 – engineersmnky