Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access VBA

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Открыть новую тему     Написать ответ в эту тему

Guest

BANNED
Редактировать | Цитировать | Сообщить модератору
   
 
Обсуждаем вопросы только по Access VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.

 

NB! Дублирующая тема VBA for Access закрыта во избежание путаницы. Оставлена эта, как более ранняя и имеющая больше сообщений.

Смежные темы:
Помощь в создании SQL-запросов: SQL запрос
Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
Программы » Word FAQ | Excel FAQ | Access FAQ
Прикладное программирование » Word VBA | Excel VBA
Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007
----------
Как в Access перместить запись из одной таблицы в другую (допустим по нажатию кнопки на форме)?

Отправлено: 18:31 05-09-2002 | Исправлено: ALeXkRU, 17:14 03-08-2021
wiwiw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DateDiff пробовали?

Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 10:04 09-02-2006
UncleYurka

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, помогите чайнику!
 
Есть поле со списком.  
Хотелось бы после выбора значения (Описано какая таблица и список полей и т.д)получить доступ к остальным полям этой же записи таблицы.
 
Я программировал на Clarion - там все без проблем, а вот жизнь заставила использовать Access - проблемы.
 
С уважением, Юрий.
 
Добавлено:
P.S. Желательно обойтись стандартными средствами

Всего записей: 85 | Зарегистр. 12-07-2004 | Отправлено: 20:31 09-02-2006
wiwiw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncleYurka
создай этот поле с помощью мастера. там будет опция : "поиск записи в форме на основе значения ..."
или сам обработай событие AfterUpdate
вот что генерирует мастер:

Код:
 
Private Sub ПолеСоСписком6_AfterUpdate()
    ' Поиск записи, соответствующей этому элементу управления.
    Dim rs As Object
 
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Код] = " & Str(Nz(Me![ПолеСоСписком6], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
 


Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 20:58 10-02-2006
vredinka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Твоя версия кода

Цитата:
IF я бы несколько упростил:  
If Month(DateToday) <= Month(Bdate) And Day(DateToday) < Day(Bdate)) Then

неправильная - по ней получается, если человек родился на месяц раньше, но на пару дней позже (извини за кривость, но надеюсь, поймёшь), то он входит в выборку.
 
MrZeRo

Цитата:
SELECT field_1, field_2, Age([birfday], [today]) as field_age, field_3, ...  
FROM table_1  
ORDER BY field_1    

Это в SQL-запросе писать? А он поймёт, откуда функцию Age брать? Она же не встроенная. Попробую.
 
Отрицательные величины я отсекла: вместо  
If DateToday < Bdate Then Age = 0:Exit Function  
(далее - DateToday=t и Bdate=b соответственно) пишу
If Year(t) < Year(b) Or Year(t) = Year(b) And Month(t) < Month(b) Or Year(t) = Year(b) And (Month(t) =  
 
Month(b) And Day(t) < Day(b)) Then Age = 0: Exit Function
 
А вот 2 и 3 года он по-прежнему считает больше 15 (видимо, сравнивает первые цифры). Что делать?
 

Всего записей: 19 | Зарегистр. 06-02-2006 | Отправлено: 09:22 12-02-2006
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vredinka
Вот это у вас:
If Month(DateToday) < Month(Bdate) Or (Month(DateToday) = Month(Bdate) And Day(DateToday) < Day(Bdate)) Then  
А вот это у меня:
If Month(DateToday) <= Month(Bdate) And Day(DateToday) < Day(Bdate)) Then  
По моему записи по логике идентичные.Моя просто несколько короче. Так что и результат должны выдавать один.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 09:34 12-02-2006
wiwiw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vredinka
dneprcomp
почему вы упорно не хотите использовать DateDiff и DateAdd?
код из МСДН:

Код:
 
Function CalcAge(dteBirthdate As Date) As Long
 
   Dim lngAge As Long
   
   ' Make sure passed-in value is a date.
   If Not IsDate(dteBirthdate) Then
      dteBirthdate = Date
   End If
   
   ' Make sure birthdate is not in the future.
   ' If it is, use today's date.
   If dteBirthdate > Date Then
      dteBirthdate = Date
   End If
   
   ' Calculate the difference in years between today and birthdate.
   lngAge = DateDiff("yyyy", dteBirthdate, Date)
   ' If birthdate has not occurred this year, subtract 1 from age.
   If DateSerial(Year(Date), Month(dteBirthdate), Day(dteBirthdate)) > Date Then
      lngAge = lngAge - 1
   End If
   CalcAge = lngAge
End Function
 
 
 

Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 16:20 12-02-2006
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wiwiw
Да я, собственно, всегда эту функцию использую Вот только разбираться, есть ли она в Access было просто лень

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:48 12-02-2006
vredinka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
По вашему коду ветка цикла считается только если выполняются ОБА условия (And): и месяц меньше и день. То есть если я считаю на 15 мая, а человек родился 26 мая, то по вашему коду он уйдёт на вторую ветку, где ELSE ему текущий год не вычтет, а по моей версии кода он останется в этой ветке и свою (-1) получит.
Присмотритесь. Может я совсем ничего не понимаю? Просчитайте варианты.
 
wiwiw
Спасибо. Не использовала потому, что не знала (А разве здесь DateAdd нужен?). Извините, но за основу (естессно) ваш код, с обозначениями:  
dteBirthdate=b, Date=t. t- вводится из формы и по умолчанию является текущей датой, но может быть изменена как в меньшую (для проверки беру 1985 год), так и в большую сторону.  
 
Public Function Age(b As Date, t As Date) As Long
   Dim lngAge As Long
If t < b Then t = b
   lngAge = DateDiff("yyyy", b, t)
If DateSerial(Year(t), Month(b), Day(b)) > t Then
    lngAge = lngAge - 1
End If
Age = lngAge
End Function
 
В таком виде функция работает, но вот назначение этого куска:
 
   If Not IsDate(dteBirthdate) Then  
      dteBirthdate = Date  
   End If  
 
мне не понятно, чего ради dteBirthdate = Date? Или в смысле, что если вместо дата рождения (а в моём случае и "искомая" дата) не в "датовском" формате, то присвоить им текущую дату, и тогда функция вместо ошибки выдаст на выходе ноль?
 
Всё это здорово, но вопрос остаётся открытым: почему при сравнении 66-летняя бабуля оказывается младше 7 лет и не попадает в выборку, а 2-3 годовалые дети попадают в запрос "старше 15"? Кто знает, в чём дело и что делать?

Всего записей: 19 | Зарегистр. 06-02-2006 | Отправлено: 08:36 13-02-2006
wiwiw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
мне не понятно, чего ради dteBirthdate = Date? Или в смысле, что если вместо дата рождения (а в моём случае и "искомая" дата) не в "датовском" формате, то присвоить им текущую дату, и тогда функция вместо ошибки выдаст на выходе ноль?

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

Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 14:06 13-02-2006
vredinka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wiwiw
Кажется, я нашла ошибку - сменила формат данных поля "Граничный возраст(letmore)" в форме на "Основной" - теперь работает как надо. Но на всякий случай:
 
SELECT DATI.Фамилия, DATI.Имя, DATI.Отчество, DATI.[Дата рождения], Age(DATI![Дата  
 
рождения],Forms!Формасдатой2!today) AS Возраст, *
FROM DATI
WHERE (((Age([DATI]![Дата  
 
рождения],[Forms]![Формасдатой2]![today]))>=[Forms]![Формасдатой2]![letmore]))
WITH OWNERACCESS OPTION;
 
Или лучше в запросе использовать функцю Clng? И на поле в форме маску наложить (для пользователей)?
 
Кстати, вы не знаете, не может ли так быть, что  на другом компе (перенесла базу), запрос перестаёт редактироваться? При попытке сохранить изменения выдаёт фразу "запись удалена!". Вернула на родной комп - без разницы. Пришлось запрос удалять и писать заново.

Всего записей: 19 | Зарегистр. 06-02-2006 | Отправлено: 21:31 13-02-2006
wiwiw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vredinka

Цитата:
Или лучше в запросе использовать функцю Clng? И на поле в форме маску наложить (для пользователей)?  
 

не повредит

Цитата:
Кстати, вы не знаете, не может ли так быть, что  на другом компе (перенесла базу), запрос перестаёт редактироваться? При попытке сохранить изменения выдаёт фразу "запись удалена!".

внутренние ошибки access.  народсоветует переустановить все что можно, поставить последние апдейты и т.д.

Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 01:11 14-02-2006
Muz_Tani



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может и не туда попал. Дурацкий вопрос, но я в Access пока чайник.
Дело вот в чём... Есть запрос и есть форма. Надо чтоб из поля со списком данные передавались  в поля "условие" запроса... Наверное это легко но я раздуплиться пока не могу. Помогите пожалуйста....

Всего записей: 14 | Зарегистр. 17-02-2005 | Отправлено: 10:10 17-02-2006
vredinka

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Muz_Tani
Я и сама почти "чайник", но попробуй так: ставь курсор в строку условия, нажимай на Построитель выражений, набирай нужное условие (больше, меньше и т.д.), потом выбираешь в левой колонке построителя папочку "Формы, в ней - свою форму. В средней колоночке появятся все доступные объектыэтой формы, из них выбери поле, значечие из которого тебе нужно. И, наконец - правая колонка, двойной клик по строчке <значение>. В поле построителя должно появиться что-то типа:

Код:
>=[Forms]![Форма1]![Поле4]

Жми ОК и проверяй

Всего записей: 19 | Зарегистр. 06-02-2006 | Отправлено: 00:07 18-02-2006
Linda



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Access 2002. Создание запроса.
 
Есть две таблицы с одинаковыми полями. Нужно объединить их по одному текстовому полю. Например:
 
Таблица1   Таблица2
 
название    название
     A                D
     B                A  
     C                C  
 
Результат запроса:
название
     A
     B
     C
     D
 
Inner Join выдет только совпадающие значения, Left и Right Join - соответственно.
 
Как организовать?
 

Всего записей: 162 | Зарегистр. 19-01-2004 | Отправлено: 02:29 18-02-2006 | Исправлено: Linda, 02:32 18-02-2006
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Linda
SELECT Table1.[Field1] FROM Table1 UNION SELECT Table2.[Field1] from Table2

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 06:36 18-02-2006 | Исправлено: dneprcomp, 06:38 18-02-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dneprcomp

Цитата:
SELECT Table1.[Field1] FROM Table1 UNION SELECT Table2.[Field1] from Table2

Я думаю этого мало будет, т.к. надо исключить повторяющиеся в разных таблицах А С и D, да ещё и отсортировать это всё.
 
Тут видимо имеет смысл создать VIEW по твоему запросу, и делать выборку из него с DISTINCT и ORDER BY.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 10:47 18-02-2006
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EZH
При тех данных, что привела Linda, результат точно, как запрашиваемый. Union само делает уникальную выборку. UNION ALL покажет и дубликаты. Добавить сортировку будет не сложно. Хотя у меня в Access отсортировало по умолчанию.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 12:15 18-02-2006
Linda



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EZH, dneprcomp, спасибки. Ща буду пробовать
 

Всего записей: 162 | Зарегистр. 19-01-2004 | Отправлено: 17:27 18-02-2006
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть таблица с полями Event_ID, Man_ID, Event_date, Order
Задача: сделать View, в котором для каждого Man_ID содержится Event_ID с максимальным Event_date (если несколько записей с одинаковым Event_date, среди них выбрать ту, у которой максимален Order).


----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 12:35 20-02-2006
Linda



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EZH, dneprcomp, все получилось  как надо только с помощью UNION. СПАСИБО!

Всего записей: 162 | Зарегистр. 19-01-2004 | Отправлено: 03:26 21-02-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access VBA


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru