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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Автоматическая вставка в подчиненную форму (таблицу)
 
 автор: scandal   (07.09.2010 в 17:04)   личное сообщение
 
 

Здравствуйте!
Имеются 3 таблицы: СписокТоваров, Главная, Подчиненная. Также имеются три соответствующие формы. Причем форма Подчиненная встроена в форму Главная.
Сейчас в форму Главная ввожу код клиента, затем перехожу во встроенную форму Подчиненную и там по одному ввожу товары из таблицы СписокТоваров. И так для каждой новой записи.
Как сделать так, чтобы при вводе кода нового клиента и переходе на форму Подчиненную, в неё автоматически из таблицы СписокТоваров вставлялись названия товаров?

Заранее благодарен!

  Ответить  
 
 автор: sCandal   (07.09.2010 в 18:10)   личное сообщение
 
 

Понимаю, что надо выполнить запрос типа
INSERT INTO ПодчиненнаяТаблица
SELECT "КодКлиента", Товар FROM СписокТоваров

Но где его прописать и как выполнить, вернее когда
Короче, посоветуйте хоть что-нибудь

  Ответить  
 
 автор: Lukas   (07.09.2010 в 18:27)   личное сообщение
 
 


Как сделать так, чтобы при вводе кода нового клиента и переходе на форму Подчиненную, в неё автоматически из таблицы СписокТоваров вставлялись названия товаров?


Считаю такую автоматику излишней.
Лучше/правильнее по кнопочке AddGoods.
Или по выбору поля со списком с заранее подготовленными шаблонами(наборами) товаров.

Например клиент Иванов берет товары только ФирмыА.
Клиент Петров берет только ФирмыБ.
А Сидоров берет товары обеих фирм.
В таком случае удобно иметь три набора товаров.

Можно даже сделать "именные" шаблоны наборов товаров для каждого клиента, и
несколько общих шаблонов.
Ну и конечно проверять, не добавлены-ли уже эти товары, потому как один товар может участвовать в нескольких наборах.

  Ответить  
 
 автор: sCandal   (07.09.2010 в 18:40)   личное сообщение
 
 

Я, конечно, буду иметь в виду Ваши варианты, но сейчас нужно сделать именно мой.
Так как таблица СписокТоваров и есть заранее подготовленный набор.

Как реализовать?

  Ответить  
 
 автор: Lukas   (07.09.2010 в 18:54)   личное сообщение
 
 

Элемент управления SubForm(подчиненная форма) имеет свойство OnEnter и генерирует событие Enter.
Опишите процедуру обработки этого события и там выполняйте добавление товаров,
после соответствующих проверок, конечно.

  Ответить  
 
 автор: sCandal   (07.09.2010 в 19:03)   личное сообщение
 
 

А соответствующие проверки это что?
Не добавлены ли ранее товары для этого клиента?
И какие еще?

Спасибо!

  Ответить  
 
 автор: Анатолий (Киев)   (07.09.2010 в 19:04)   личное сообщение
 
 

Я бы сделал это на событии AfterUpdate поля "КодКлиента" или на Click кнопки:
Me.Refresh 'Или Me.Dirty = False - сохраняем новую запись
Set RS = CurrentDB.OpenRecordset("SELECT * FROM Товары")
With Me![Подчиненная].Form.RecordsetClone
Do Until RS.EOF
.AddNew
![КодКлиента] = Me!КодКлиента
![КодТовара] = RS![КодТовара]
.Update
RS.MoveNext
Loop
End With


  Ответить  
 
 автор: sCandal   (07.09.2010 в 22:23)   личное сообщение
 
 


Private Sub client_id_AfterUpdate()
     DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
     CurrentDb.Execute "iGoodsTemplate", dbDenyWrite
End Sub

Не работает при client_id_AfterUpdate запрос iGoodsTemplate:

INSERT INTO invoice_sub_sub ( invoice_sub_id, product )
SELECT [Forms]![Invoice]![InvoiceSub]![id] AS invoice_sub_id, title AS product
FROM helper_goods;

Выходит ошибка:
Run-time Error '3061':
Слишком мало параметров. Требуется 1.
Когда держу форму открытой и сам дважды щелкаю по запросу
или делаю запрос таким

INSERT INTO invoice_sub_sub ( invoice_sub_id, product )
SELECT 32 AS invoice_sub_id, title AS product
FROM helper_goods;

все работает.
Как решить проблему?
Кроме варианта, как вписать запрос в код VB.

И еще вопрос.
Как сделать так, чтобы вставка происходила исключительно только для новых клиентов? То есть выше приведенный запрос выполнялся только при добавлении НОВОЙ записи в Главную таблицу?

  Ответить  
 
 автор: sCandal   (08.09.2010 в 08:49)   личное сообщение
 
 

Решил задачку следующим образом

Private Sub client_id_AfterUpdate()
    If Me.NewRecord Then
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        sSQL = "INSERT INTO invoice_sub_sub ( invoice_sub_id, product )" _
            & " SELECT " & Me.id & " AS invoice_sub_id, title AS product FROM helper_goods"
        CurrentDb.Execute sSQL, dbDenyWrite
        Call Form_Current
    End If
End Sub

где

Sub Form_Current()
    On Error Resume Next

    If Err <> 0 Then
        GoTo Form_Current_Exit
    Else
        On Error GoTo Form_Current_Err
        Me.Parent![InvoiceSubSub].Requery
    End If

Form_Current_Exit:
    Exit Sub

Form_Current_Err:
    MsgBox Error$
    Resume Form_Current_Exit

End Sub


Нужна конструктивная критика. Имеются ли подводные камни? Как оптимизировать?

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

А у меня чего то событие не возникает
client_id_AfterUpdate()
если я правильно понял это ключевое поле типа счетчик

  Ответить  
 
 автор: sCandal   (08.09.2010 в 19:12)   личное сообщение
 
 

У меня ключевое поле другое ID. Это просто поле, где хранится код клиента

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