Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2016, 16:35   #1
Festovec
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 30
Печаль Возврат id после запроса

Здравствуйте, форумчане. Есть БД MySQL 5.6.26
Заранее хочу сказать, что только разбираюсь в работе Delphi с БД. Разрабатываю программу для работы с ней.
После запроса необходимо вернуть ID, пробовал различные способы, какие-то возвращают 0, хотя записи есть.
PHP код:
    ADOQuery4.Close;
    
ADOQuery4.SQL.Clear;
    
ADOQuery4.SQL.Add('INSERT INTO lect (`Астр/Косм`,`МКС/  Группа`,`Курс занятий`,`Тип занятия`,`Кто провел`,`Дата проведения`,`Кол-во часов`) '
    
+'VALUES (:astr,:mks,:kur,:tip,:who,:da,:hour)');
    
ADOQuery4.Parameters.ParamByName('astr').Value:=nam;
    
ADOQuery4.Parameters.ParamByName('mks').Value:=Edit1.Text;
    
ADOQuery4.Parameters.ParamByName('kur').Value:=kurs;
    
ADOQuery4.Parameters.ParamByName('tip').Value:=ComboBox4.Text;
    
ADOQuery4.Parameters.ParamByName('who').Value:=lect;
    
ADOQuery4.Parameters.ParamByName('da').Value:=StrToDate(dat);
    
ADOQuery4.Parameters.ParamByName('hour').Value:=ComboBox3.Text;
    
ADOQuery4.ExecSQL;
    
id:=ADOQuery4.FieldByName('id').AsInteger;
    
ShowMessage(IntToStr(id)); 
Конкретный случай возвращает, что такого поля нет, хотя оно есть с флагами PK, UQ, NN, AI и с названием id соответственно. Забыл добавить, что запрос работает корректно, запись создается в таблице.
Где я накосячил? Заранее спасибо

Последний раз редактировалось Festovec; 16.03.2016 в 16:38.
Festovec вне форума Ответить с цитированием
Старый 16.03.2016, 16:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Типа запроса select last_insert_id() - вернет последний добавленный ид в этом соединении.

Или создание новой записи сделать в хранимке, возвращающей в out параметре ид
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2016, 17:00   #3
Festovec
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 30
По умолчанию

Спасибо за наводку, как понимаю запрос будет строиться следующим образом
PHP код:
    ADOQuery4.Close;
    
ADOQuery4.SQL.Clear;
    
ADOQuery4.SQL.Add('SELECT last_insert_id()');
    
ADOQuery4.Open
Как из этого запроса теперь вытянуть этот самый id.
Festovec вне форума Ответить с цитированием
Старый 16.03.2016, 17:05   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так ADOQuery4.Fields[0].Value, например. Или в запросе псевдоним к полю прицепи и FieldByName по этому псевдониму
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2016, 17:06   #5
Festovec
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 30
По умолчанию

Да, спасибо, разобрался.
В итоге выглядит так
PHP код:
    ADOQuery4.Close;
    
ADOQuery4.SQL.Clear;
    
ADOQuery4.SQL.Add('INSERT INTO lect (`Астр/Косм`,`МКС/Группа`,`Курс занятий`,`Тип занятия`,`Кто провел`,`Дата проведения`,`Кол-во часов`) '
    
+'VALUES (:astr,:mks,:kur,:tip,:who,:da,:hour)');
    
ADOQuery4.Parameters.ParamByName('astr').Value:=nam;
    
ADOQuery4.Parameters.ParamByName('mks').Value:=Edit1.Text;
    
ADOQuery4.Parameters.ParamByName('kur').Value:=kurs;
    
ADOQuery4.Parameters.ParamByName('tip').Value:=ComboBox4.Text;
    
ADOQuery4.Parameters.ParamByName('who').Value:=lect;
    
ADOQuery4.Parameters.ParamByName('da').Value:=StrToDate(dat);
    
ADOQuery4.Parameters.ParamByName('hour').Value:=ComboBox3.Text;
    
ADOQuery4.ExecSQL;
    
ADOQuery4.Close;
    
ADOQuery4.SQL.Clear;
    
ADOQuery4.SQL.Add('SELECT last_insert_id() AS ID');
    
ADOQuery4.Open;
    
id:=ADOQuery4.FieldByName('ID').AsInteger

Последний раз редактировалось Festovec; 16.03.2016 в 17:12.
Festovec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг после POST запроса neong Общие вопросы Delphi 9 08.11.2013 01:03
Окно после выполнения запроса mortal2010 Microsoft Office Access 6 25.02.2011 13:18
Вывод результата после запроса Hamsi БД в Delphi 1 07.12.2010 17:00
Получение Куков после запроса. )Игнат( Работа с сетью в Delphi 4 26.10.2010 22:07