Как вставить текущую дату в форму и в таблицу через выражения при добавлении новой записи

Как вставить текущую дату в форму и в таблицу через выражения при добавлении новой записи

Как вставить текущую дату в форму и в таблицу через выражение(построитель выражений) при добавлении новой записи?

В приложенном примере реализовано добавление текущей даты только в форму.

При создании новой записи добавлять текущую дату в предыдущую запись
есть две таблицы №1 Услуги "услуги", "дата","цена услуги на дату" цена на каждую услугу может.

Как с помощью ASP вставить текущую дату в таблицу MS Access 97?
Как с помощью ASP вставить текущую дату в таблицу MS Access 97, если формат поля в таблице.

Как вставить текущую дату через SQL.
Как вставить дату в поле Date MS Access через запрос SQL. Если использовать insert into .

Ошибка при добавлении из подчиненной формы новой записи в таблицу
Помогите исправить ошибку. База данных создана для ввода информации по договорам и приложениям к.

mobile,
Некорректно сформулировал.
имел ввиду: дата и время.
В предложенном вами решении подставляется время предыдущей записи.

Не могли бы вы подсказать как сделать с учетом приведённого выше условия

Понимаю. Требуется «Дата и время» в формате как на скринах

Можно ли это сделать через «Построитель выражений» и как?

Eugene-LS,
В сообщении #2 это и реализовано.
Я так тоже пробовал.

Но у этого решения недостаток: оно вставляет «время» предыдущей записи, а не новой.

как это сделать правильно?

А вот тут я уже не понял.
Функций Now() — возвращает текущий Датер и Времел.
Может вы его используете не там где нужно?

Зачастую достаточно указать в конструкторе формы у поля:
DefaultValue Property = Now()
И всё.

Хоть вопрос и не ко мне — встряну (извиняйте)
Можно — но очень частично и путано.

Лучше использовать средства VBA — и нет там ничего сложного.

Весь VBA — это прибл. 300 правил и встроенных функций — совсем не сложно.
Да! он расширяется за счёт API и подключаемых библиотечек — но это уже другая тема.

По умолчанию у вас объектная модель MSA + DAO, что вполне достаточно для решения большинства задачек.

mobile,
Хотел бы ещё раз вернуться к этому вопросу.
Уточню(дополню): требуется, чтобы при добавлении новой записи фиксировалось Дата и время добавления

Прокомментирую предложенные вами решения.

Решение №1. Пост #2
Вставить дату время.
Установить для поля «data_time» значение по умолчанию «Now()»

Недостаток.
Сценарий:
1. Исходное положение.
Строка для новой записи уже имеет Дату/время 21:56:28
2. Добавление записи.
На момент добавления записи «name_12» системное время 21:59:39.
Но т.к. мы добавляем запись в готовую строку, то для записи «name_12»
фиксируется время предыдущей записи 21:56:28.

Недостаток то, что для новой записи фиксируется время предыдущей записи.

Решение №2. Пост #9
Недостаток: при обновлении поля «tb1_id» обновляется и Дата/время.

Чтобы не было путаницы сделал новый файл. Прилагаю.

Попытался применить в новом файле Решение №2, повесив на обновление поля «id» (со счётчиком), но не работает.

Вопрос
Как сделать чтобы при добавлении новой записи фиксировалось текущая Дата и текущее время в формате ДД:ММ:ГГГГ ЧЧ:ММ?

Источник:
http://www.cyberforum.ru/ms-access/thread2018534.html

Вставка текущей даты с помощью элемента управления «Выбор даты»

Чтобы вставить текущую дату в форме Access, воспользуйтесь элементом выбора даты. Если поле обозначено как поле даты и времени, при щелчке в нем появляется значок «Выбор даты». Щелкните его, а затем нажмите кнопку Сегодня под календарем.

Сочетание клавиш. Чтобы вставить текущую дату в выбранное поле классической базы данных Access, одновременно нажмите клавиши CTRL и точку с запятой (;).

Дополнительные сведения о добавлении полей даты и времени в таблицу можно найти в разделе Создание поля для хранения значений даты и времени. Дополнительные сведения о формах можно найти в разделе Создание формы Access.

Вставка значения по умолчанию для новых элементов

Большинство полей и элементов управления Access имеют свойство Значение по умолчанию, где можно ввести функцию, которая вставляет текущую дату каждый раз при создании нового элемента. Функция Now() используется для вставки текущей даты и времени и в классической базе данных, и в веб-приложении Access. Если необходимо вставить только дату, используйте функцию Date() в классической базе данных или функцию Today() в веб-приложении Access.

Куда вводить функцию?

Выберите необходимую процедуру, исходя из типа объекта, который необходимо изменить. Обратите внимание, что при установке значения по умолчанию в таблице, это значение будет применено ко всем формам и представлениям на основе таблицы, поэтому этот метод обычно является предпочтительным.

Вот как найти свойство «Значение по умолчанию» в таблице классической базы данных или веб-приложения Access:

Если область навигации не открыта, нажмите F11, чтобы открыть ее.

В области навигации щелкните таблицу правой кнопкой мыши и выберите пункт «Конструктор».

Щелкните поле, для которого необходимо установить значение по умолчанию, а затем в его свойствах, в поле Значение по умолчанию, введите =Date(), =Today() или =Now().

В форме (базы данных на компьютере)

Если область навигации не открыта, нажмите F11, чтобы открыть ее.

В области навигации щелкните форму правой кнопкой мыши и выберите пункт «Режим макета».

Выберите поле, в которое необходимо вставить сегодняшнюю дату.

Если окно свойств не открыто, нажмите F4, чтобы открыть его.

Убедитесь, что на вкладке все окна свойств в свойстве Показать выбор даты задано значение даты.

На странице свойств на вкладке «Данные» введите =Date() в поле свойства Значение по умолчанию.

Примечание: Если необходимо включить не только текущую дату, но и время, используйте функцию Now() вместо функции Date(). Вам также может понадобиться настроить свойство Формат поля (на вкладке Формат окна свойств), чтобы настроить отображение времени.

В верхней части отчета

Чтобы отобразить текущую дату в заголовке отчета (только для баз данных на компьютере), откройте отчет в режиме макета, а затем на вкладке Конструктор нажмите кнопку Дата и время.

Дополнительные сведения о создании отчетов см. в статье Основные сведения об отчетах в Access.

Чтобы заменить значение в поле даты текущей датой в классической базе данных Access, можно использовать запрос на обновление. Например:

UPDATE TASKS SET StartDate = Date() WHERE ID=1;

Дополнительные сведения о запросах на обновление см. в статье Создание и запуск запроса на обновление.

Чтобы вставить новую запись с текущей датой, используйте запрос на добавление, как показано в примере:

INSERT INTO TASKS ( TaskTitle, StartDate ) VALUES («Task2», Date());

Дополнительные сведения о запросах на добавление см. в статье Добавление записей в таблицу с помощью запроса на добавление.

Примечание: Если необходимо включить не только текущую дату, но и время, используйте функцию Now() вместо функции Date().

Читайте также  Как сделать дерево в access?

Источник:
http://support.microsoft.com/ru-ru/office/%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0-%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B9-%D0%B4%D0%B0%D1%82%D1%8B-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2%D1%8B%D0%B1%D0%BE%D1%80-%D0%B4%D0%B0%D1%82%D1%8B-ff6c27e8-8a35-4a15-b053-39fb03778904

Как сделать дату в access?

как правильно задавать Дату и ДатуВремя в SQL запросах в Access? К БД подключаюсь при помощи ADO.. Не понятно мне вот что: При добавлении новой записи в таблицу, я делаю так:

Дата:

INSERT INTO table (t_date)
VALUE («27.10.2008»)

ДатаВремя:

INSERT INTO table (t_datetime)
VALUE («27.10.2008 21:30:00»)

Вобщем формат Даты и ДатыВремени такой.. И все работает..

А вот если нужно сравнить дату, например:

SELECT *
FROM table
WHERE table.t_datetime = «27.10.2008 21:30:00»

то уже возникает ошибка..


Stas © ( 2008-05-27 15:45 ) [1]

#27.10.2008 21:30:00# помоему так.


MsGuns © ( 2008-05-27 15:55 ) [2]

Использовать параметрические запросы


Anatoly Podgoretsky © ( 2008-05-27 15:58 ) [3]

> MsGuns (27.05.2008 15:55:02) [2]

Бесполезно сравнивать числа с плавающей запятой на абсолютную точность.


MsGuns © ( 2008-05-27 16:07 ) [4]

>Anatoly Podgoretsky © (27.05.08 15:58) [3]
>Бесполезно сравнивать числа с плавающей запятой на абсолютную точность.

А причем здесь «числа с плавающей запятой» ?

только не понятно еще, где-то накопал в интернете что нужно так: месяц/день/год хотя работает как я написал.. непонятно что-то..


Anatoly Podgoretsky © ( 2008-05-27 16:23 ) [6]

> MsGuns (27.05.2008 16:07:04) [4]

А в Акцесс хранится именно в этом формате, совпадает с TDateTime


MsGuns © ( 2008-05-27 16:40 ) [7]

>Dmitry_177 (27.05.08 16:19) [5]
>где-то накопал в интернете что нужно так: месяц/день/год хотя работает как я написал.. непонятно что-то..


palva © ( 2008-05-27 16:48 ) [8]

По правилам нужно так #месяц/день/год#
Если Access обнаруживает, что дата невалидная он пробует поменять местами месяц и день.


Anatoly Podgoretsky © ( 2008-05-27 16:52 ) [9]

> palva (27.05.2008 16:48:08) [8]

Когда меняет не страшно, страшно когда не меняет и ничего не говорит.

хм.. тут наверно может быть тогда ошибка..(((

вот к примеру наша дата 27.10.2008.. 27-го меся не бывает, поэтому меняет местами и все ок.. а будет такая 12.10.2008 дата? Access запишет ее как 12 октября или 10 декабря?


palva © ( 2008-05-27 18:27 ) [11]


> Access запишет ее как 12 октября или 10 декабря?

Вы хотите, чтобы мы для вас попробовали?


Anatoly Podgoretsky © ( 2008-05-27 21:44 ) [12]

Пусть сначала моральный ущерб оплатит.


Правильный_Вася ( 2008-05-27 22:21 ) [13]

использовать параметры в запросах
тогда никаких многозначностей не будет


Dmitry_177 ( 2008-05-28 11:14 ) [14]

Еще вопрос.. А как сравнить ДатаВремя с Датой?

ДатаВремя — 27.10.2008 21:30:00
и Дата — 27.10.2008

вот нужно сравнить только дату, попробовал сделать так:

SELECT * FROM table
WHERE t_datetime = #27/10/2008#

не сравнивается.. помогите


Dmitry_177 ( 2008-05-28 11:39 ) [16]

SELECT * FROM table
WHERE t_datetime BETWEEN (#27/10/2008 00:00:00#, #27/10/2008 23:59:59#)


Dmitry_177 ( 2008-05-28 11:40 ) [17]

т.е. так:
SELECT * FROM table
WHERE t_datetime BETWEEN #27/10/2008 00:00:00# AND #27/10/2008 23:59:59#


DiamondShark © ( 2008-05-28 14:19 ) [18]


> т.е. так:
> SELECT * FROM table
> WHERE t_datetime BETWEEN #27/10/2008 00:00:00# AND #27/10/2008
> 23:59:59#

Лучше так:
WHERE t_datetime >= #27/10/2008 00:00:00# AND t_datetime


Dmitry_177 ( 2008-05-28 23:59 ) [19]

А при добавлении записи:

INSERT INTO table (t_datetime)
VALUE («27.10.2008 21:30:00»)

правильней будет тоже месяц/день/год ?


Palladin © ( 2008-05-29 07:58 ) [20]

правильней (относительно) будет

q.SQL.Text:=»insert into table (t_datetime) values (:PDateTime)»;
q.Parameters.ParamByName(«PDateTime»).Value:=Date;
q.ExecSQL;

ну или то, что предложит sniknik :), но с тем же подходом с параметром.


Anatoly Podgoretsky © ( 2008-05-29 16:50 ) [21]

> Dmitry_177 (28.05.2008 11:40:17) [17]

Это не дает гарантии, что в условие попадут все записи за 27,10,2008 более того в текстовом виде вообще возможны разные сюрпризы.

Источник:
http://delphimaster.net/view/3-1211888660

Конференция VBStreets

Весь вкус программирования!

  • Список форумовПлатформы и технологииБазы данных
  • Изменить размер шрифта
  • FAQ
  • Вход

Даты в access

Даты в access

Forlaw » 12.08.2007 (Вс) 17:07

1. Есть таблица с объектами недвижимости.
2. Объект определяется по его ID(«ID Объекта»)
3. У объектов есть дата окончания(«Дата окончания»)
4. С помощью запроса выбираем все записи, где дата окончания меньше или равна текущей дате.
5. Переходим на первую запись
6. Если дата окончания меньше или равна 7(«семи»), то записываем «ID Объекта» текущей записи в массив.
7. Идём на след. запись.(цикл до .eof)

8. Выдаём предупреждение, мол «Срок у некоторых объектов скоро заканчивается»
9. Открываем форму только с теми записями, где «ID Объекта»=данным из массива.

Private Sub Form_Open(Cancel As Integer)
Dim okdate, okdate2, msg, dt, df, d, m, y As String
Dim ssd As Date
Dim ar As String ‘массив должен быть, наверно
okdate = DateValue(Now()) ‘В запросе два поля «ID Объекта» и «Дата окончания», где «Дата окончания» >= [N]

With CurrentDb.QueryDefs(«Дата окончания»)
.Parameters(«N») = okdate
With .openrecordset
If Not .EOF Then
.MoveFirst
Do
dt = .Fields(«Дата окончания»)
d = Nz(Left(dt, 2), «») `день
m = Nz(Mid(dt, 4, 2), «») `месяц
y = Nz(Right(dt, 4), «») `год (правильно?)
ssd = d & «.» & m & «.» & y
df = DateDiff(«d», ssd, Now) `определили, вроде, разницу в днях между текущей датой и датой окончания

dormouse » 12.08.2007 (Вс) 21:00

а не проще ли фильтр по дате написать прямо в строке фильтра самой формы?

ну, а если процедуру, то так:

Код: Выделить всё
Dim ar as String
If ar = «» Then
ar = «[ID Объекта]=» & .Fields(«ID Объекта»)’фильтр формируется для одного значения поля
Else
ar = ar & » or [ID Объекта]=» & .Fields(«ID Объекта»)’добавляются ещё значения, если они есть
End If

DoCmd.OpenForm «объект», , ar

ps:
выключил комп и подумал, а что такое 7?
2007 год? а 1 января 2008 ты семёрку будешь заменять на восьмёрку?
неее. это не по-нашему

тогда делай рекордсет на основе Код: Выделить всё
SELECT Объект.[ID Объекта]
FROM Объект
WHERE ((Year([Дата окончания])>=Year(Now())));

потом
Код: Выделить всё if Not (rst.EOF) Then ‘рекордсет вернул некоторое количество записей с 2007 или более поздними годами
MsgBox бла-бла
.
DoCmd.OpenForm «Объект», , «(Year([Дата окончания])>=Year(Now()))»

Forlaw » 12.08.2007 (Вс) 21:21

не, так не получится.
надо сначала массив заполнить(как, не знаю)
а потом открыть форму не с OR, а AND

В вашем варианте, всего два варианта возможно

либо с последней записью откроется форма(как сейчас есть)
либо х.з. что получится)))
Тут цикл, что ли нужен..

ar = ar & » or [ID Объекта]=» & .Fields(«ID Объекта»)’добавляются ещё значения, если они есть

Добавляется ещё одно значение, вроде как.

dormouse » 12.08.2007 (Вс) 21:46

я и привёл кусок кода, где формируется «массив» ar. строка это, где через Or перечисляются значения поля [ID объекта]. с And как раз ничего и не выйдет. не может восьмёрка одновременно равняться пятёрке и девятке

Читайте также  Access нумерация строк в запросе
[/quote]
так это будет:
вставка кода сделана обычным текстом, так что не могу точно отследить вложенность
Код: Выделить всё
If df

а вообще лучше использовать прямой фильтр по дате, а не городить циклы со сравнениями

Forlaw » 12.08.2007 (Вс) 22:56

«7» это «df»
df = DateDiff(«d», ssd, Now)
результат функции. Т.е. разница в ДНЯХ, между «дата окончания» и «текущая дата»

Т.е. нужно сделать «будильник».
Если «срок окончания» меньше или равно «недели» (7 дней), то предупреждение.

Forlaw » 12.08.2007 (Вс) 22:59

SELECT Объект.[ID Объекта]
FROM Объект
WHERE ((Year([Дата окончания])>=Year(Now())));
не то, немного..

сделал по ТОЧНОЙ дате через параметр в запросе:
okdate = DateValue(Now())
With CurrentDb.QueryDefs(«Дата окончания»)
.Parameters(«N») = okdate

запрос:
SELECT Объекты.[Дата окончания], Объекты.[ID Объекта]
FROM Объекты
WHERE (((Объекты.[Дата окончания])>=[N]));

Forlaw » 12.08.2007 (Вс) 23:43

если по полочкам:

1. Есть ТАБЛИЦА
2. В ТАБЛИЦЕ есть поле «Дата окончания»
3. В ТАБЛИЦЕ есть поле «ID Объекта»
4. При загрузке базы(или формы, которая автоматом грузится) нужно найти все записи в ТАБЛИЦЕ, где ТЕКУЩАЯ ДАТА

Forlaw » 13.08.2007 (Пн) 1:03

alibek » 13.08.2007 (Пн) 8:18

dormouse » 13.08.2007 (Пн) 18:54

Forlaw:
1. на форуме в твоих сообщениях ты можешь видеть кнопочку
. пользуйся ею, если хочешь что-то добавить к своим сообщениям, на которые ещё никто не успел ответить. а то впечатление, что ты разговариваешь сам с собой

2. как занести в так называемый «массив» (тебе не нужен настоящий массив типа ar[0] as string) строку фильтра, я уже написал. вставь в свой цикл заполнение твоей ar перечнем значений через Or. а потом этот ar подставить, как фильтр в открытие формы. но этот путь бестолковый, имхо. запутывает и тебя и программу и, вообще, в корне не то, чего ты сам хочешь.

3. ты так и не подумал об организации фильтра по дате прямо в форме.
умеешь работать с Recorset’ом?
переделай вот так всю процедуру (мог наврать со знаками в сравнении — посмотришь):

Forlaw » 14.08.2007 (Вт) 13:56

Uza10775 » 13.12.2007 (Чт) 3:04

Источник:
http://bbs.vbstreets.ru/viewtopic.php?t=34008

Как сделать дату в access?

Свойство «Формат поля» (Format) — Поля даты/времени
Свойство Формат поля (Format) позволяет указать использование встроенных или специальных форматов для полей даты/времени.

Значение
Встроенные форматы
В следующей таблице приводятся встроенные значения свойства Формат поля (Format) для полей даты/времени.

Значение Описание
Полный формат даты (Значение по умолчанию.) Если значение содержит только дату, то время не отображается; если значение содержит только время, то дата не отображается. Данный формат является комбинацией двух: «Краткий формат даты» и «Длинный формат времени».
Примеры: 01.11.95 1:07:19 и 23.01.96 23:01:04.

Длинный формат даты Совпадает с настройкой «Полный формат», задающейся в диалоговом окне Язык и стандарты (панель управления Microsoft Windows).
Пример: 1 Июнь 1995 г.

Средний формат даты Пример: 03-апр-95.
Краткий формат даты Совпадает с настройкой «Краткий формат», задающейся в диалоговом окне Язык и стандарты (панель управления Microsoft Windows).
Пример: 11.06.95.

Внимание! При использовании значения краткого формата даты предполагается, что даты из диапазона 01.01.00 и 31.12.29 относятся к двадцать первому веку (то есть от 2000 до 2029 года). Также предполагается, что даты из промежутка 01.01.30 и 31.12.99 относятся к двадцатому веку (то есть от 1930 до 1999 года).

Длинный формат времени Совпадает с форматом времени, заданном на вкладке Время (панель управления Microsoft Windows, диалоговое окно Язык и стандарты).
Пример: 20:58:10.

Средний формат времени Пример: 05:34 PM.
Краткий формат времени Пример: 17:34.

Специальные форматы
Специальные форматы даты и времени создаются с помощью следующих символов.

Символ Описание
: (двоеточие) Разделитель компонентов времени. Знак разделителя задается в диалоговом окне Язык и стандарты (панель управления Microsoft Windows).
/ Разделитель компонентов даты.
c Задает встроенный «Полный формат даты».
d Номер дня месяца, состоящий из одной или двух цифр (1-31).
dd Номер дня месяца, состоящий из двух цифр (01-31).
ddd Сокращенное название дня недели (Пн-Вс).
dddd Полное название дня недели (понедельник-воскресенье).
ddddd Задает встроенный «Краткий формат даты».
dddddd Задает встроенный «Длинный формат даты».
w Номер дня недели (1-7).
ww Номер недели в году (1-53).
m Номер месяца, состоящий из одной или двух цифр (1-12).
mm Номер месяца, состоящий из двух цифр (01-12).
mmm Первые три буквы названия месяца (янв-дек).
mmmm Полное название месяца (Январь-Декабрь).
q Номер квартала в году (1-4).
y Номер дня в году (1-366).
yy Последние две цифры номера года (01-99).
yyyy Полный номер года (0100-9999).
h Число часов, состоящее из одной или двух цифр (0-23).
hh Число часов, состоящее из двух цифр (00-23).
n Число минут, состоящее из одной или двух цифр (0-59).
nn Число минут, состоящее из двух цифр (00-59).
s Число секунд, состоящее из одной или двух цифр (0-59).
ss Число секунд, состоящее из двух цифр (00-59).
ttttt Задает встроенный «Длинный формат времени».
AM/PM 12-часовой формат времени с добавлением прописных букв «AM» или «PM».
am/pm 12-часовой формат времени с добавлением строчных букв «am» или «pm».
A/P 12-часовой формат времени с добавлением прописных букв «A» или «P».
a/p 12-часовой формат времени с добавлением строчных букв «a» или «p».
AMPM 12-часовой формат времени; используется индикатор «утро/день», выбранный в диалоговом окне Язык и стандарты (панель управления Microsoft Windows).

Специальные форматы выводятся в соответствии со значениями, установленными в диалоговом окне Язык и стандарты (панель управления Microsoft Windows). Специальные форматы, противоречащие настройкам диалогового окна Язык и стандарты, игнорируются.

Примечание. Для добавления в специальный формат запятой или другого знака разделителя следует ввести этот знак в кавычках: mmm d», «yyyy.

Пример
Ниже приведены примеры специальных форматов даты и времени.

Значение Вид на экране
ddd», «mmm d», «yyyy Пн, июн 2, 1997
mmmm dd», «yyyy Июнь 02, 1997
«Номер текущей недели — «ww Номер текущей недели — 22
«Сегодня «dddd Сегодня четверг

Источник:
http://forum.vingrad.ru/topic-15203.html

Конференция VBStreets

Весь вкус программирования!

  • Список форумовПлатформы и технологииБазы данных
  • Изменить размер шрифта
  • FAQ
  • Вход

Даты в access

Даты в access

Forlaw » 12.08.2007 (Вс) 17:07

1. Есть таблица с объектами недвижимости.
2. Объект определяется по его ID(«ID Объекта»)
3. У объектов есть дата окончания(«Дата окончания»)
4. С помощью запроса выбираем все записи, где дата окончания меньше или равна текущей дате.
5. Переходим на первую запись
6. Если дата окончания меньше или равна 7(«семи»), то записываем «ID Объекта» текущей записи в массив.
7. Идём на след. запись.(цикл до .eof)

8. Выдаём предупреждение, мол «Срок у некоторых объектов скоро заканчивается»
9. Открываем форму только с теми записями, где «ID Объекта»=данным из массива.

Private Sub Form_Open(Cancel As Integer)
Dim okdate, okdate2, msg, dt, df, d, m, y As String
Dim ssd As Date
Dim ar As String ‘массив должен быть, наверно
okdate = DateValue(Now()) ‘В запросе два поля «ID Объекта» и «Дата окончания», где «Дата окончания» >= [N]

Читайте также  Как сделать таблицу в access 2016?

With CurrentDb.QueryDefs(«Дата окончания»)
.Parameters(«N») = okdate
With .openrecordset
If Not .EOF Then
.MoveFirst
Do
dt = .Fields(«Дата окончания»)
d = Nz(Left(dt, 2), «») `день
m = Nz(Mid(dt, 4, 2), «») `месяц
y = Nz(Right(dt, 4), «») `год (правильно?)
ssd = d & «.» & m & «.» & y
df = DateDiff(«d», ssd, Now) `определили, вроде, разницу в днях между текущей датой и датой окончания

dormouse » 12.08.2007 (Вс) 21:00

а не проще ли фильтр по дате написать прямо в строке фильтра самой формы?

ну, а если процедуру, то так:

Код: Выделить всё
Dim ar as String
If ar = «» Then
ar = «[ID Объекта]=» & .Fields(«ID Объекта»)’фильтр формируется для одного значения поля
Else
ar = ar & » or [ID Объекта]=» & .Fields(«ID Объекта»)’добавляются ещё значения, если они есть
End If

DoCmd.OpenForm «объект», , ar

ps:
выключил комп и подумал, а что такое 7?
2007 год? а 1 января 2008 ты семёрку будешь заменять на восьмёрку?
неее. это не по-нашему

тогда делай рекордсет на основе Код: Выделить всё
SELECT Объект.[ID Объекта]
FROM Объект
WHERE ((Year([Дата окончания])>=Year(Now())));

потом
Код: Выделить всё if Not (rst.EOF) Then ‘рекордсет вернул некоторое количество записей с 2007 или более поздними годами
MsgBox бла-бла
.
DoCmd.OpenForm «Объект», , «(Year([Дата окончания])>=Year(Now()))»

Forlaw » 12.08.2007 (Вс) 21:21

не, так не получится.
надо сначала массив заполнить(как, не знаю)
а потом открыть форму не с OR, а AND

В вашем варианте, всего два варианта возможно

либо с последней записью откроется форма(как сейчас есть)
либо х.з. что получится)))
Тут цикл, что ли нужен..

ar = ar & » or [ID Объекта]=» & .Fields(«ID Объекта»)’добавляются ещё значения, если они есть

Добавляется ещё одно значение, вроде как.

dormouse » 12.08.2007 (Вс) 21:46

я и привёл кусок кода, где формируется «массив» ar. строка это, где через Or перечисляются значения поля [ID объекта]. с And как раз ничего и не выйдет. не может восьмёрка одновременно равняться пятёрке и девятке

[/quote]
так это будет:
вставка кода сделана обычным текстом, так что не могу точно отследить вложенность
Код: Выделить всё
If df

а вообще лучше использовать прямой фильтр по дате, а не городить циклы со сравнениями

Forlaw » 12.08.2007 (Вс) 22:56

«7» это «df»
df = DateDiff(«d», ssd, Now)
результат функции. Т.е. разница в ДНЯХ, между «дата окончания» и «текущая дата»

Т.е. нужно сделать «будильник».
Если «срок окончания» меньше или равно «недели» (7 дней), то предупреждение.

Forlaw » 12.08.2007 (Вс) 22:59

SELECT Объект.[ID Объекта]
FROM Объект
WHERE ((Year([Дата окончания])>=Year(Now())));
не то, немного..

сделал по ТОЧНОЙ дате через параметр в запросе:
okdate = DateValue(Now())
With CurrentDb.QueryDefs(«Дата окончания»)
.Parameters(«N») = okdate

запрос:
SELECT Объекты.[Дата окончания], Объекты.[ID Объекта]
FROM Объекты
WHERE (((Объекты.[Дата окончания])>=[N]));

Forlaw » 12.08.2007 (Вс) 23:43

если по полочкам:

1. Есть ТАБЛИЦА
2. В ТАБЛИЦЕ есть поле «Дата окончания»
3. В ТАБЛИЦЕ есть поле «ID Объекта»
4. При загрузке базы(или формы, которая автоматом грузится) нужно найти все записи в ТАБЛИЦЕ, где ТЕКУЩАЯ ДАТА

Forlaw » 13.08.2007 (Пн) 1:03

alibek » 13.08.2007 (Пн) 8:18

dormouse » 13.08.2007 (Пн) 18:54

Forlaw:
1. на форуме в твоих сообщениях ты можешь видеть кнопочку
. пользуйся ею, если хочешь что-то добавить к своим сообщениям, на которые ещё никто не успел ответить. а то впечатление, что ты разговариваешь сам с собой

2. как занести в так называемый «массив» (тебе не нужен настоящий массив типа ar[0] as string) строку фильтра, я уже написал. вставь в свой цикл заполнение твоей ar перечнем значений через Or. а потом этот ar подставить, как фильтр в открытие формы. но этот путь бестолковый, имхо. запутывает и тебя и программу и, вообще, в корне не то, чего ты сам хочешь.

3. ты так и не подумал об организации фильтра по дате прямо в форме.
умеешь работать с Recorset’ом?
переделай вот так всю процедуру (мог наврать со знаками в сравнении — посмотришь):

Forlaw » 14.08.2007 (Вт) 13:56

Uza10775 » 13.12.2007 (Чт) 3:04

Источник:
http://bbs.vbstreets.ru/viewtopic.php?t=34008