Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как удалить выделенную строку подтаблицы / 19 сообщений из 19, страница 1 из 1
10.10.2018, 18:37
    #39715721
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
добрый день, форумчане.

прошу подсказать, уткнулся вроде в простую проблему, но что-то не могу сообразить как сделать

Суть такова:
1. Есть форма с n-нным количеством записей
2. В ней есть подтаблица, связана с основной таблицей по [коду базовой записи], то есть при переходах по базовым записям в подтаблице отражаются подзаписи каждой записи основной формы
3. Записи подтаблицы в качестве ключа используют счетчик 1,2,3 и т.д. В подтаблице есть несколько полей: [счетчик], [код базовой записи], [собственное имя записи], [параметр 1], [параметр 2]. Для связки с базовой записью используется поле [код базовой записи]
4. Все элементы управления подтаблицы скрыты, добавление новых записей (строк) осуществляется через кнопку "добавить" (типа как в 1С-ке), при нажатии с формы получается [код базовой записи] текущей записи и в подтаблицу посредством INSERT INTO добавляется новая запись, в которой автоматически прописывается счетчик и код базовой записи. Например,

[счетчик], [код базовой записи], [собственное имя записи], [параметр 1], [параметр 2]
001, 002, маша, 12, 14
002, 002, вася, 15, 20
003, 003, маша, 18,25
004, 003, петя, 14, 87

Соответственно, при выборе в главной форме записи 002 в подчиненной таблице будут отображаться записи
[счетчик], [код базовой записи], [собственное имя записи], [параметр 1], [параметр 2]
001, 002, маша, 12, 14
002, 002, вася, 15, 20

5. Для удаления записей в подчиненной таблице на форме есть кнопка "удалить запись", тоже типа как в 1С. При нажатии на нее система должна взять текущую запись (выделенную запись) подтаблицы и посредством SQL Delete или ADODB Delete удалить данную запись из подчиненной таблицы, потом обновить запрос. Сложностей никаких, но не пойму как однозначно идентифицировать запись. Поясню о чем речь, например, при добавлении 3 раза щелкнули "+" (добавить запись) и в подчиненной таблице возникли следующие записи.
[счетчик], [код базовой записи], [собственное имя записи], [параметр 1], [параметр 2]
001, 002, маша, 12, 14
002, 002, вася, 15, 20
003, 002, 0, 0, 0
004, 002, 0, 0, 0
005, 002, 0, 0, 0

то есть поля [собственное имя], [параметр 1] и [параметр 2] пользователь еще не успел запомнить, но потом понял, что из всех трех добавленных ему нужна только 1 надпись. Остальные две надо удалить.

В случае записей 003, 004, 005 они различаются только уникальным ключом-счетчиком, все остальные данные у всех записей одинаковые. Поле ключа-счетчика подчиненной таблицы в основной форме нигде не числится, то есть получить его значение неоткуда, кроме как напрямую обратиться к таблице. Чтобы обратиться напрямую к таблице и получить значение ключа-счетчика необходимо как-то однозначно идентифицировать надпись на которой стоит курсор. Это можно сделать через СurrentКecord подчиненной таблицы, например, курсор стоит на надписи 003, соответственно получаем номер 3 и в теории можем найти в подчиненной таблице этот номер 3 и удалить эту строку, НО, т.к. у нас есть связка по [код базовой записи], то номер 3 в подчиненной таблице с отбором по основной записи не будет равен номеру 3 в подчиненной таблице без отборов (со всеми записями), в которой, например, 20 записей и этот номер 3 в общем кол-ве записей равен номеру 10, соответственно, так идентифицировать запись в подчиненной таблице без отбора не получается.

Чтобы обратиться в подчиненную таблицу и найти надпись по полю [счетчик] надо как-то получить значение этого поля счетчик из подчиненной таблицы. В чем собственно и подзатупил, каким образом обратится к подчиненной таблице и получить значение поля [счетчик] той стройки, которая сейчас выделена в подчиненной форме-таблице (то есть на которой в данный момент стоит курсор).

p.s. В качестве подчиненной формы используется сама подчиненная таблица, то есть в окне подчиненной формы отражается непосредственно сама таблицы с записями, но с отбором-связкой [код базовой записи]

Буду признателен за наводку куда "покопать".

Заранее спасибо
...
Рейтинг: 0 / 0
10.10.2018, 19:31
    #39715751
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
...
Рейтинг: 0 / 0
10.10.2018, 20:28
    #39715778
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
как Вас понял,можно так:
в таблице-источнике сделать поля,требующие ввода значения обязательными(или условие-не равные 0) а кнопку,после открытия формы ввода,недоступной (или форму ввода модальной)-если в форме ввода не заполнить обязательные поля,то при её закрытии запись не сохранится-при их заполнении запись сохранится.При закрытии сделать кнопку доступной (в случае модального окна телодвижения с доступом к кнопке излишни)
...
Рейтинг: 0 / 0
10.10.2018, 22:07
    #39715821
Tarasios
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александр,
не знаю, правильно ли я понял ваш вопрос.
Сразу скажу, что это примеры для ленточной формы.
Если нужна возможность удалить определённую запись:
- сделал кнопочку "удалить" , разместил в области данных ленточной формы, получив, таким образом, на кнопочке запрос подтверждения и
DoCmd.RunCommand acCmdDeleteRecord.

или если надо как то дополнительно извратиться для "избранной" записи:
в структуру таблицы ввожу логическое поле "Выбор". Размещаю его в ленточной формы, скрываю отображение.
далее на события "нажатие кнопки" и "после обновления" на поля в строке формы цепляю обработчики, в результате которых после перемещения по строкам формы значение "Да" принимает "принимающая" строка, для всех остальных строк "Выбор" = "Нет".

После чего запросом всегда можно вытянуть строчку по выбору = да и что там уже нужное с ней сделать.
...
Рейтинг: 0 / 0
11.10.2018, 03:20
    #39715873
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Predeclared, в том то и дело, то, что в факе описано годно, если в качестве подчиненной формы используется именно форма с полями, там проблем нет, конструкция Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value обеспечивает обращение к нужному полю формы, но если в качестве подчиненной формы используется сама таблица, то все не так очевидно
...
Рейтинг: 0 / 0
11.10.2018, 03:24
    #39715874
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Tarasios, DoCmd работает только для форм, для подчиненной таблицы не будет работать, если в качестве аргумента функции указать название подчиненной таблицы, то выведется сообщение, что нужная форма не найдена. Насчет скрытого поля думал, так можно решить, полностью с Вами согласен, но хотелось бы придумать более универсальный механизм, чтобы его можно было вынести в отдельную процедуру и использовать в последующем на любой нужной форме с передачей в процедуру имени подтаблицы
...
Рейтинг: 0 / 0
11.10.2018, 03:26
    #39715875
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
sdku, мне кажется, что этот вариант самый надежный. то есть не давать пользователю делать пустые строки, пока не заполнена одна строка всеми нужными данными, то другую такую же сделать нельзя. с точки зрения пользователя не самый удобный вариант конечно, но поиск будет однозначным
...
Рейтинг: 0 / 0
11.10.2018, 03:51
    #39715876
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
приложу внешний вид формы и пояснения, чтобы было более понятно что к чему
...
Рейтинг: 0 / 0
11.10.2018, 04:46
    #39715877
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александр, ты б, мил человек, пример свой приложил, а не картинки эти. Никого не интересует твой дизайн.
Прочитал несколько раз. Так и не понял зачем нужны все эти телодвижения с запросами и прочее.

У тебя сколько таблиц? Что служит источником строк для подчинённой формы? Почему не используешь объектную модель DAO?
Типа так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Êíîïêà4_Click()
Dim lngPos As Long
    With Me.Âíåäðåííûé2.Form
        If .NewRecord Then .Undo: Exit Sub
        With .Recordset
            If Not (.BOF And .EOF) Then
                lngPos = .AbsolutePosition
                .Delete
                    If .RecordCount = 0 Then Exit Sub
                    If lngPos <= .RecordCount Then
                        .MovePrevious
                    Else
                        .MoveNext
                    End If
            End If
        End With 'Recordset
    End With 'Form
End Sub

...
Рейтинг: 0 / 0
11.10.2018, 05:46
    #39715882
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Панург, исправляюсь:
1. всего таблиц 2, одна является источником строк для общей формы (Таблица 1), вторая - для подчиненной (Таблица 2), по сути в качестве подчиненной формы и выступает сама таблица с записями (Таблица 2)
2. каждой записи Таблицы 1 соответствует несколько записей Таблицы 2.
3. Таблица 2 связана с Таблицей 1 таблицей через поле [код базовой записи]

попробую свойство AbsolutePisiton.

Если весь смысл "писанины" кратко:
на скрине в подтаблице 4 строки, то есть если я возьму номер третьей сверху строки, например, то получу соответственно №3, но мне надо знать номер строки в общей таблице №2, например, текущая строка №3 в общей таблице будет номером 10. Судя по всем именно в этом месте я и затупил, пытаясь найти номер данной строки в общей таблице (не отобранной про проекту), а не сразу удалить через DAO нужную строку Таблицы №2 в уже отобранном виде, то есть именно то, что указано в примере.

Огромное спасибо за вразумение. Буду пробовать.
...
Рейтинг: 0 / 0
11.10.2018, 05:53
    #39715883
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александрпопробую свойство AbsolutePisiton.
Ганов Александрмне надо знать номер строки в общей таблице №2В этом плане можешь не стараться. Данное свойство относится только к конкретному набору данных и на другие наборы полученные из одного источника не распространяется. Все совпадения являются случайностями.
...
Рейтинг: 0 / 0
11.10.2018, 06:02
    #39715884
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александр,и я не понял, зачем удалять из общей таблицы когда можно удалить из частного набора данных ( Recordset ), при условии возможности редактирования последнего? Запись будет удалена и из таблицы. Или я опять не понял чего то?
Теперь про инсерты. Если подчинённая форма имеет источник с возможностью редактирования (а иначе как туда пользователь добавляет данные), то все вновь добавленные данные автоматически попадают в таблицу. Дополнительных телодвижений не нужно. Это ещё нужно постараться чтобы оторвать данные от источников.
...
Рейтинг: 0 / 0
11.10.2018, 06:06
    #39715885
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Панург, дада. все верно понял. с инсертами все отлично работает. А вот с рекордесетом затупил. зачем-то пытался найти эту запись в общей таблице, хотя можно было удалить из текущего рекордсета без танцев с бубном. Еще раз благодарю за наставление на путь истинный :-)
...
Рейтинг: 0 / 0
11.10.2018, 06:16
    #39715887
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александр, мне сначала показалась что у тебя формы стоят либо на временных таблицах, либо на отсоединённом рекордсете. Типа ADO.NET с его DataSet.
...
Рейтинг: 0 / 0
11.10.2018, 10:00
    #39715931
Tarasios
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александр,

ну я потому и написал, что "это примеры для ленточной формы".
...
Рейтинг: 0 / 0
11.10.2018, 10:51
    #39715966
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Ганов Александр.... с точки зрения пользователя не самый удобный вариант конечно, но поиск будет однозначнымСтесняюсь спросить: а чем же он "не самый удобный"-подумаешь в паре случаев юзер почитает сообщения, а на третий раз уже будет знать, что это поле надо заполнять.
Создайте приложение которым сможет пользоваться даже дурак и только он будет им пользоваться
...
Рейтинг: 0 / 0
11.10.2018, 11:00
    #39715976
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Вдогонку:ради чего(для чего) на форме размещено аж 12 кнопок половина из которых выполняют штатные действия
...
Рейтинг: 0 / 0
11.10.2018, 12:24
    #39716049
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
sdkuВдогонку:ради чего(для чего) на форме размещено аж 12 кнопок половина из которых выполняют штатные действия
Ну, когда я делал свои первые задачи, я тоже размещал на форме кнопки, которые дублировали панель навигации. Просто потому, что те маленькие, серые и некрасивые, а мои были большими, цветными и красивыми.

Кстати, то этим признакам я научился легко угадывать новичков. Пока не ошибался...
...
Рейтинг: 0 / 0
11.10.2018, 16:59
    #39716275
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить выделенную строку подтаблицы
Joss, все верно угадали. кнопки уже поубирал - явный перебор :-)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как удалить выделенную строку подтаблицы / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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