Модератор: Модераторы
Vadim писал(а):Непонятен вопрос. С помощью запроса получить значение поля не удаётся?
Снег Север писал(а):Для MS Access - SELECT @@IDENTITY
Mikhail писал(а):Ну так поле-то первичный ключ, не получится запрос составить.
Mikhail писал(а):Это я читал, но как это сделать, как запрос то выполнить?
Vadim писал(а):Почему?
Vadim писал(а):Вы не знаете, как работать с TSQLQuery?
Mikhail писал(а):Потому что в запросе нужно первичный ключ указать, который неизвестен.
Mikhail писал(а):Где я должен написать подобный запрос? Как получить результат такого запроса?
SQLQuery.SQL.Text:='SELECT @@IDENTITY';
SQLQuery.Open;
Vadim писал(а):В запросе ключи не указываются. В запросе указываются названия полей.
select * from tabl where id = :id;
Снег Север писал(а):Mikhail, запрос пишется в TSQLQuery.SQL.Text, результат - TSQLQuery.Fields[0].AsInteger
Mikhail писал(а):вот id здесь после вставки будет неизвестен.
SELECT MAX(id) FROM tabl;
Mikhail писал(а):Т.е. надо будет завести еще один SQLQuery для получения значения ключа?
Mikhail писал(а):Ну допустим, а как его положить в буфер только что созданной записи?
var id :integer;
...
SQLQuery.SQL.Text := 'INSERT ...'; // вставка
SQLQuery.Execute;
SQLQuery.SQL.Text:='SELECT @@IDENTITY';
SQLQuery.Open;
id := SQLQuery.Fields[0].AsInteger;
SQLQuery.Close;
SQLQuery.SQL.Text:='select * from tabl where id = :id;'
SQLQuery.Params.ParamByName('id').AsInteger := id;
SQLQuery.Open;
Vadim писал(а):И после этого id будет известен...
Снег Север писал(а):Не понимаю. Что за буфер и зачем туда помещать ID?
Mikhail писал(а):Они ведь берут данные из DataSet-а, а там значения автоинкрементируемого поля нет
Снег Север писал(а):Mikhail писал(а):Они ведь берут данные из DataSet-а, а там значения автоинкрементируемого поля нет
Кто вам мешает включить это поле в select? После вставки делаете Refresh DataSet-а и видите вставленные записи. По крайней мере - в Access. В более серьезных базах придется еще коммитом транзакций заморачиваться.
Mikhail писал(а):Грязный хак.
Mikhail писал(а):Желательно делать только рефреш добавленной записи, а не всего датасета.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89