2014-01-30 1 views
1

У меня есть код, добавленный в форму в моем db, который работает нормально (на данный момент :)).Вопросы даты и времени в форме доступа MS/таблице

SQL = "SELECT top 1 tblDataEntry.[URN], " & _ 
"tblDataEntry.[Receipt Date], tblDataEntry.[Supplier Name], tblDataEntry.[Lock], " & _ 
"tblDataEntry.[Document], tblDataEntry.[Order Type], " & _ 
"tblDataEntry.[PO #], tblDataEntry.[Invoice Value], tblDataEntry.[Entrytime], " & _ 
"tblDataEntry.[Comment] " & _ 
"FROM tblDataEntry " & _ 
"WHERE (((tblDataEntry.[URN]) Is Not Null) " & _ 
"AND ((tblDataEntry.[Order Type]) ='PO') " & _ 
"AND ((tblDataEntry.[Lock])= False))" 

Я хочу, чтобы добавить строку к этому коду, так что я только найти записи, которые более чем 24 часов назад от времени запуска и держать застрять.

Это то, что я пытался:

"AND ((tblDataEntry.[Entrytime]) < Dateadd(dd,-1,Now()))" 

Примечание: Entrytime является дата/время поля в таблице, которая уже наполненной СЕЙЧАС функционирует на прежнем виде ..

Я пробовал всевозможные комбинации, чтобы добавить строку, чтобы сделать это, но ничего не работает.

ответ

1

В Access DateAdd требуется строковое значение как его пихта й вариант. Измените ваше к этому ...

Dateadd("d", -1, Now()) 

Однако я неопределенными вы действительно хотите, чтобы вычесть 1 «D» для сравнения. Если вы хотите 24 часов вместо этого, используйте это ...

Dateadd("h", -24, Now()) 

На самом деле, я бы соблазнил обрабатывать оба значение даты в виде чисел с плавающей точкой двойной точности (которые они «под капотом») и сделать сравнение этот способ ...

CDbl(de.[Entrytime]) < (CDbl(Now()) -1) 

Попробуйте простой запрос в конструкторе запросов Access.

SELECT de.* 
FROM tblDataEntry AS de 
WHERE 
     de.[URN] Is Not Null 
    AND de.[Order Type] ='PO' 
    AND de.[Lock]= False 
    AND CDbl(de.[Entrytime]) < (CDbl(Now()) -1) 

Осторожно CDbl выдаст ошибку с Null для [Entrytime]. Вы можете избежать этой проблемы путем удаления CDbl

AND de.[Entrytime] < (Now() -1) 

В этом случае/значения Дата Время по-прежнему будут оцениваться как двойной точности поплавки, но не вызывая ошибку, когда [Entrytime] является Null.

При необходимости отрегулируйте, и после того, как вы заработаете эту часть, добавьте свои выборки в поле снова. И, так как вы хотите SELECT TOP 1, включите пункт ORDER BY.

Наконец, после того, как у вас есть запрос, вы хотите адаптировать свой VBA для получения того же SELECT. Или сохраните запрос и используйте этот именованный запрос в коде VBA.

+0

Хорошо, похоже, что это работает, однако это вызывает ошибку времени выполнения '94' Неправильное использование Null .. –

+0

Итак, ваш дизайн стола позволяет Null для поля '[Entrytime]'? Вы можете исключить эти строки из запроса так же, как вы исключили строки, где '[URN]' Null. Или решить, произойдет ли что-то еще, когда '[Entrytime]' Null ... что это будет? – HansUp

+0

На самом деле, вы не абсолютно * нуждаетесь в '' CDbl', чтобы оценивать значения Date/Time как float с двойной точностью. Я включил 'CDbl', потому что я надеялся, что ситуация изменит ситуацию. Но он должен работать без ошибки № 94, если вы сделаете это следующим образом: 'de. [Entrytime] <(Now() -1)' – HansUp

1

Моя догадка проблема в скобках

Попробуйте Понравился

SELECT TOP 1 
     T.[URN], 
     T.[Receipt Date], 
     T.[Supplier Name], 
     T.[Lock], 
     T.[Document], 
     T.[Order Type], 
     T.[PO #], 
     T.[Invoice Value], 
     T.[Entrytime], 
     T.[Comment] 
FROM tblDataEntry AS T 
WHERE T.[URN] Is Not Null AND 
     T.[Order Type] ='PO' AND 
     T.[Lock] = False AND 
     T.[Entrytime] < DateAdd(dd,-1,Now()) 

EDIT

SQL="SELECT TOP 1 T.[URN],T.[Receipt Date],T.[Supplier Name],T.[Lock],T.[Document],   T.[Order Type],T.[PO #], T.[Invoice Value], T.[Entrytime], T.[Comment] FROM tblDataEntry AS T WHERE T.[URN] Is Not Null AND T.[Order Type] ='PO' AND T.[Lock] = False AND T.[Entrytime] < DateAdd(dd,-1,Now())" 

Надежда это поможет вам

+0

Это возвращает ошибку времени выполнения '3061 Слишком мало параметров.Ожидаемый 1 –

+1

@ Na'te Я считаю, что это происходит, когда имена полей в вашем sql-запросе не соответствуют имени (-ам) поля таблицы, то есть имя поля в запросе неверно или, возможно, в таблице отсутствует поле в целом. –

+0

@ Na'te Не могли бы вы уточнить фирменное наименование? –

Смежные вопросы