Создаю таблицу CREATE TABLE Tabel1(id AUTOINCREMENT NOT NULL PRIMARY KEY,Val TEXT(15) NOT NULL) Добавляю я запись в таблицу INSERT INTO Tabel1(val)VALUES('empty'). Все это при помощи ODBC. После добавления мне нада узнать, какой же id был присвоен новой записи? Единственный способ, какой мне приходит на ум это послать запрос типа SELECT max(id) FROM Tabel1. Но это очень медленно работает когда добавляешь несколько тысяч записей. Существует какой-нибудь другой способ? Что-то вроде SQLGetStmtAttr с каким-то атрибутом или SQLMoreResults(это так, просто мысли вслух), ведь ODBC драйвер должен знать какой id он присвоил. Пишите все что есть по этому вопросу. Спасибо.
Во первых ODBC может и не знать какой ID присвоен записи, потому что это присвоение осуществляется на сервере, А вообще скажем у MSSQL есть переменная, непомню как называется, которая содержит как раз ID последней вставленной записи. ПРосто считываешь ее и усе. Если же например, речь идет о FireBird, то считывашь значение соответствующего генератора. А еще вопрос в том как ты работаешь с ODBC и какие настройки БД.
Я не хочу зависеть от конкретной БД, существует ли универсальный способ? Мне кажется что это должно быть предусмотренно в ODBC API, т.е. ты посылаешь запрос серверу, а он тебе возвращает di, и еще я так и не нашел универсального способа создавать файл БД на диске.
Из справки к Access: "Чтобы найти последнее значение, использованное для столбца с автоматическим шагом, можно воспользоваться инструкцией SELECT @@IDENTITY. Название таблицы задать нельзя. Будет получено значение из последней обновленной таблицы, содержащей столбец с автоматическим шагом." ('Типы данных SQL') Не зависеть от БД не получится
Android Используй поле IDENTITY, тогда сможешь получить в переменной @@IDENTITY идентификатор вставленной записи.А с автоинкрементом, придется через SELECT MAX(имя_поля) осуществлять проверку. Правда можно и процедуру на TSQL написать, которая будет вставлять запись, а с RETURN возвращать ID вставленной записи. Но тогда поле идентификатора должно быть Integer (по крайней мере в MS SQL 2000 RETURN может вернуть значение не больше Integer).
irrona, то что вы написали верно для MS SQL и для ACCESSa и усе и еще не факт что с момента вставки записи и получения Мах(имя поля), другой клиент не осуществит вставки записи .. ) так что выводы делайте господа... разве что написать хранимую процедуру которая будет вставлять запись и возвращать ее ID.