2016-02-18 2 views
0

Я создаю пользовательский интерфейс на основе от одного внутренних и двух связанных между собой (внешних) радиокомпонентов доступа в Access 2013.Microsoft Access - Сохранение новой записи в базу данных Linked

Два полей на моем UI является комбо коробкой, которые прочитайте из связанных таблиц и отобразите параметры. Это происходит потому, что записи для поставщиков и типов материалов вызывают последовательно, и опечатки избегаются. Однако я хотел бы добавить следующие функции:

-Если в поле со списком будет введено новое значение, пользователю будет предложено заполнить необходимую информацию о новом значении. Эта информация впоследствии будет сохранена в соответствующем объединенном листе данных.

Как я могу настроить подсказку из самих списков? Для этого потребуется Access для открытия формы или подформы, которая, в свою очередь, будет сохранена в связанном лите.

Я бы предпочел, чтобы это было автоматически, вместо того, чтобы запрашивать конечный пользователь, чтобы он не пропускался. Прошло много лет с тех пор, как я играл с VB, поэтому я хотел бы избежать этого, если это возможно, и использовать встроенные функции Access (даже если для этого требуется немного больше времени). Заранее спасибо!

+0

Внешнее техническое описание означает? Excel? –

+0

Нет, внешнее техническое описание Access. Я обновлю свое оригинальное сообщение. –

+0

Можете ли вы использовать это? [Событие ComboBox.NotInList] (https://msdn.microsoft.com/en-us/library/office/ff845736.aspx) – HansUp

ответ

1

Хорошо, поэтому я смог это сделать после изучения функции «OnNotInList» и небольшого кода VB.

В OnNotInList разделе «Событие» свойств листа, я выбрал «Code Builder» и вошли следующие:

Private Sub Supplier_NotInList(NewData As String, Response As Integer) 
Dim ctl As Control 
Dim dbsCustomerDatabase As Database 

On Error GoTo Supplier_NotInList_Err 
Dim intAnswer As Integer 
Dim strSQL As String 
intAnswer = MsgBox("The supplier " & Chr(34) & NewData & _ 
    Chr(34) & " is not currently listed." & vbCrLf & _ 
    "Would you like to add it to the list now?" _ 
    , vbQuestion + vbYesNo, "Spire Manufacturing Solutions") 
' Adding the new entry to the list: 
If intAnswer = vbYes Then 
    strSQL = "INSERT INTO CustomerList([CustomerName]) " & _ 
      "VALUES ('" & NewData & "');" 
    DoCmd.SetWarnings False 
    DoCmd.RunSQL strSQL 
    DoCmd.SetWarnings True 
    MsgBox "The new supplier has been added to the list." _ 
     , vbInformation, "Spire Manufacturing Solutions" 
    Response = acDataErrAdded 
' Opening the Supplier datasheet to add details 
' to the new entry: 
    MsgBox "Opening Supplier database for new entry..." 
    DoCmd.OpenTable "CustomerList", acViewNormal, acEdit 

End If 
Supplier_NotInList_Exit: 
Exit Sub 
Supplier_NotInList_Err: 
MsgBox Err.Description, vbCritical, "Error" 
Resume Supplier_NotInList_Exit 
End Sub 

Это позволило мне автоматически предложит пользователю добавить информацию для нового поставщика если они вводят новое имя поставщика. Или, отмените запись, если они просто ошибочно написали ее. Я совсем забыл, насколько универсален VB. Спасибо всем за помощь в том, чтобы заставить меня возглавить в правильном направлении!

+0

Если вы замените 'DoCmd.RunSQL strSQL' на' CurrentDb.Execute strSQL, dbFailOnError', вы можете избежать 'DoCmd.SetWarnings False'. Выключение функции «SetWarnings» подавляет информацию, которая может быть жизненно необходима для устранения неполадок. – HansUp

+0

Интересно. Пользуюсь твоим советом, спасибо! –