2016-12-15 3 views
0

Я запускаю Access + SQL, так как мне нужно перенести некоторые тяжелые документы Excel в базу данных доступа, и я все еще новичок здесь. Я попробовал что-то, как вы можете видеть ниже, но это не работает должным образом, мне кажется, что VBA намного проще ...Автоматическое заполнение ячеек в Access

Вопрос: Что я пытаюсь сделать для автоматического заполнения некоторых ячеек в зависимости от пользовательский ввод в предыдущей ячейке.

Ситуация: У меня есть таблица доступа к базе данных называется Обзор который будет заполнена строка за строкой пользователем. Я установил первичный ключ в качестве параметра «Исправление», чтобы всякий раз, когда он начинал новую строку, он должен сначала ввести это значение.

enter image description here

Затем, когда пользователь вводит DealerNo, я хочу 3 следующей информации о (DealerName, страна, ShipperContact) заполняются соответственно.

Информация получена из другой таблицы DealerLookup, в которой перечислены все дилеры и собраны все их данные.

DealerLookup содержит эти 3 информации в столбцах CompanyName, Country, ContactName соответственно, в то время как первичный ключ из этой таблицы является DealerNo.

Попытка: Это не работает, хотя, надеюсь, вы можете помочь мне со структурой.

INSERT INTO Overview (DealerName, Country, ShipperContact) 
WHERE DealerNo = 50535 
SELECT CompanyName , Country , ContactName FROM DealerLookupNew 
WHERE DealerNo = Overview.DealerNo ; 

Примечание:

  1. Даже если она будет работать, это не будет хорошим решением, так как это справедливо только один DealerNo. Таким образом, это будет работать только для этой строки, но если пользователь вводит другой DealerNo, этот код ничего не сделает ... Хорошим решением (которое я не знаю, как писать в SQL) было бы заменить 50535 на значение последней непустой ячейки в DealerNo.
  2. Если удалить WHERE DealerNo = 50535 то ошибка происходит от последней строки, потому что Overview.DealerNo не правильный способ сказать «взять значение последней непустой ячейки в DealerNo формирует таблицу Обзор»

Любые идеи, как это сделать?

+0

Я бы написал и запустил макрос excel, чтобы заполнить пустые ячейки перед экспортом для доступа. –

+0

Да, но дело в том, что этот доступ будет обновляться (новые строки вводятся или удаляются) каждый день. Данные в настоящее время превзошли, но поскольку это действительно тяжелый документ, он делает каждую операцию очень медленной, поэтому я хочу передать все это на Access и не экспортировать несколько раз. – Seb

ответ

1

Похоже, вы пытаетесь сделать это в представлении Datasheet. Вам нужно событие AfterUpdate, которое недоступно в представлении Datasheet.

Я уверен, что единственный способ сделать это - добавить поля в форму и выполнить вычисления в событии AfterUpdate DealerNo. Это изменит способ ввода ваших данных пользователями, но это даст вам гораздо большую гибкость для управления данными, чем стандартное представление Datasheet.

Или, как сказал Дэн в комментарии, просто выполните всю работу в Excel, прежде чем импортировать его. Однако это не поможет вам продвигаться вперед, как только все ваши данные находятся в Access, и вы вводите новые записи.

+0

Спасибо за ваш ответ. Джонни, я начну смотреть на формы, так как Я пытался избежать их до сих пор и сообщит вам – Seb

+0

Знаете ли вы способ привязки формы к таблице, чтобы событие AfterUpdate запускалось, когда пользователь вводит DealerNo в таблицу? – Seb

+1

Если вы укажете таблицу как RecordSource формы, тогда таблица автоматически обновляется при вводе данных. Это хорошо для новичков, но если вы оставите форму несвязанной (никакой RecordSource не указана), у вас будет немного больше гибкости в отношении того, как и когда запись сохраняется. В любом случае это произойдет в событии AfterUpdate текстового поля для DealerNo, просто используйте DLookup для заполнения других текстовых полей. Таким образом, одна строка будет: Me.txtCompanyName = DLookup ("CompanyName", "DealerLookupNew", "DealerNo = '" & Me.txtDealerNo & "'") –

 Смежные вопросы

  • Нет связанных вопросов^_^