Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 16.03.2016, 17:35   #1
Festovec
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 30
Репутация: 10
Печаль Возврат 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 в 17:38.
Festovec вне форума   Ответить с цитированием
Старый 16.03.2016, 17:45   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,494
Репутация: 6498
По умолчанию

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

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

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

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

Да, спасибо, разобрался.
В итоге выглядит так
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 в 18:12.
Festovec вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


10:21.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru