|
|
|
| Здравствуйте!
Имеются 3 таблицы: СписокТоваров, Главная, Подчиненная. Также имеются три соответствующие формы. Причем форма Подчиненная встроена в форму Главная.
Сейчас в форму Главная ввожу код клиента, затем перехожу во встроенную форму Подчиненную и там по одному ввожу товары из таблицы СписокТоваров. И так для каждой новой записи.
Как сделать так, чтобы при вводе кода нового клиента и переходе на форму Подчиненную, в неё автоматически из таблицы СписокТоваров вставлялись названия товаров?
Заранее благодарен! | |
|
| |
|
|
|
| Понимаю, что надо выполнить запрос типа
INSERT INTO ПодчиненнаяТаблица
SELECT "КодКлиента", Товар FROM СписокТоваров
Но где его прописать и как выполнить, вернее когда
Короче, посоветуйте хоть что-нибудь | |
|
| |
|
|
|
|
Как сделать так, чтобы при вводе кода нового клиента и переходе на форму Подчиненную, в неё автоматически из таблицы СписокТоваров вставлялись названия товаров?
|
Считаю такую автоматику излишней.
Лучше/правильнее по кнопочке AddGoods.
Или по выбору поля со списком с заранее подготовленными шаблонами(наборами) товаров.
Например клиент Иванов берет товары только ФирмыА.
Клиент Петров берет только ФирмыБ.
А Сидоров берет товары обеих фирм.
В таком случае удобно иметь три набора товаров.
Можно даже сделать "именные" шаблоны наборов товаров для каждого клиента, и
несколько общих шаблонов.
Ну и конечно проверять, не добавлены-ли уже эти товары, потому как один товар может участвовать в нескольких наборах. | |
|
| |
|
|
|
| Я, конечно, буду иметь в виду Ваши варианты, но сейчас нужно сделать именно мой.
Так как таблица СписокТоваров и есть заранее подготовленный набор.
Как реализовать? | |
|
| |
|
|
|
| Элемент управления SubForm(подчиненная форма) имеет свойство OnEnter и генерирует событие Enter.
Опишите процедуру обработки этого события и там выполняйте добавление товаров,
после соответствующих проверок, конечно. | |
|
| |
|
|
|
| А соответствующие проверки это что?
Не добавлены ли ранее товары для этого клиента?
И какие еще?
Спасибо! | |
|
| |
|
|
|
| Я бы сделал это на событии 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 | |
|
| |
|
|
|
|
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.
И еще вопрос.
Как сделать так, чтобы вставка происходила исключительно только для новых клиентов? То есть выше приведенный запрос выполнялся только при добавлении НОВОЙ записи в Главную таблицу? | |
|
| |
|
|
|
| Решил задачку следующим образом
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
|
Нужна конструктивная критика. Имеются ли подводные камни? Как оптимизировать? | |
|
| |
|
|
|
| А у меня чего то событие не возникает
client_id_AfterUpdate()
если я правильно понял это ключевое поле типа счетчик | |
|
| |
|
|
|
| У меня ключевое поле другое ID. Это просто поле, где хранится код клиента | |
|
| |