Мой элемент управления MS Access не отображает текст для добавленных элементов после запроса на добавление - PullRequest
0 голосов
/ 08 марта 2010

Соответствующие таблицы

                                  #One#
+----------+         +--------------+
|Quotations|  --->   |PurchaseOrders|
+----------+    |    +--------------+
         <One>  |  <Many>           |
                |                   v  #Many#
                |    +-----------+        +------------+ 
                v    |QuotedItems|  --->  |OrderedItems|
                     +-----------+        +------------+
                   <Many>      {One}    {Many}

Форма / Подформа

PurchaseOrders - Мастер-форма, много-к-одному с OrderedItems
OrderedItems - Подформа в форме таблицы данных, много-к-одному с PurchaseOrders

Quotations - таблица, которая является «один ко многим» с PurchaseOrders и используется для запросов QuotedItems - таблица, которая является «один ко многим» с OrderedItems и используется для запроса


Поле со списком

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

SELECT [ID], [Code]
FROM   [QuotedItems]
WHERE  [QuotedItems].[Quotation] = Forms.PurchaseOrders.Quotation;

Запрос поля со списком выполняется так, как я ожидал; Здесь нет проблем. Столбец [ID] скрыт от просмотра (ширина столбца равна нулю).


Проблема

Проблема возникает, когда я пытаюсь добавить значения из таблицы QuotedItems (отфильтрованные по текущему идентификатору предложения, выбранному в форме) одним нажатием кнопки.

Я создал запрос на добавление для достижения этого с именем CopyQuotedItems2OrderedItems:

INSERT INTO OrderedItems ( PurchaseOrder, Item, Quantity )
SELECT PurchaseOrders.ID, QuotedItems.Item, QuotedItems.Quantity
FROM (    Quotations
          INNER JOIN
          PurchaseOrders
          ON Quotations.ID = PurchaseOrders.Quotation
     )

     INNER JOIN

     QuotedItems

     ON Quotations.ID = QuotedItems.Quotation  

WHERE (((Quotations.ID)=[Forms].[PurchaseOrders].[Quotation]));

Кнопка Copy Quoted Items в форме PurchaseOrders затем запускает следующий код:

Private Sub CopyQuotedItems_Click()
    DoCmd.OpenQuery "CopyQuotedItems2OrderedItems"
End Sub

Приложение работает как надо. Однако второе поле оператора INSERT, связанное с элементом управления Item, ничего не отображает даже после обновления. Единственный способ сделать элемент Code видимым - это выбрать поле со списком и выбрать элемент из него.


1000 слов ...

Перед нажатием Копировать цитируемые элементы (обратите внимание, что в этом поле со списком есть две записи в этом случае):

альтернативный текст http://img251.imageshack.us/img251/9529/beforeappendwithcombo.png

После щелчка Копировать цитируемые элементы :

альтернативный текст http://img651.imageshack.us/img651/8175/afterappendclick.png

Вопросы

  • Во-первых, почему я не вижу свой Code по умолчанию после выполнения запроса на добавление? Это потому, что значение, вставленное в запросе добавления, каким-либо образом не связано со списком?
  • Во-вторых, я лаю не на том дереве? Если да, то как еще можно заставить его отображать колонка Code автоматически?

Ответы [ 2 ]

1 голос
/ 15 марта 2010

Похоже, что Access не сильно изменился с wayyyyyyy еще в 90-х. ;} * * Тысяча одна

<>

Мы писали проки, которые «подделывали», чтобы заставить элемент управления обновляться. У меня больше нет кода; мы использовали старый метод sendkeys, эквивалентный грубой силе.

Я готов ошибаться, но в вашей ситуации это единственное, что у нас было надежно.

1 голос
/ 08 марта 2010

Я не уверен, что получил вас, но вы пробовали запрос, а не обновление?

 <Me or form/subform name>.CodeCombo.Requery

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

РЕДАКТИРОВАТЬ дополнительную информацию

Проблема здесь в том, что вы используете справочные поля в таблицах. Это антифункция и, ИМХО, будет продолжать усложнять вашу жизнь. Из-за этого вы не обновляете поле элемента с помощью кода элемента, а идентификатор элемента: 2, а не 30105-250G. Кроме того, 30105-250G является ценностью, состоящей из частей. Существует несколько подходов к решению этой проблемы, и самый простой - это, вероятно, снова сопоставить идентификатор модели и извлечь поле кода. Однако я настоятельно рекомендую вам избавиться от всех полей поиска и поработать с идеями реляционного проектирования.

...