Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Проблема с функцией (Month("Дата"))  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Поле "Дата" имеет формат Даты и отображается в строках как 31.12.2005
Запрос
SELECT Реестр_накладных.Дата, Реестр_накладных.Материал
FROM Реестр_накладных
WHERE (((Month("Дата"))<8));
Не хочет работать - выдает ошибку о несоответствии типов данных. в функцию Month нуно подставлять #31/12/2005# Как в моем случае это устроить?
21 май 06, 21:41    [2689223]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
WHERE (((Month([Дата]))<8));
21 май 06, 22:23    [2689276]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
NG
WHERE (((Month([Дата]))<8));

все, я сделал так:
SELECT [№ накладной], [Дата], [Контрагент], [Материал], [Ед изм], [Количество], [Цена ед]
FROM Реестр_накладных
WHERE [Контрагент]="Тюментрансгаз ООО Югорск" and [Материал]="Скальный грунт" and month(Дата)<=month(#23/03/2006#) and year(Дата)<=year(#23/03/2006#);
21 май 06, 22:25    [2689279]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
WHERE (Month([Дата])<8) and (Year([Дата])<=2006);
21 май 06, 22:29    [2689286]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
NG
WHERE (Month([Дата])<8) and (Year([Дата])<=2006);

Да и вообще... Во-первых, не 8, а 23. Во-вторых, если имелось в виду, что дата должна быть раньше такого-то месяца, то это пишется не так.
22 май 06, 00:04    [2689418]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Владимир Саныч

Да и вообще... Во-первых, не 8, а 23. Во-вторых, если имелось в виду, что дата должна быть раньше такого-то месяца, то это пишется не так.

Неа, Владимир Саныч... он цифирки правильно расставил. а то, что у меня стоит сразу дата, заключенная в "#", так это потому, что это выражение формирует готовая функция. Затем запрос будет удален ,после того следующая функция раскидает материалы. В коде это выглядит так:
Option Compare Database
Option Explicit

Public db As Database, qd As QueryDef, rs As Recordset
'Создаю тип данных "Материал"
Type Материал
    №Документа As Integer
    ДатаПоставки As Date
    Контрагент As String
    Объект As String
    НаименованиеМатериала As String
    ЕдИзм As String
    Количество As Double
    ЦенаЕд As Currency
End Type

Public Function DateConvert(Дата As Date) As String
Dim strДата As String, strNewData As String
strДата = CDate(Дата)
strNewData = "#" & Left(strДата, 2) & "/" & Mid(strДата, 4, 2) & "/" & Mid(strДата, 7, 4) & "#"
DateConvert = strNewData
End Function

'Функция делает выборку для указанного объекта "Материал" всех записей из Накладных,
'отписанных не позднее отчетного месяца, причем списанные материалы игнорируются
'На выходе дает количество найденных записей
Public Function ПоискМатериала(Материал As Материал, Таблица As String) As Long
Set db = CurrentDb
'Создаю новый запрос и сохраняю его в базе данных
Set qd = db.CreateQueryDef("Поиск по Наименованию")
qd.SQL = "select " & "[№ накладной], " & "[Дата], " & "[Контрагент], " & "[Материал], " & "[Ед изм], " & "[Количество], " _
& "[Цена ед] " & " from " & Таблица & " where " _
& "[Контрагент]=" & Chr(34) & Материал.Контрагент & Chr(34) & " and " _
& "[Материал]=" & Chr(34) & Материал.НаименованиеМатериала & Chr(34) _
 & " and month(Дата)<=month(" & DateConvert(Материал.ДатаПоставки) & ")" _
 & " and year(Дата)<=year(" & DateConvert(Материал.ДатаПоставки) & ")" _
& " and Списан = false ;"
Set rs = qd.OpenRecordset(dbOpenDynaset)
rs.MoveLast
ПоискМатериала = rs.RecordCount
End Function

22 май 06, 00:34    [2689440]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Compositum
Неа, Владимир Саныч... он цифирки правильно расставил.

Где же правильно? #23/03/2006# - это 3 число 23 месяца. См. фак!

Compositum
из Накладных, отписанных не позднее отчетного месяца

Вот-вот. И формула тоже не та. Если и год, и месяц проверять на "меньше", то неправильно будут обрабатываться даты, в которых год меньше, а месяц нет. Например, если отчетный месяц март 2006, то декабрь 2005 должен пройти, но он не пройдет. Правильная проверка такая:

(месяц < ... И год = ...) ИЛИ год < ...
22 май 06, 11:22    [2690323]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Владимир Саныч
Где же правильно? #23/03/2006# - это 3 число 23 месяца. См. фак!

насколько я помню, у америкосов идет сначала месяц, а потом день
22 май 06, 13:10    [2691065]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
Compositum
Member

Откуда: Санкт-Петербург
Сообщений: 5954
Владимир Саныч
Вот-вот. И формула тоже не та. Если и год, и месяц проверять на "меньше", то неправильно будут обрабатываться даты, в которых год меньше, а месяц нет. Например, если отчетный месяц март 2006, то декабрь 2005 должен пройти, но он не пройдет. Правильная проверка такая:

(месяц < ... И год = ...) ИЛИ год < ...

Согласен. Вы абсолютно правы.
22 май 06, 13:12    [2691078]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
ну ты даешь...
Guest
Compositum
Владимир Саныч
Где же правильно? #23/03/2006# - это 3 число 23 месяца. См. фак!

насколько я помню, у америкосов идет сначала месяц, а потом день

Тебе на это и намекнули ваще-то....
22 май 06, 13:12    [2691080]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией (Month("Дата"))  [new]
4321
Member [заблокирован]

Откуда:
Сообщений: 3573
Compositum
Владимир Саныч

(месяц < ... И год = ...) ИЛИ год < ...

Согласен. Вы абсолютно правы.

неа , "аппсалютно неправы" (не в смысле логики, а в смысле "юзабилити")
правильно, с точки зрения быстродействия (использования индекса по полю [дата])
[дата]<ПервыйДеньМесяца([дата-условие])
где выражение ПервыйДеньМесяца([дата-условие]) возвращает значение с типом дата.


но если нас интересует групировка по месяцам независимо от года - т.е., скажем, по всем январям пятилети, - то да придется забить на индекс по [дата]
22 май 06, 13:28    [2691192]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить