преобразование текстового поля в поле даты / времени в запросе доступа не работает - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю с базой данных доступа и vb6. В моей таблице есть поле с именем «InvoiceDate», которое является текстовым полем. Мне не разрешено вносить изменения в базу данных. Поэтому я думаю, что мой единственный вариант - это изменить текстовое поле на поле даты / времени в моем запросе. Я нашел несколько способов сделать это. Они следующие.

  • Формат (InvoiceDate, "гггг / мм / дд")
  • (DateSerial (левый (InvoiceDate, 4), Mid (InvoiceDate, 5,2), Right (InvoiceDate, 2)) Между # 2015/01/01 # и # 2016/01/01 #))
  • DateValue (InvoiceDate, "гггг / мм / дд")
  • CDate (InvoiceDate, "гггг / мм / дд")

Но эти 4 метода не сработали. Я не могу понять это.

Я использую следующий запрос

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 (((InvoicedProduct.ProductID)='9010001174130.4') 
    AND (DateValue(Invoice.InvoiceDate) Between #2015/01/01# And #2016/01/01#)) 
GROUP BY Invoice.InvoiceDate, InvoicedProduct.InvoiceType, Invoice.InvoiceStatus, 
    Invoice.RetailerID, Invoice.DailySalesID, Invoice.RepID, 
    InvoicedProduct.Quantity, InvoicedProduct.UnitRate, 
    InvoicedProduct.TotalItemValue 
HAVING (((InvoicedProduct.InvoiceType)='Invoice' OR (InvoicedProduct.InvoiceType)='Sound') 
    AND ((Invoice.InvoiceStatus)='VALID')) 
ORDER BY Invoice.InvoiceDate;

Это дает мне ошибку "Несоответствие типов данных в выражении критериев"

следующие два типа включены в мое поле InvoiceDate

2016/01/04 10:00: AM и 2016/01/20 20:25

Единственная разница - двоеточие после времени

Following two types are include in my InvoiceDate Field

Пожалуйста, помогите. Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2018

Ваши критерии:

DateValue(Invoice.InvoiceDate) Between #2015/01/01# And #2016/01/01#

является правильным, поэтому сообщение об ошибке указывает, что одна или несколько ваших текстовых дат в InvoiceDate не представляют действительную дату, например 2015-06-31 или Null.

Запустите запрос, чтобы проверить это:

Select *, IsDate(InvoiceDate) As ValidDate From Invoice

и проверьте, является ли какое-либо из значений ValidDate False.

Чтобы игнорировать лишнее двоеточие:

DateValue(Replace(Invoice.InvoiceDate, ": ", " ")) Between #2015/01/01# And #2016/01/01#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...