Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450

Проверка данный в одной таблице и вставка в другую через форму

05.08.2016, 20:45. Показов 1251. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Есть таблица "Карта учета", в которую вносится одна запись с МКБ и есть таблица "Посещения врачей по МКБ" (это для учета посещений пациента с заболеваниями: заболевание одно, а посещений много).
2. Как сделать так, чтобы при набивке в таблица "Посещения врачей по МКБ" через форму в поле ""Д" учет" ставилось "ДА", если есть данные в таблице "Карта учета" и ставилось "НЕТ", если этих сведений там нет
3. В обоих таблицах есть одноименные поля: "Пациент", "МКБ"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.08.2016, 20:45
Ответы с готовыми решениями:

Вставка данных из одной таблицы в другую через форму
Такая вот проблема.Есть две формы на две таблицы соответственно.В таблицах совпадают столбцы "Модель". На первой форме есть...

Запрос к одной таблице через другую
SELECT `t1`.`id` as `fid`, `t1`.`name` as `name`, `t1`.`desc` as `desc` FROM `adcentre_forums` as `t1` WHERE `t1`.`view` = 1 Вот...

Копирование через буфер обмена из 2х полей формы и вставка данных в другую форму
Всем очень добрый день! Подскажите пожалуйста, можно ли реализовать одновременное копирование данных из 2-х полей формы и вставку этих...

18
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.08.2016, 21:12
Предположим, что у каждого пациента есть уникальный номер пациента. Тогда на событии После обновления (AfterUpdate) поля [Д Учет] в форме пишем
Visual Basic
1
2
3
4
5
6
7
Dim s
s="select * from [Карта учета] where [номер пациента]=" & me.[номер пациента]
If Not currentdb.openrecordset(s).EOF Then
  Me.[Д Учет]="Да"   'Или True если [Д Учет] это флажок
Else
  Me.[Д Учет]="НЕТ"  'Или False если [Д Учет] это флажок
End If
2
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 08:12  [ТС]
Я прописала как Вы посоветовали (там два условия для выборки)
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub ДУчет1_AfterUpdate()
Dim s
s = "select * from [КартаДУ] where [КодПациент]=" & Me.[Пациент] And [КодМКБ] = " & Me.[МКБ]"
If Not CurrentDb.OpenRecordset(s).EOF Then
  Me.[ДУчет1] = "Да" 'Или True если [Д Учет] это флажок
Else
  Me.[ДУчет1] = "НЕТ" 'Или False если [Д Учет] это флажок
End If
 
End Sub
Но обновления не происходит. Хотя в двух таблицах Пациент и МКБ совпадают
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 08:27
Visual Basic
1
s = "select * from [КартаДУ] where [КодПациент]=" & Me.[Пациент] & " And [КодМКБ] = " & Me.[МКБ]
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 08:38  [ТС]
Все равно не получается


0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 08:55
Распечатайте переменную s в области отладки ВБА (Immediate), скопируйте выражение . Создайте запрос, откажитесь от ввода таблиц и перейдите в режим SQL. Поместите туда выражение из Immediate и выполните запрос. Проанализируйте ситуацию. Возможно путаница с именами
Visual Basic
1
2
s = "select * from [КартаДУ] where [КодПациент]=" & Me.[Пациент] & " And [КодМКБ] = " & Me.[МКБ]
debug.print s
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 09:04  [ТС]
Я сделала, как Вы посоветовали. Запрос создается
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 09:13
Посмотрел на третий скрин. А в нем обведенное пустое поле называется "Дата взятия на учет"! И вовсе не чекбокс (флажок). И если это поле датное, то конечно туда не запишется текст. Надо записывать дату или менять тип поля. Типа такого
Visual Basic
1
2
3
If Not CurrentDb.OpenRecordset(s).EOF Then
  Me.[ДУчет1] = ![Поле даты из КартаДУ]   '"Да" 'Или True если [Д Учет] это флажок
End If
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 09:34  [ТС]
Не получается. В поле "ДУчет1" я исправила формат на "Дату"
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub ДУчет1_AfterUpdate()
Dim s
s = "select * from [КартаДУ] where [КодПациент]=" & Me.[Пациент] & " And [КодМКБ] = " & Me.[МКБ]
If Not CurrentDb.OpenRecordset(s).EOF Then
  Me.[ДУчет1] = ![ДатаВзятия]   '"Да" 'Или True если [Д Учет] это флажок
End If
  Me.[ДУчет1] = ![ДатаВзятия] Is Null 'Или False если [Д Учет] это флажок
End If
 
End Sub

Все равно не встает
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 09:48
Кажется понял ситуацию. Вы события не того поля берете. Надо писать код на событиях полей Me.[Пациент] или Me.[МКБ]. Ведь меняются в форме они, а не Me.[ДУчет1]. Или поместить код на событии После обновления формы.
Но не на [ДУчет1]. Это поле только должно получить значение, Вы его в форме руками не меняете, а значит событий у него вообще не будет.
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 10:03  [ТС]
Я запуталась, подскажите как? Мне нужно, чтобы при вводе двух параметров Пациент и МКБ вставлялось значение ДУчет1
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_AfterUpdate()
Dim s
s = "select * from [СтатТалон] where [ДУчет1]=" & Me.[КартаДУ].[ДатаВзятия]
If Not CurrentDb.OpenRecordset(s).EOF Then
  Me.[Пациент] = Me.[КодПациент]   '"Да" 'Или True если [Д Учет] это флажок
  Me.[МКБ] = Me.[КодМКБ]   '"Да" 'Или True если [Д Учет] это флажок
End If
  Me.[Пациент] = Me.[КодПациент] Is Null   '"Да" 'Или True если [Д Учет] это флажок
  Me.[МКБ] = Me.[КодМКБ] Is Null   '"Да" 'Или True если [Д Учет] это флажок
End If
 
End Sub
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 10:34
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_AfterUpdate()
Dim s
s = "select * from [КартаДУ] where [КодПациент]=" & Me.[Пациент] & " And [КодМКБ] = " & Me.[МКБ]
With CurrentDb.OpenRecordset(s)
  If Not .EOF Then
    Me.[ДУчет1] = ![ДатаВзятия]   
  Else
    Me.[ДУчет1] = Null 
  End If
End With
End Sub
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 10:42  [ТС]
Спасибо огромное!
Данные встают. Только, как всегда, одно "НО".
После вставки данный в поле "ДУчет1" больше с формой ничего сделать нельзя.
А при закрытии или сохранении данных выходит окно:
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 12:14
Извиняюсь. Конечно событие До обновления формы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_BeforeUpdate()
Dim s
s = "select * from [КартаДУ] where [КодПациент]=" & Me.[Пациент] & " And [КодМКБ] = " & Me.[МКБ]
With CurrentDb.OpenRecordset(s)
  If Not .EOF Then
    Me.[ДУчет1] = ![ДатаВзятия]   
  Else
    Me.[ДУчет1] = Null 
  End If
End With
End Sub
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 12:33  [ТС]
Все равно глючит. Я сделала на кнопку - работает.
Вы можете подсказать, как сделать следующее:
1. Есть таблица ЛУД )Лист уточненных диагнозов). В него собираются все диагнозы, которые были в текущем году, независимо от того были ли они раньше.
2. Есть таблица "СтатТалон", в которой собираются все посещения по всем диагнозам.
Я использовала Ваш код в VBA на добавление записей:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub ДобавитьЛУД_Click()
  Dim rst As Dao.Recordset
  Set rst = CurrentDb.OpenRecordset("ЛУД") 'Открыть рекордсет на адресуемой таблице
  rst.AddNew  'Добавить новую запись в рекордсет
  rst![Дата] = Me.[Дата]
  rst![Пользователь] = Me.[Пользователь]
  rst![Пациент] = Me.[Пациент]
  rst![Врач] = Me.[Врач]
  rst![МКБ] = Me.[МКБ]
  rst![Остр_Хрон] = Me.[Установление]
  rst![Выявлено] = Me.[Выявлен]
  rst![ДУчет] = Me.[ДУчет1]
  rst.Update 'Сохранить запись
  rst.Close
  
End Sub
Подскажите, как сделать так, чтобы данные таблицы "СтатТалон" вставлялись в таблицу "ЛУД", но чтобы не было дубляжей
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 12:55
А по каким полям определить дубль или нет?
Но вообще говоря, лучше сделать единый составной индекс на все поля, комбинация которых должна быть уникальна. Подчеркну - не индексы по отдельности на каждое поле, а единый индекс на несколько полей. Тогда система сама не позволит создавать дубли. Ну и чтобы в этом случае не было сообщений об ошибке, надо ее обойти. В простейшем случае ставим On Error Resume Next. Но лучше конечно ориентироваться на специфический номер ошибки и обходить именно его
Visual Basic
1
2
3
4
5
6
7
Private Sub ДобавитьЛУД_Click()
  ..................................
  On Error Resume Next
  rst.Update 'Сохранить запись
  rst.Close
  
End Sub
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 16:33  [ТС]
Тут не должны дублироваться 3 поля: пациент, МКБ и Остр_Хрон и не распространяться на поле "Остр_Хрон"=1.
В таблицу "ЛУД" идут не все поля из таблицы "СтатТалон"

Добавлено через 3 часа 29 минут
Я попыталась прописать код, но не знаю куда вставить "не добавлять запись"
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub ДобавитьЛУД_Click()
 Dim sql_query As String 'Записываем в нее нужный нам запрос
sql_query = "SELECT * FROM ЛУД WHERE (((ЛУД.Дата) In (SELECT [Дата] FROM [ЛУД] As Tmp GROUP BY [Дата],[Пациент],[МКБ] HAVING Count(*)>1  And [Пациент] = [ЛУД].[Пациент] And [МКБ] = [ЛУД].[МКБ])))ORDER BY ЛУД.Дата, ЛУД.Пациент, ЛУД.МКБ"
'sql_query = "ЛУД.Дата, ЛУД.Пациент, ЛУД.МКБ,
  Dim rst As Dao.Recordset
  Set rst = CurrentDb.OpenRecordset("ЛУД")
  rst.AddNew  'Добавить новую запись в рекордсет
  rst![Дата] = Me.[Дата]
  rst![Пользователь] = Me.[Пользователь]
  rst![Пациент] = Me.[Пациент]
  rst![Врач] = Me.[Врач]
  rst![МКБ] = Me.[МКБ]
  rst![Остр_Хрон] = Me.[Установление]
  rst![Выявлено] = Me.[Выявлен]
  rst![ДУчет] = Me.[ДУчет1]
'  DoCmd.RunSQL sql_query
  On Error Resume Next
  rst.Update 'Сохранить запись
  rst.Close
  
End Sub
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.08.2016, 16:51
Цитата Сообщение от Inessa Посмотреть сообщение
Я попыталась прописать код, но не знаю куда вставить "не добавлять запись"
Не понимаю о чем Вы. Вы сделали составной индекс на поля по которым в таблице комбинации значений должны быть уникальны? Если сделали, то дубли не пройдут. Если еще не сделали, надо сделать. Или не знаете как сделать составной индекс?
1
 Аватар для Inessa
512 / 21 / 2
Регистрация: 11.03.2012
Сообщений: 450
06.08.2016, 17:27  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Или не знаете как сделать составной индекс?
Я не пойму как сделать составной индекс

Добавлено через 12 минут
Все нашла. Это свойство в таблице
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2016, 17:27
Помогаю со студенческими работами здесь

Запись из одной таблицы в другую через форму
Добрый день! Я новичок в access, возможно, поэтому и пока не смог найти нужную мне информацию на форуме (чтобы задать правильный...

Добавление записи в DataGridView, расположенном на одной форме, через другую форму
Есть форма "Пациенты", на ней datagridview, данные в datagridview загружаются из таблицы БД, на форме есть кнопки: сохранить, удалить,...

Последовательный ввод данных в форму, основанную на одной таблице через обновляющиеся поля со списками
Здравствуйте! Скажите пожалуйста, возможно ли создание последовательного ввода данных в форму, основанную на одной таблице через...

Скопировать id с одной таблицы на другую таблицу другую форму
Добрый день! Подскажите, как и где написать,чтобы id с одной таблицы скопировался в другую таблицу (связанную), или в запросе надо...

Передать данный из одной формы в другую
Как по нажатию на кнопку, во второй форме, сделать прозрачность, первой формы? Вот что я пытался в обработчике кнопки Form1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru