Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / обработать процедуру mysql при помощи fdquery(firedac) / 3 сообщений из 3, страница 1 из 1
23.01.2019, 22:55
    #39763856
evgen29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработать процедуру mysql при помощи fdquery(firedac)
Здравствуйте!
Пытаюсь вызвать процедуру mysql при помощи fdquery.
Первый раз вызов проходит нормально и компоненты возвращают ответ.
Второй раз в том же соединении падает с ошибкой:
First chance exception at $75E05EF8. Exception class EMySQLNativeException with message '[FireDAC][Phys][MySQL] Commands out of sync; you can't run this command now'.(4320)

Как я понимаю, mysql вернул помимо датасета еще и кол-во обработанных записей в виде второго результата. Надо освободить оба ресурса, прежде чем начать новый запрос. Это стандартная ситуация для stored procedure mysql. Но я чето никак не могу сообразить, как это всё оформить при помощи компонентов firedac с доступом к mysql в delphi 10.2.

Есть метод FDQuery1.NextRecordSet, который как я понял переходит к следующему датасету результатов.

вот есть к примеру такой мануал, но он для php. А мне нужно подобное для delphi+firedac.
https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html
...
Рейтинг: 0 / 0
24.01.2019, 12:52
    #39764212
evgen29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработать процедуру mysql при помощи fdquery(firedac)
заметил, что когда меняю параметры fetch для fdquery, эта ошибка вылазит в разных местах кода.
причем интересно то, что обычный запрос нормально обрабатывается многократно друг за другом, а вызов stored procedure через запрос
Код: sql
1.
CALL TEST


на второй раз вешает мою программу с таким сообщением при попытке
Код: pascal
1.
FDQUERY1.Prepare
...
Рейтинг: 0 / 0
26.01.2019, 00:22
    #39765179
evgen29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработать процедуру mysql при помощи fdquery(firedac)
короче, чтобы прочитать статус выполнения запроса или процедуры, необходимо перед
FDQuery1.Close добавить
Код: pascal
1.
2.
  with FDConnection1.ConnectionIntf do
    status:=TMySQLLib(Driver.CliObj).mysql_next_result(TMySQLSession(CliObj).MySQL);



переменную status объявить как integer,

а в модулях добавить
Код: pascal
1.
  FireDAC.Phys.MySQLCli, FireDAC.Phys.MySQLWrapper,



для работы c С API MYSQL
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / обработать процедуру mysql при помощи fdquery(firedac) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]