Как вернуть значение столбца AUTO INCREMENT в SQLite с помощью VB6

StackOverflow https://stackoverflow.com/questions/531109

  •  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 за отдельный стол

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top