ID только что вставленной записи

Рейтинг: 1Ответов: 1Опубликовано: 24.02.2015

Пытаюсь получить ID только что вставленной записи. Испробовал такие варианты:
Для проверки результата вывожу этот ID в ShowMessage.
1)

 DM.Query1.SQL.Clear;  
 DM.Query1.SQL.Add('INSERT INTO myTable (pole1, pole2) VALUES ("'+sEdit1.Text+'", "'+sEdit2.Text+'"); select @@IDENTITY as ident');  
 DM.Query1.ExecSQL;
 ShowMessage(DM.Query1.FieldValues['ident'].AsInteger);

2)

DM.Query1.SQL.Clear;  
DM.Query1.SQL.Add('INSERT INTO myTable (pole1, pole2) VALUES ("'+sEdit1.Text+'", "'+sEdit2.Text+'"); SET @lastID := LAST_INSERT_ID()');  
DM.Query1.ExecSQL;  
ShowMessage(DM.Query1.FieldValues['@lastID'].AsInteger);

Не могу понять, где ошибка. Как правильно делать?

Ответы

▲ 1
  1. Для компонент ADO следующий код правильный:

    ShowMessage(DM.Query1.Fields[0].AsString);
    
  2. В MS Access нет возможности писать в запросе более чем одну команду.

  3. В MS Access нет переменной @@IDENTITY и функции LAST_INSERT_ID().

  4. В тексте Query1.SQL нельзя использовать двойную кавычку. Нужно писать так

    DM.Query1.SQL.Add('INSERT INTO myTable (pole1, pole2) VALUES ('''+sEdit1.Text+''', '''+sEdit2.Text+''')');
    

Работающий, но ненадежный вариант для MS Access:

DM.Query1.SQL.Clear;  
 DM.Query1.SQL.Add('INSERT INTO myTable (pole1, pole2) VALUES ('''+sEdit1.Text+''', '''+sEdit2.Text+''')');  
 DM.Query1.ExecSQL;
DM.Query1.Close;
 DM.Query1.SQL.Text:='select max(id) from myTable ';
 DM.Query1.Open;
 ShowMessage(DM.Query1.Fields[0].AsString);