Как вернуть значение столбца AUTO INCREMENT в SQLite с помощью VB6
-
22-08-2019 - |
Вопрос
У меня есть таблица в 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 был способ сделать это.
Решение
Поддерживает ли SQLite SCOPE_IDENTITY?
Проверьте Часто задаваемые вопросы.А 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
Другие советы
Запустите этот запрос внутри вашего кода:
SELECT SEQ from sqlite_sequence WHERE name='tablename'
Я не использую VB, поэтому не знаю, какой интерфейс вы используете со своей базой данных, но, как сказал Бендеви, в API c есть функция под названием sqlite3_last_insert_rowid()
которая вернет первичный целочисленный ключ для последней вставленной строки, поэтому вы можете поискать аналогичную функцию в своем интерфейсе.
Если это не сработает, вы можете использовать запрос, специфичный для SQLite:
SELECT last_insert_rowid()
Вы можете позвонить SELECT last_insert_rowid()
после твоей вставки
Если использовать
SELECT last_insert_rowid()
возвращает последний rowid
, вы можете использовать :
SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1
для получения последнего rowid
за отдельный стол