Как вернуть значение столбца AUTO INCREMENT в SQLite с VB6 - PullRequest
11 голосов
/ 10 февраля 2009

У меня есть таблица в SQLite:

CREATE TABLE "EventType" 
(
[EventTypeID] INTEGER PRIMARY KEY, 
[EventTypeName] VARCHAR(50) NOT NULL UNIQUE
);

Поскольку EventTypeID является целым числом и первичным ключом, он автоматически превращается в столбец с автоинкрементом, и это прекрасно работает.

Я хотел бы вставить строку в таблицу и получить новое увеличенное значение из VB6.

Dim oRs as Recordset
dim oCmd as new Command

oCmd.ActiveConnection = GetConnection()
oCmd.Source = "insert into EventType (EventTypeName) values ('blah')"
oCmd.Execute

Существует ли автоматический способ получения вновь созданного EventTypeID без необходимости выполнения другого запроса (выберите max (EventTypeID) из EventType))?

Кажется, я помню из VB6 дней назад, что был способ сделать это.

Ответы [ 5 ]

15 голосов
/ 10 февраля 2009

Поддерживает ли SQLite SCOPE_IDENTITY?

Ознакомьтесь с FAQ . sqlite3_last_insert_rowid () функция сделает это. Осторожнее запускает хотя

Не проверено, но вы должны быть в состоянии отправить оба заявления за один звонок. Я давно не писал VB6. Также это не безопасно для SQL-инъекций.

Dim oRs as Recordset
dim sSql as String
sSql = "INSERT INTO EventType (EventTypeName) VALUES ('blah'); SELECT last_insert_rowid() FROM EventType"
oRs.Open sSql oConn
6 голосов
/ 19 ноября 2015

Запустите этот запрос внутри вашего кода:

SELECT SEQ from sqlite_sequence WHERE name='tablename'
3 голосов
/ 10 февраля 2009

Я не использую VB, поэтому я не знаю интерфейс, который вы используете с вашей базой данных, но, как сказал Бендевей, в API c есть функция, называемая sqlite3_last_insert_rowid(), которая будет возвращать основное целое ключ для последней вставленной строки, чтобы вы могли искать похожую функцию в вашем интерфейсе.

Если это не сработает, вы можете использовать специфичный для SQLite запрос:

SELECT last_insert_rowid()
2 голосов
/ 10 февраля 2009

Вы можете позвонить SELECT last_insert_rowid() после вашей вставки

0 голосов
/ 20 марта 2014

Если использовать

SELECT last_insert_rowid() 

возвращает последний rowid, вы можете использовать:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1

для получения последней rowid для отдельной таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...