Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2013, 07:09   #1
И-ван-Ыч
Пользователь
 
Регистрация: 08.08.2013
Сообщений: 19
По умолчанию Как по введенному значению выбрать данные и вставить их в новую таблицу

Доброго времени суток всем!

Есть 2 таблицы.
Одна таблица [Таблица-1] содержит данные (порядка 5 тыс. записей), например:
[№_договора], [Адрес] , [Объект], [Принадлежность]
1, Магазин, Мира 31, ЖЭК Жилищник
2, Жилой дом, Интернационалистов 19, ЖЭК Жилищник
2, Парикмахерская Интернационалистов 19, ЖЭК Жилищник
3, Жилой дом, 79 гв.дивизии 26, Жилремсервис
41, Жилой дом, 79 гв.дивизии 13, Жилремсервис
41, Ломбард, 79 гв.дивизии 13, Иванов
41, Магазин, 79 гв.дивизии 13, Петров
5, Баня, Герцена 27, ООО Баня
132, Цех 1, Кирова 58, Сибмотор
132, Цех 2 , Кирова 58, Сибмотор
2425, Жилой дом, Лазарева 3Б, Наш дом

Во второй пустой таблице [Таблица-2] есть такие же поля
[№_договора], [Адрес] , [Объект]
Работа с таблицей в форме [Форма-2] с такими же полями.

Как можно сделать так, чтобы при введении [№_договора] в форму [Форма-2], выводилась по фильтру введенного [№_договора] форма [Форма-1] с данными из [Таблица-1], затем в этой форме [Форма-1] можно было выбрать нужную одну запись и вставить её в [Таблица-2]?
Например в поле[№_договора] формы [Форма-2] набрал 41 (или выбрал из выпадающего списка), после обновления появилась [Форма-1] в ней вывелись все записи договора 41, и там надо выбрать желаемую запись и "Энтером" или двойным кликом мыши вставить её в [Таблица-2]?

Проблему вывода формы я с помощью добрых людей решил,
а вот как вставить нужные данные из [Форма-1] в [Форма-2] не знаю, не получается.
Вот такой код не работает:
Private Sub Form_DblClick(Cancel As Integer)
With Forms!Форма-2.Recordset
.Edit
![№_договора] = Me![№_договора]
![Адрес] = Me![Адрес]
![Объект] = Me![Объект]
![Принадлежность] = Me![Принадлежность]
.Update
End With
End Sub

Помогите решить проблему.
Вложения
Тип файла: zip Проба.zip (23.3 Кб, 9 просмотров)
И-ван-Ыч вне форума Ответить с цитированием
Старый 08.08.2013, 09:47   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

не поняла сути задания
Вложения
Тип файла: zip Проб0808.zip (22.8 Кб, 8 просмотров)
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 08.08.2013, 12:37   #3
И-ван-Ыч
Пользователь
 
Регистрация: 08.08.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от shanemac51 Посмотреть сообщение
не поняла сути задания
Просто есть база, данные в которой могут изменяться (удаляться, добавляться) [Таблица-1] и соответствующая форма [Форма-1]

В [Форма-2] набирается [№_договора], затем автоматически после обновления
Код:
Private Sub №_договора_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
  DoCmd.OpenForm "Форма-1", acFormDS, , "[№_договора]=" & Me![№_договора]
End Sub
(выводится [Форма-1] с выводом всех записей по договору, в [Форма-1] выбирается одна нужная запись и добавляется в [Форма-2] ( [Таблица-2] ).
Затем в [Форма-2] будут ещё заноситься (вручную и автоматически) данные по записям (просто кучу полей я не стал в пробную базу добавлять)
То есть [Таблица-2] является архивом проделанной работы.
([Таблица-1] и связанная с ней таблица не могут служить архивом, так как данные в [Таблица-1] могут удаляться).

Формы лучше табличные, с ними значительно удобнее работать.

Кстати, в Вашем примере, в [Форма-2] ( [Таблица-1] ) добавляются все записи по договору, а не одна желаемая.

Немного изменил код [Форма-1]

Код:
Private Sub Form_DblClick(Cancel As Integer)
 With Forms![Форма-2].Recordset
  If Not .EOF Then
   .Edit
   ![№_договора] = Me![№_договора]
   ![Адрес] = Me![Адрес]
   ![Объект] = Me![Объект]
   ![Принадлежность] = Me![Принадлежность]
   .Update
  End If
 End With
End Sub
но всё-равно неправильно работает
Вложения
Тип файла: zip Проба.zip (24.5 Кб, 16 просмотров)

Последний раз редактировалось И-ван-Ыч; 08.08.2013 в 12:42.
И-ван-Ыч вне форума Ответить с цитированием
Старый 08.08.2013, 13:30   #4
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

ПО крайней мере
Код:
Private Sub Form_DblClick(Cancel As Integer)
 With Forms![Форма-2].Recordset
  'If Not .EOF Then
  '.edit
  .addnew
   ![№_договора] = Me![№_договора]
   ![Адрес] = Me![Адрес]
   ![Объект] = Me![Объект]
   ![Принадлежность] = Me![Принадлежность]
   .Update
  'End If
 End With
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 09.08.2013, 05:29   #5
И-ван-Ыч
Пользователь
 
Регистрация: 08.08.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от shanemac51 Посмотреть сообщение
ПО крайней мере
Код:
Private Sub Form_DblClick(Cancel As Integer)
 With Forms![Форма-2].Recordset
  'If Not .EOF Then
  '.edit
  .addnew
   ![№_договора] = Me![№_договора]
   ![Адрес] = Me![Адрес]
   ![Объект] = Me![Объект]
   ![Принадлежность] = Me![Принадлежность]
   .Update
  'End If
 End With
End Sub
Верно, но лишь только отчасти. Добавляет-то тоже неправильно. Уже пробовал и addnew, получается ерунда такая:

Здесь добавил 2 раза записи по договору 41. Получается, создает две строки: одна только с [№_договора], вторая - с нужными данными.

edit же работает так:

добавляет пустую строку с [№_договора] и вставляет все нужные данные в предыдущую последнюю запись. Причём, если второй раз попытаться добавить запись, то появится вторая строка, содержащая только [№_договора], и изменится опять-таки та же бывшая последняя запись. Правда, если хаотично побегать курсором по полям, то иногда опять один первый раз срабатывает нормально.

(Бьюсь уж пятый день, ничего не могу придумать и найти.)
И-ван-Ыч вне форума Ответить с цитированием
Старый 09.08.2013, 08:14   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

число 41 вы должны сообщать в свободном поле в заголовке формы, а не в области данных
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 09.08.2013, 10:15   #7
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Если записей в Таблица-1 не более десятка тысяч, то можно так...
Вложения
Тип файла: rar #Проба.rar (12.9 Кб, 22 просмотров)
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 09.08.2013, 10:30   #8
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Понимаетели, когда Вы выбрали "41", то на "Форма-2" Вы уже создали новую (но ещё не сохранённую в базе!) запись, поэтому .AddNew создаёт Вам новую запись и оставляет незаполненной текущую.
Чтобы воспользоваться .Edit Вам нужно сначала сохранить создаваемую запись (почти не заполненную данными), а затем каким-то образом найти её в базе данных и только тогда производить её редактирование...
Поэтому, Вам сначала нужно удалить создаваемую запись, а уже только потом выполнять копирование:

Код:
Private Sub Form_DblClick(Cancel As Integer)
 With Forms![Форма-2].Recordset
   .Undo  'удалить создаваемую запись
   .addnew
   ![№_договора] = Me![№_договора]
   ![Адрес] = Me![Адрес]
   ![Объект] = Me![Объект]
   ![Принадлежность] = Me![Принадлежность]
   .Update
 End With
End Sub
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 09.08.2013, 11:46   #9
И-ван-Ыч
Пользователь
 
Регистрация: 08.08.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Myhaylo Посмотреть сообщение
Понимаетели, когда Вы выбрали "41", то на "Форма-2" Вы уже создали новую (но ещё не сохранённую в базе!) запись, поэтому .AddNew создаёт Вам новую запись и оставляет незаполненной текущую.
Чтобы воспользоваться .Edit Вам нужно сначала сохранить создаваемую запись (почти не заполненную данными), а затем каким-то образом найти её в базе данных и только тогда производить её редактирование...
Поэтому, Вам сначала нужно удалить создаваемую запись, а уже только потом выполнять копирование:

Код:
Private Sub Form_DblClick(Cancel As Integer)
 With Forms![Форма-2].Recordset
   .Undo  'удалить создаваемую запись
   .addnew
   ![№_договора] = Me![№_договора]
   ![Адрес] = Me![Адрес]
   ![Объект] = Me![Объект]
   ![Принадлежность] = Me![Принадлежность]
   .Update
 End With
End Sub
Это я понимаю, да только вот Access по разному воспринимает эту строку при AddNew и Edit. А вот при добавленном Undo Access выдает сообщение "Run time error 438: Object doesn't support this property or metod". Не поддерживает, м-да.

И попробую посмотреть, что Вы подсказали в примере.

Думаю попробовать решить проблему с помощью промежуточной формы, куда вводится [№_договора], но это уже будет как-то некрасиво. На эту мысль навела такая подсказка:
Цитата:
Сообщение от shanemac51 Посмотреть сообщение
число 41 вы должны сообщать в свободном поле в заголовке формы, а не в области данных
В любом случае, всем спасибо!

Последний раз редактировалось И-ван-Ыч; 09.08.2013 в 11:51.
И-ван-Ыч вне форума Ответить с цитированием
Старый 12.08.2013, 09:21   #10
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Виноват:

Forms![Форма-2].Undo
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставить данные в отфильтрованную таблицу Rocky3 Microsoft Office Excel 5 29.08.2011 16:58
Вставить данные в таблицу Nato4ka.B Microsoft Office Excel 5 19.08.2011 11:54
Как вставить в таблицу Excel данные из текстового файла Диагностик Microsoft Office Excel 8 13.12.2009 13:50
Как в таблицу в ячейку вставить данные даты MonthCalendar1 mnbvcxz11 БД в Delphi 2 11.08.2009 23:59
Sql-запрос по значению, введенному в Edit setrik777 БД в Delphi 5 27.05.2009 15:26