Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление\создание записи 1_табл ведет к удалению\созданию записей во 2,3,4 и 5 табл
 
 автор: АлексейAlex   (16.05.2009 в 21:49)   личное сообщение
 
 

например. есть таблица ФИО и другие АДРЕСС, СЕМЬЯ, ПАСПОРТ и СТАЖ.
вопрос? при удалении\создании 1-ой записи ФИО как удалить\создать 1-вые записи в других таблицах?

зы. при условии на одной форме поместить данные всех таблиц нельзя.

  Ответить  
 
 автор: Denis V.   (16.05.2009 в 22:41)   личное сообщение
 
 

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

  Ответить  
 
 автор: Goblin   (16.05.2009 в 23:19)   личное сообщение
 
 

Связанные таблицы 1:много и связанные подчиненные формы на вкладках по соответствующим полям.

  Ответить  
 
 автор: АлексейAlex   (16.05.2009 в 23:20)   личное сообщение
 
 

спасибо, каскадное удаление работает прекрасно)

а есть ли каскадное создание записей (одна заполняется, а параллельно в других таблицах создаются пустые записи)?

  Ответить  
 
 автор: Силыч   (16.05.2009 в 23:30)   личное сообщение
 
 

а смысл лишние записи плодить? к тому же пустые

  Ответить  
 
 автор: АлексейAlex   (16.05.2009 в 23:33)   личное сообщение
 
 

заполнить 10 ФИО и не отвликаться на то что система ругается, а потом как будут данные заполнить адресса.

  Ответить  
 
 автор: Denis V.   (17.05.2009 в 01:34)   личное сообщение
 
 

Система не должна ругаться. Надо так организовать схему данных и работу с формами, чтобы можно было легко добавить сколько угодно ФИО. А всё остальное добавлять по необходимости и (или) по возможности.
Т.е. таблица с ФИО - это должна быть так называемая справочная таблица для всех остальных. Чтобы была возможность спокойно добавлять данные в другие таблицы, связанные со справочной, сначала нужно, чтобы в справочной таблице уже были нужные данные. А именно это Вы и хотите сделать: сначала заполнить данными таблицу ФИО.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 07:27)   личное сообщение
 
 

Все эти таблицы это упрощенный пример реальности. (вопрос в конце)
В реальности ФИО (имена другие в реальности) и другие табл. должны опираться на, порядка 50 справочников + свои поля в каждой табл.
Поэтому в итоге каждая табл. состоит из примерно 30 полей. Сначала все эти таблицы были частью одной, огромной табл. но все это было так громоздко и пришлось разделить на 5 больших табл.

И теперь столкнулся с необходимостью такой связи, какая была бы, если бы все это было частью одной табл. Так как любая запись первой или третий или другой табл. продолжение остальных табл.

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

Выход я вижу в VBA . Завязать на стандартную кнопку "добавление записи" возможность добавлять новую запись в связанные табл.

А так как следующая запись не создастся пока не заполниться хотя бы одно поле, не заполняемой нами в данный момент табл., заполнить это поле, к примеру, табельным номером сотрудника, который ведет заполнение.

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

  Ответить  
 
 автор: ars_bs   (17.05.2009 в 12:37)   личное сообщение
 
 

создать то не проблема
dim rs as recordset
set rs=currentdb.openrecordset("здесь имя таблицы")
rs.addnew
rs![здесь поле]="здесь значение"
rs.update
rs.close
приблизительно так чере DAO

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 13:43)   личное сообщение
 
 

спасибо)) все отлично создает

а как удалить текущую запись в текущей таблице и аналогичную запись в не текущей таблице? 1-вая и 2-ая таблица связанны по ключу.

ps. если удалить в 1-вой то каскадным удалением, удалит и во 2-ой, а вот если удалить во 2-ой то в первой ничего не удалиться, поэтому, кто знает код поделитесь)

  Ответить  
 
 автор: Goblin   (17.05.2009 в 14:32)   личное сообщение
 
 

Ну и дела. Может запрос на удаление поможет.
Но если надо удалить все, то зачем оставлять в основной таблице инфу? С нее и удалять.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 14:42)   личное сообщение
 
 

Есть 5 табл.
есть 5 форм для каждой из 5-ти табл.
Цель - удалить n-ую запись в 5-ти табл. находясь в любой из форм.
=============================================================
возможно, поможет и запрос, привязанный к кнопкам на пяти формах, тогда подскажите оператор для создания подобного запроса.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 16:21)   личное сообщение
 
 

нашел описание создания запроса http://www.taurion.ru/access/8/7. щас буду пробывать

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 16:37)   личное сообщение
 
 

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

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 17:22)   личное сообщение
 
 

вытащил код из запроса, но VBA на него ругается когда я привязываю его к событию нажатия кнопки
DELETE фио.[1], фио.del
FROM фио
WHERE (((фио.del)="del"));

  Ответить  
 
 автор: Леон   (17.05.2009 в 16:25)   личное сообщение
 
 

надо подумать в организации введения, хранения, редактирования данных. Какая необходимость раскидывать данные на несколько табл

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 16:41)   личное сообщение
 
 

а будет работать когда в таблице 150 полей (возможно будет больше)?

  Ответить  
 
 автор: Goblin   (17.05.2009 в 17:50)   личное сообщение
 
 

Создай в конструкторе запрос на выборку из 5 таблиц. Убедись, что он работает как надо, запускаясь с кнопки (создашь через мастера). Далее, если все устраивает, задай его тип (на удаление) и все. (в конструкторе там где запрос на выборку, обновление, удаление)

По крайней мере я так делал всегда и всегда работало.

Хотя на пять таблиц запрос создавать смысла нет, если он будет удалять с основной таблицы, связанной 1:много, то автоматом удалятся все записи со всех сторон.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 18:55)   личное сообщение
 
 

я так и задал) на одну таблицу. щас попробую вставить код на выборку в кнопку

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 19:17)   личное сообщение
 
 

----------------------------------------------------------
Все вышло, через мастера
----------------------------------------------------------
SELECT фио.[1], фио.del
FROM фио;
----------------------------------------------------------
DELETE фио.[1], фио.del
FROM фио
WHERE (((фио.del)="del"));

  Ответить  
 
 автор: Goblin   (17.05.2009 в 19:08)   личное сообщение
 
 

150 полей, даже не представляю что бы это могло быть?! Дай глянуть.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 19:22)   личное сообщение
 
 

отдел кадров. Готовлю работу в колледж
показывать стыдно все еще сырое.
позже выставлю готовую работу.

  Ответить  
 
 автор: snipe   (17.05.2009 в 19:26)   личное сообщение
 
 

Уж лучше сейчас ....подскажут....
чем потом ....

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 19:46)   личное сообщение
 
 

Скачать LeshaB.7z с WebFile.RU

  Ответить  
 
 автор: Goblin   (17.05.2009 в 20:02)   личное сообщение
 
 

Кому личка? У меня нет. Высылки лучше на мыло. По кадрам могу предложить кое-что из своего старого. (до совершенства далеко, но делает многое.)

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 20:05)   личное сообщение
 
 

пароль 321

  Ответить  
 
 автор: Goblin   (17.05.2009 в 20:26)   личное сообщение
 
 

Впечатляет, только настраивать ее будет очень сложно. Остальное шлю на мыло.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 20:09)   личное сообщение
 
 

меня все интересует)) если есть возьму, приходиться осваивать двухгодовой курс Акцесса за пару недель.

  Ответить  
 
 автор: Goblin   (17.05.2009 в 20:29)   личное сообщение
 
 

Времени море!!!! Торопиться не надо.

  Ответить  
 
 автор: АлексейAlex   (17.05.2009 в 20:32)   личное сообщение
 
 

когда "учишься" не замечаешь как летит время ))

  Ответить  
 
 автор: Леон   (17.05.2009 в 20:54)   личное сообщение
 
 

не торопи время, оно само тебя поторопит.

  Ответить  
 
 автор: snipe   (18.05.2009 в 09:02)   личное сообщение
 
 

По моему мнению в Вашей базе не хватает одной таблицы....
которая объединяла бы все Ваши основные таблицы.....
та схема базы которую Вы собрали мне кажется неработоспособной....
Варианты
1. Из таблицы Общие удалить Фамилия Имя Отчество Датарождения и собрать это все в отдельной таблице. Во все основные таблицы ввести новое поле - длинное целое (но не ключевое). Убрать все связи которые объединяют основные таблицы. Собрать новые связи Ключевое поле новой таблицы сцепить с полями в основных таблицах которые только что создали. После чего на основе этой новой таблицы сделать форму на форме разместить вкладки а на вкладках подчиненные формы созданные на основе основных таблиц.
Теперь Юзеру будет достаточно ввести Фамилию имя отчество и дату рождения сотрудника...
остальную инфу можно забивать по мере поступления

2. Более сложный вариант создать таблицу в ней собственный ID и числовые не повторяющиеся поля на каждую основную таблицу, значения полей установить по умолчанию 0
установить связь между ИД каждой основной таблицы и соответствующим ей полем в новой таблице.....
Теперь основные таблицы связаны между собой через эту промежуточную таблицу. Однако система заполнения этой новой таблицы предполагает ее что все это будет организовано ручками.
Более того так же ручками придется делать систему передвижения по записям.

Однако как мне кажется при таком раскладе будет выполнено ваше желание начинать заполнение таблиц с любого места удалять сведения о лице как из одной таблицы так и из всех сразу

  Ответить  
 
 автор: АлексейAlex   (18.05.2009 в 09:44)   личное сообщение
 
 

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

  Ответить  
 
 автор: Гамлет   (18.05.2009 в 17:54)   личное сообщение
9 Кб.
 
 

Можно попробывать связь один к одному как на картинке

  Ответить  
 
 автор: Denis V.   (18.05.2009 в 21:20)   личное сообщение
 
 

snipe, я соглашусь полностью с Вами по первому варианту. Т.к. в предложенной схеме данных я не увидел основного: таблицы, в которой должны быть кадры, как основной объект базы данных кадрового учёта!
Второй вариант, по-моему, на грани "шаманства". При работе с базой данных надо будет обновлять значения этих числовых полей, создавать новую запись в этой таблице при добавлении нового кадра и др. Т.е. производить много лишних движений. Куда как проще основная и подчинённые формы!

  Ответить  
 
 автор: Goblin   (18.05.2009 в 21:39)   личное сообщение
 
 

Ну вот снип и DenisV сказали то же самое, что и я на мыле. Послушай совета. В работе будет очень сложна, если вобще будет возможно запустить.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList