sqlite last_insert_rowid TZQuery
От: axiv  
Дата: 15.04.13 10:59
Оценка:
Здравствуйте.
Вставляю в базу строку и хочу получить 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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.