Здравствуйте.
Вставляю в базу строку и хочу получить ID вставленной записи.
Использую Delphi XE3 и ZEOS компоненты для доступа к sqlite-базе.
Использую следующий код:
q.SQL.add('BEGIN; ');
q.SQL.add('INSERT INTO MyUser(Name) VALUES (':UserName'); ');
q.SQL.add('SELECT last_insert_rowid() as LastID; ');
q.SQL.add('COMMIT;');
q.ParamByName('UserName').AsString='UserName';
q.ExecSQL;
showmessage(q.FieldByName('LastID').value) — ошибка — нет такого поля (тут боле-менее понятно, ибо ExecSQL, как я понимаю)
Пробовал и так
q.SQL.add('BEGIN; ');
q.SQL.add('INSERT INTO MyUser(Name) VALUES (':UserName'); ');
q.SQL.add(' SELECT :LastID=last_insert_rowid(); ');
q.SQL.add('COMMIT;');
q.ParamByName('LastID').ParamType=ptOutput; — ошибка — неравное количество входных параметров
q.ParamByName('LastID').ParamType=ptInputOutput; — выдает null
В таком варианте монитор sqlite пишет в лог: SELECT NULL=last_insert_rowid();
Вопрос: как в одной транзакции получить last_rowid?