Неопределенная функция «Заменить» в выражении. Ошибка выполнения 3085 - PullRequest
0 голосов
/ 01 мая 2018

Я работаю с приложением vb 6.0. Там я использую функцию замены в моем запросе. Запрос отлично работает в доступе, но когда он работает в VB, он выдает мне ошибку:

"Неопределенная функция 'Заменить' в выражении. Ошибка времени выполнения 3085".

Я думаю, что мне не хватает ссылок. В настоящее время я добавил следующие ссылки.

References

«Заменить» находится в предложении 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 выглядят следующим образом

enter image description here enter image description here

1 Ответ

0 голосов
/ 02 мая 2018

Эта функция не имеет особого смысла для меня. Как спросили комментаторы, можете ли вы объяснить, почему вам нужно удалить «:» из InvoiceDate? Как говорит @LukeG - добавление примеров данных поможет нам.

Удалив «:» из части времени AM / PM даты, ваша функция не будет работать, даже если сработало Заменить, потому что вы просили бы DateValue преобразовать в строку, которая теперь не отформатирована как правильная дата

Есть пара вещей, которые вы можете сделать:

РЕДАКТИРОВАНИЕ:

Поскольку теперь мы знаем, что InvoiceDate НЕ является полем даты, вы можете просто удалить временную часть поля, взяв первые 10 символов и преобразовав их в дату:

(CDate(Left(Invoice.InvoiceDate,10)) Between #" & Format(dtpFrom.value, "yyyy/mm/dd") & "# And #" & Format(dtpTo.value, "yyyy/mm/dd") & "#)
...