|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
добрый день, форумчане. прошу подсказать, уткнулся вроде в простую проблему, но что-то не могу сообразить как сделать Суть такова: 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. В качестве подчиненной формы используется сама подчиненная таблица, то есть в окне подчиненной формы отражается непосредственно сама таблицы с записями, но с отбором-связкой [код базовой записи] Буду признателен за наводку куда "покопать". Заранее спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 18:37 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 19:31 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
как Вас понял,можно так: в таблице-источнике сделать поля,требующие ввода значения обязательными(или условие-не равные 0) а кнопку,после открытия формы ввода,недоступной (или форму ввода модальной)-если в форме ввода не заполнить обязательные поля,то при её закрытии запись не сохранится-при их заполнении запись сохранится.При закрытии сделать кнопку доступной (в случае модального окна телодвижения с доступом к кнопке излишни) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 20:28 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александр, не знаю, правильно ли я понял ваш вопрос. Сразу скажу, что это примеры для ленточной формы. Если нужна возможность удалить определённую запись: - сделал кнопочку "удалить" , разместил в области данных ленточной формы, получив, таким образом, на кнопочке запрос подтверждения и DoCmd.RunCommand acCmdDeleteRecord. или если надо как то дополнительно извратиться для "избранной" записи: в структуру таблицы ввожу логическое поле "Выбор". Размещаю его в ленточной формы, скрываю отображение. далее на события "нажатие кнопки" и "после обновления" на поля в строке формы цепляю обработчики, в результате которых после перемещения по строкам формы значение "Да" принимает "принимающая" строка, для всех остальных строк "Выбор" = "Нет". После чего запросом всегда можно вытянуть строчку по выбору = да и что там уже нужное с ней сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 22:07 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Predeclared, в том то и дело, то, что в факе описано годно, если в качестве подчиненной формы используется именно форма с полями, там проблем нет, конструкция Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value обеспечивает обращение к нужному полю формы, но если в качестве подчиненной формы используется сама таблица, то все не так очевидно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 03:20 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Tarasios, DoCmd работает только для форм, для подчиненной таблицы не будет работать, если в качестве аргумента функции указать название подчиненной таблицы, то выведется сообщение, что нужная форма не найдена. Насчет скрытого поля думал, так можно решить, полностью с Вами согласен, но хотелось бы придумать более универсальный механизм, чтобы его можно было вынести в отдельную процедуру и использовать в последующем на любой нужной форме с передачей в процедуру имени подтаблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 03:24 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
sdku, мне кажется, что этот вариант самый надежный. то есть не давать пользователю делать пустые строки, пока не заполнена одна строка всеми нужными данными, то другую такую же сделать нельзя. с точки зрения пользователя не самый удобный вариант конечно, но поиск будет однозначным ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 03:26 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
приложу внешний вид формы и пояснения, чтобы было более понятно что к чему ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 03:51 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александр, ты б, мил человек, пример свой приложил, а не картинки эти. Никого не интересует твой дизайн. Прочитал несколько раз. Так и не понял зачем нужны все эти телодвижения с запросами и прочее. У тебя сколько таблиц? Что служит источником строк для подчинённой формы? Почему не используешь объектную модель DAO? Типа так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 04:46 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Панург, исправляюсь: 1. всего таблиц 2, одна является источником строк для общей формы (Таблица 1), вторая - для подчиненной (Таблица 2), по сути в качестве подчиненной формы и выступает сама таблица с записями (Таблица 2) 2. каждой записи Таблицы 1 соответствует несколько записей Таблицы 2. 3. Таблица 2 связана с Таблицей 1 таблицей через поле [код базовой записи] попробую свойство AbsolutePisiton. Если весь смысл "писанины" кратко: на скрине в подтаблице 4 строки, то есть если я возьму номер третьей сверху строки, например, то получу соответственно №3, но мне надо знать номер строки в общей таблице №2, например, текущая строка №3 в общей таблице будет номером 10. Судя по всем именно в этом месте я и затупил, пытаясь найти номер данной строки в общей таблице (не отобранной про проекту), а не сразу удалить через DAO нужную строку Таблицы №2 в уже отобранном виде, то есть именно то, что указано в примере. Огромное спасибо за вразумение. Буду пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 05:46 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александрпопробую свойство AbsolutePisiton. Ганов Александрмне надо знать номер строки в общей таблице №2В этом плане можешь не стараться. Данное свойство относится только к конкретному набору данных и на другие наборы полученные из одного источника не распространяется. Все совпадения являются случайностями. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 05:53 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александр,и я не понял, зачем удалять из общей таблицы когда можно удалить из частного набора данных ( Recordset ), при условии возможности редактирования последнего? Запись будет удалена и из таблицы. Или я опять не понял чего то? Теперь про инсерты. Если подчинённая форма имеет источник с возможностью редактирования (а иначе как туда пользователь добавляет данные), то все вновь добавленные данные автоматически попадают в таблицу. Дополнительных телодвижений не нужно. Это ещё нужно постараться чтобы оторвать данные от источников. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 06:02 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Панург, дада. все верно понял. с инсертами все отлично работает. А вот с рекордесетом затупил. зачем-то пытался найти эту запись в общей таблице, хотя можно было удалить из текущего рекордсета без танцев с бубном. Еще раз благодарю за наставление на путь истинный :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 06:06 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александр, мне сначала показалась что у тебя формы стоят либо на временных таблицах, либо на отсоединённом рекордсете. Типа ADO.NET с его DataSet. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 06:16 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александр, ну я потому и написал, что "это примеры для ленточной формы". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:00 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Ганов Александр.... с точки зрения пользователя не самый удобный вариант конечно, но поиск будет однозначнымСтесняюсь спросить: а чем же он "не самый удобный"-подумаешь в паре случаев юзер почитает сообщения, а на третий раз уже будет знать, что это поле надо заполнять. Создайте приложение которым сможет пользоваться даже дурак и только он будет им пользоваться ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:51 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
Вдогонку:ради чего(для чего) на форме размещено аж 12 кнопок половина из которых выполняют штатные действия ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:00 |
|
Как удалить выделенную строку подтаблицы
|
|||
---|---|---|---|
#18+
sdkuВдогонку:ради чего(для чего) на форме размещено аж 12 кнопок половина из которых выполняют штатные действия Ну, когда я делал свои первые задачи, я тоже размещал на форме кнопки, которые дублировали панель навигации. Просто потому, что те маленькие, серые и некрасивые, а мои были большими, цветными и красивыми. Кстати, то этим признакам я научился легко угадывать новичков. Пока не ошибался... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 12:24 |
|
|
start [/forum/topic.php?fid=45&tid=1611117]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 533ms |
0 / 0 |