Как запросить поля базы данных Microsoft Access из VBA в Excel - PullRequest
0 голосов
/ 05 января 2010

В настоящее время я пишу программу для сохранения материалов, введенных в форму в Excel, в базу данных в Access. Я пытаюсь увеличить поле первичного ключа в Access на «1» всякий раз, когда добавляю данные из полей в форме Excel.

Поскольку я объявил это поле как поле PRIMARY KEY NOT NULL, оно не позволяет мне добавить еще одну строку данных, если не было объявлено поле первичного ключа. Я не хочу, чтобы пользователь вводил данные PK, поскольку это было бы глупо.

Как мне сделать DDL из Excel в Access, как, скажем, MAX(CustomerID), чтобы найти максимальный идентификатор для таблицы Access, а затем добавить MAX(CustomerID) + 1 в поле идентификатора, используя RS.FIELD("CustomerID") = MAX(CustomerID) + 1.

Буду благодарен за любую помощь в этом вопросе. Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 05 января 2010

Вы можете объявить столбец как автоинкремент в Access. Затем он автоматически получит последующие значения.

0 голосов
/ 29 июня 2015

Если вы не хотите использовать вышеупомянутую функцию DLookup, вы также можете создать функцию VBA, чтобы получить значение для вас, а затем вставить это в вашу вставку в.

Private Function GetNextPKID(MyConnectionString) as Integer
dim rs as adodb.recordset, cn as adodb.connection, sSQL as string

sSQL = "SELECT COUNT(*) FROM MyTable"

set cn = new adodb.connection
set rs = new adodb.recordset
cn.ConnectionString = MyConnectionString
cn.Open
set rs.ActiveConnection = cn
rs.Open(sSQL)

GetNextPKID = rs.Fields(0).Value + 1

cn.Close
set cn = nothing
set rs = nothing
End Function
0 голосов
/ 05 января 2010

Разве нельзя было бы создать форму в самом доступе, и тогда вы можете просто использовать поле автоматического номера базы данных? Если нет особой причины, чтобы сохранить его в превосходстве, это кажется немного запутанным решением проблемы

0 голосов
/ 05 января 2010

Мне нравится идея использования поля AutoNumber, как предлагается в других ответах.

Однако, если вы хотите избежать AutoNumber, вы можете использовать функцию Access DLookup из VBA в Excel:

rs.AddNew
rs.Fields("CustomerID") = Access.DLookup("Max(CustomerID)", "Customer") + 1

...

rs.Update

Предполагается, что ваша базовая таблица Customer.

Вы должны добавить ссылку на Microsoft Access в Инструменты-> Ссылки

...