Добавление записей.

sakh
Дата: 24.11.2006 09:36:43
Сделал такой запрос

INSERT INTO MIRheader ( Mir_number, Mir_mrr_link )
SELECT [M_mir_link], [M_mrrnumb]
FROM MRRheader
WHERE [MRRheader].[M_mrrnumb]=[forms]![MRR]![M_mrrnumb];

Добавляю номер второго документа который вписываю в первой форме в текстбокс, также добавляю номер первого док. чтобы потом было понятно с какамоу документу он относится.
Теперь необходимо смастерить так чтобы помимо того что я сейчас передал с главной формы, так же передавалась информация с подчиненной. Насколько я понял в ИНСЕРТЕ можно указывать только одну таблицу, тогда следует писать второй запрос?
bILL HEAD
Дата: 24.11.2006 10:25:26
да, два разных (тем более у вас ведь и два разных источника - ф1 и ее подчиненная)
но можно и в запрос добавлять (который объединяет несколько табл)
но у вас видимо это не получится - у вас ведь связь один-ко-многим
rok
Дата: 25.11.2006 14:40:31
bILL HEAD
да, два разных (тем более у вас ведь и два разных источника - ф1 и ее подчиненная)
но можно и в запрос добавлять (который объединяет несколько табл)
но у вас видимо это не получится - у вас ведь связь один-ко-многим

В запросах по умолчанию устанавливается связь "выводить записи совпадающие в обоих таблицах"
Но ведь есть и другие виды связи.
sakh
Дата: 30.11.2006 04:09:14
Здравствуйте.
Вопрос но поводу SQL запроса, вообщем есть два вида документации которые разделены по таблицам, с одного документа следует в торой с тем же наполнением и датами. Необходимо при заполнении одного при нажатии кнопки вся необход инфа переносилась и заполняла другой документ. Я сделал два запроса 1 на сам документ, даты люди и т.д. второй запрос на заполнение данного док материалоами.

Добавление нового документа.
INSERT INTO MRRheader ( M_datereceipt, M_mir_link, M_act_link, M_mrrnumb, M_actnumber, M_store, M_resived, M_resived_position, M_issuing, M_issuing_position )
SELECT [MIRheader].[Mir_dateissue], [MIRheader].[Mir_number], [MIRheader].[Mir_actnumb], [MIRheader].[Mir_mrr_link], [MIRheader].[Mir_act_link], [StoreDet].[StoreDet_reeciving], [People_Det].[PeopleDet_resived], [People_Det].[PeopleDet_resived_posit], [People_Det].[PeopleDet_issuing], [People_Det].[PeopleDet_issuing_posit]
FROM MIRheader, StoreDet, People_Det
WHERE [MIRheader].[Mir_key]=[StoreDet].[storedet_mirnumber] And [MIRheader].[Mir_key]=[People_Det].[PeopleDet_mirnumber];


Наполнение только что созданного документа, материалом.

INSERT INTO MRRdetail ( DM_mrrnumber, DM_mrritem, DM_quantityrec, DM_mat_key )
SELECT [MRRheader].[M_key], [MIRdetail].[Mird_item], [MIRdetail].[Mird_qrequested], [MIRdetail].[Mird_mat_key]
FROM MIRdetail, MRRheader, MIRheader
WHERE [MIRheader].[Mir_number]=[Forms]![MIRchanger]![Mir_number] And [MRRheader].[M_mrrnumb]=[Forms]![MIRchanger]![Mir_mrr_link];

Проблема в том что в созданный документ попадает не только материал принадлежащий выбранному документу, но и весь материал который указан в вдругих документах.
Пробывал задавать параметр сравнения по номеру документа в глав и подчин таблице, ничего не выходит, он все равно выдает весь список номеров документов.
ILL HEAD
Дата: 30.11.2006 05:55:31
"ошибка" которая приводит к размножению - это неправилильно сформированное предложение FROM .... WHERE ... где у вас у вас получается связь многие-ко-многим
если вы указали FROM MIRdetail, MRRheader, MIRheader то нужно в предложении WHERE указать ВСЕ! условия взаимосвязи между таблицами упомянутыми в FROM
а вы указали в условии отбора ТОЛЬКО условие для таблиц MRRheader и MIRheader
укажите дополнительно в WHERE например (от фанаря напишу) :
MIRdetail.ПОЛЕ1 = MRRheader.ПОЛЕ10 AND MRRheader.ПОЛЕ11 = MIRheader.ПОЛЕ200
где ПОЛЕ1 ПОЛЕ10 ПОЛЕ11 ПОЛЕ200 - это поля через которые по вашему замыслу и связаны эти таблицы (информация в них). по "научному" : ПОЛЕ1 ПОЛЕ11 - первичные_ключи, ПОЛЕ10 ПОЛЕ200 - внешние ключи
ILL HEAD
Дата: 30.11.2006 06:05:32
другой вариант:
вместо FROM T1,T2 WHERE... можно использовать FROM T1 JOIN T2 ON T1.F1=T2.F2 WHERE...
тогда условия связи между таблицами будут описаны в JOIN а условия отбора записей в WHERE
этот вариант помоЁму правильнЕй

постройте SELECT FROM ... WHERE ... в конструкторе запросов, проверьте что он возвращает нужное колич записей и вставьте его в INSERT INTO ... и будет вам счастие
sakh
Дата: 07.12.2006 10:41:58
Такой вопрос, возможно он относиться не к этому топику, но связан с добавлением записей.
С базой работают несколько человек, при добавлении очередной записи другой пользователь увидет эту запись если повторно откроет форму с реестром т.е. сделает Requery, а как можно отловить тот момент когда кто то что сделал, чтобы обновить формую другому пользователю.
bILL HEAD
Дата: 07.12.2006 10:47:33
бд мдб? или mssql ?

мдб - флажки на изменение (изменил - взвел) и опрос их (флажков) по таймеру формы (прорекверил - сбросил)

мсскл - ну там триггеры.. и все равно флажки однако

все имхо
sakh
Дата: 12.12.2006 11:08:46
Такой вопрос, нужно логически разделить информацию в базе т.е. есть два вида материалов с которыми работают разные люди, нужно чтобы человек открывал базу выберал свой вид материала и видел отфильтрованный список своих документов, проблема в том что я не могу представить как это логически сделать, т.к. помимо всего прочего они создают документы, из одного док.запросами создают другой документ и все это должно быть с добавлением галочки или нет в логич поле в зависимости от выбранного типа материала. Вопрос в том что, мне придется создавать для каждого вида свои запросы, свои формы? потому что в любом случае надо будет добавлять во все действия условия, филтрации или добавления нового док.Понимаете про что я?
или как то можно сделать так, выбран материал 1 следовательно все операции проходят с добавлением галочки в логич поле и соответственно и фильтрация по нему, если выбран материал 2 то наоборот.