powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO 3.6 - гадина
25 сообщений из 28, страница 1 из 2
DAO 3.6 - гадина
    #32228238
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовал в одном из полей запроса на выборку пользовательскую функцию, вычисляющую возраст из даты рождения. Все было хорошо, пока не подключил DAO 3.6. Во всех записях в поле одно и тоже - Error#. Удалил ссылку на DAO 3.6 и подцепил DAO 2.5/3.51. Все работает нормально.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228254
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
экстрасексов ждешь?
может код покажешь?
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228258
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заодно и версию акеса назвать не помешало, ну про код уже было сказано
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228331
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access 2000 SR1, MDAC 2.7

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Function CalculateAge(varDob As Variant) As Variant
' Return the number of full years'
On Error GoTo Er
  Dim intAge As Integer
  
  If IsDate(varDob) Then
    intAge = Year(Date) - Year(varDob)
    Select Case Month(Date) - Month(varDob)
      Case  0 
        If Day(Date) < Day(varDob) Then
          intAge = intAge -  1 
        End If
      Case Is <  0 
        intAge = intAge -  1 
    End Select
    CalculateAge = intAge
  Else
    CalculateAge = Null
  End If
Ex:
Exit Function
Er:
  'ErrorLog "modDate", "CalculateAge", Err.number, Err.Description'
GoTo Ex
End Function
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228344
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Albert Gor

Нормальная функция - ты бы проект откомпилировал - посмотрел на ошибки.
Поставь точку остановки в свою функцию - посмотри что там происходит.

>Во всех записях в поле одно и тоже - Error#.

Записи где? В запросе? Тогда и его текст гони
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228352
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле может дело в синтаксисе.
мелкомягкие могли в 3,6 поменять синтаксис какой-то из используемых
функций и привет.
Согласен с Senin Viktor поставь брекпоинт и посмотри на какой строке
затыкается.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228353
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А почему не DateDiff???
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228362
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так не проще ?
age=Year(date - birthdate) - 1900
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228365
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч как всегда в самую точку
Голова
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228373
Можно проще:Date()-[ДатаРождения].
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228376
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Вадим (Львов):
не, ну это уж слишком.
сам-то пробовал.

2 VIG
и вам наше с кисточкой
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228387
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Вадим
1.Ему же нужен возраст
2. Посмотри что выводит Debug.Print CDate(Date - #любая_дата#)
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228388
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Строго говоря, я не прав. DateDiff, если надо в полных годах, округляет неправильно. Но все равно можно короче:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Function CalculateAge(varDob As Variant) As Variant
' Return the number of full years'
On Error GoTo Er
  Dim intAge As Integer
  
  If IsDate(varDob) Then
    intAge = Year(Date) - Year(varDob)
    If Date < DateSerial(Year(Date), Month(varDob), Day(varDob)) Then intAge = intAge -  1 
    CalculateAge = intAge
  Else
    CalculateAge = Null
  End If
Ex:
Exit Function
Er:
  'ErrorLog "modDate", "CalculateAge", Err.number, Err.Description'
GoTo Ex
End Function
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228415
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT CalculateAge([Ind_DoB]) AS Age FROM tblInd


Проект компилится. Функция сама по себе работает корректно. ERROR# вылезает только в полях запроса. И только при ссылке на DAO 3.6 :(

2 Владимир Саныч

Спасибо. А ей (DateSerial) можно доверять? :)
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228444
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Спасибо.

Это частное спасибо, потому что основной вопрос еще не решен.

> А ей (DateSerial) можно доверять?

Абсолютно. Более того, если ей дать несуществующую дату, например 29 февраля невисокосного года, то она это съест и переведет в существующую.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228447
To VIG:возраст из даты рождения (это цитата)
To sasha_1:
Использую в форме "сотрудники". В одном поле ввожу дату рождения, в другом - =Date()-[ДатаРождения].
Я конечно дико извиняюсь, но в поле аккуратно выводится возраст.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228451
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Вадим:

Но это получается в днях. А нужно в годах.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228473
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поделить на 365.25 - и всех делов :)
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228478
То Владимир Саныч:
Именно в годах. На свойство "формат поля" - уу.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228492
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Поделить на 365.25 - и всех делов :)

Ну, плюс-минус...

> На свойство "формат поля" - уу.

Ух ты!!! И правда. 8^)
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228506
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> На свойство "формат поля" - уу
И чем это проще чем
Year(date - birthdate) - 1900 ?
Кроме того это универсальное выражение которую можно использовать в запросах без предварительного/последующего форматирования.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228524
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
?# 01 / 01 / 2003 # - # 12 / 31 / 2002 #
  1  
? Year(# 01 / 01 / 2003 # - # 12 / 31 / 2002 #) 
  1899  
? Year(# 01 / 01 / 2003 # - # 12 / 31 / 2002 #) -  1900  
- 1  
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228549
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снимается. На другом компе все работает и с DAO 3.6. Попробую переустановить офис.
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228573
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если тебе
нужжен возраст
посчитать
то табе
DateDiff("yyyy",dtmBD, date())+(date()<dateserial(year(date()),month(dtmBD),day(dtmBD)))
...
Рейтинг: 0 / 0
DAO 3.6 - гадина
    #32228611
Фотография Albert Gor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает! Спасибо, Хам Трамвайный.
Код: plaintext
DateDiff( "yyyy" ,dtmBD, date())+(date()<dateserial(year(dtmBD),month(dtmBD),day(dtmBD)))
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO 3.6 - гадина
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]