powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
25 сообщений из 52, страница 1 из 3
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950244
Всем привет!

Когда-то уже сталкивался с подобной проблемой и пришлось переходить на ZEOS компоненты. Прошло более 5 лет и вновь пришлось столкнуться с MySQL, но теперь уже использую компоненты FireDAC и хотелось бы на них и остаться. Приложение работает с хранимыми процедурами. Пытаюсь запустить вот так:

Код: pascal
1.
2.
DM.FDStoredProc1.Close;
DM.FDStoredProc1.ExecProc('US_INSERT', ['Test', 'TestPass', '12345', 'Codeword']);



Первый раз она отработает и всё ок, но второй запуск вернет ошибку: "Commands out of sync; you can't run this command now". Любой запуск процедуры, которая возвращает результат. Погуглил и выяснил, якобы не чистится результат предыдущего результата и с этим связана ошибка. Тогда вопрос, а как его скинуть?
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950247
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто из любопытства: ты и двери всегда закрываешь прежде чем выйти из дома?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950251
Dimitry Sibiryakov

Чисто из любопытства: ты и двери всегда закрываешь прежде чем выйти из дома?


Хорошо. Я думаю так будет понятнее. Это предыдущий запрос.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function LoginCheck(Login: string): Integer;
begin

    DM.FDStoredProc1.Close;
    DM.FDStoredProc1.Open('US_SELECT', [Login]);
    Result := DM.FDStoredProc1.RecordCount;

end;



А прописывая всегда Close, я никогда не получу ошибку, если где-то компонент остался открытым. Так как для все подобных запросов я использую один. Которые не требуется для результатирующего постоянного набора. Проще говоря, выполнять всякие вставки, апдейты, удаления и запрос статусов я всегда делаю через один квери.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950259
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950266
Dimitry Sibiryakov

Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.


Вероятность намного выше, что ты его забудешь где-то закрыть. Нежели начать код с его закрытия. По крайней мере это нормальная практика и в примерах она как раз и демонстрируется.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950267
Dimitry Sibiryakov

Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.


Хотя может ты и прав и нужно закрывать запрос сразу после получения результата, чтобы он не "висел" открытым до следующего старта. Но это уже ладно... Проблема у меня сейчас совершенно с другим связана. Прошло более 5 лет, а проблема актуальна до сих пор)
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950272
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений СтронгВероятность намного выше, что ты его забудешь где-то закрыть. Нежели начать код с его закрытия.
это, типа, новый стиль программирования? Объект перед созданием надо уничтожить?
Вы бы тогда лучше писали что-то типа
Код: pascal
1.
2.
if DM.FDStoredProc1.isOpen then
 Achtung!;


чтобы найти места, в которых вы свои датасеты не закрываете вовремя.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950277
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Евгений Стронгя никогда не получу ошибку, если где-то компонент остался открытым.

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.

Не знаю как в энтих ваших фиредаках, а в фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.
Независимо от того, открыт он был или нет.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950316
kdv
Евгений СтронгВероятность намного выше, что ты его забудешь где-то закрыть. Нежели начать код с его закрытия.

это, типа, новый стиль программирования? Объект перед созданием надо уничтожить?
Вы бы тогда лучше писали что-то типа
Код: pascal
1.
2.
if DM.FDStoredProc1.isOpen then
 Achtung!;


чтобы найти места, в которых вы свои датасеты не закрываете вовремя.

Это не новый стиль - это правильный стиль! И не понятна попытка умничать тут совсем не к месту, не зная даже кода, который написан перед закрытие. Форум превратился в каких-то осуждающих бабок, вместо того, чтобы ответить по теме. Вот тебе кусок из примера:

Свойство SQL - вероятно, самая важная часть TQuery. Доступ к этому свойству происходит либо через Инспектор Объектов во время конструирования проекта (design time), или программно во время выполнения программы (run time).
Интересней, конечно, получить доступ к свойству SQL во время выполнения, чтобы динамически изменять запрос. Например, если требуется выполнить три SQL запроса, то не надо размещать три компонента TQuery на форме. Вместо этого можно разместить один и просто изменять свойство SQL три раза. Наиболее эффективный, простой и мощный способ - сделать это через параметризованные запросы, которые будут объяснены в следующей части. Однако, сначала исследуем основные особенности свойства SQL, а потом рассмотрим более сложные темы, типа запросов с параметрами.

Свойство SQL имеет тип TStrings, который означает что это ряд строк, сохраняемых в списке. Список действует также, как и массив, но, фактически, это специальный класс с собственными уникальными возможностями. В следующих нескольких абзацах будут рассмотрены наиболее часто используемые свойства.

При программном использовании TQuery, рекомендуется сначала закрыть текущий запрос и очистить список строк в свойстве SQL:

Query1.Close;

Query1.SQL.Clear;


Обратите внимание, что всегда можно “безопасно” вызвать Close. Даже в том случае, если запрос уже закрыт, исключительная ситуация генерироваться не будет.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950318
fraks
Dimitry Sibiryakov

пропущено...

Ага, ты получишь ошибку если он уже был закрыт или даже никогда не имел result set-а.

Не знаю как в энтих ваших фиредаках, а в фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.
Независимо от того, открыт он был или нет.


Я не знаю, какие они там получают ошибки. У меня всё прекрасно работает.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950392
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksв фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.

Они со своим неестественным интеллектом прогнулись под дерьмопримеры, который "везде".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950518
Dimitry Sibiryakov

fraksв фибах лишний .Сlose на TFIBQuery никогда ошибок не выдавал.

Они со своим неестественным интеллектом прогнулись под дерьмопримеры, который "везде".


Попробовал с компонентами FireDAC вот такую вещь:

Код: pascal
1.
2.
3.
DM.qrySQLNEW.Open('select LOGIN from US where LOGIN = :LOGIN', [Login]);
DM.qrySQLNEW.ExecSQL(sql, [Login, General.MD5Hash(Pass), General.VERSION, Codeword]);
DM.qrySQLNEW.Open('select LOGIN from US where LOGIN = :LOGIN', [Login]);



И вообще никаких Close не надо. Видимо под капотом само всё происходит. И это радует.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950566
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39950648
Dimitry Sibiryakov

Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.


Да, спасибо за совет. Обязательно попробую. Сейчас это актуально.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39952757
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
второй запуск вернет ошибку: "Commands out of sync; you can't run this command now".
MySQL не разрешает в одном соединении второй селективный запрос, если для первого с сервера еще не забраны данные
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953246
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.

В UIB, например, несколько Open подряд без Close - вообще штатная операция, когда надо выполнить несколько одинаковых запросов, с разными параметрами.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953250
alekcvp
Dimitry Sibiryakov

Следующим логичным шагом будет повторное использование туалетной бумаги. Попробуйте.

В UIB, например, несколько Open подряд без Close - вообще штатная операция, когда надо выполнить несколько одинаковых запросов, с разными параметрами.


Да он какой-то обиженный. Не понятно, по какой причине прицепился к CLose и Open. Совершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа. Это рекомендация самих разработчиков. А в FireDac сделали вообще прикольно и синтаксического сахара подкинули. Теперь можно в одной строке сразу запустить запрос с параметрами, просто открыв запрос.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953253
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений СтронгСовершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа.
Это рекомендация самих разработчиков.

А можно ссылку на эту рекомендацию?

Так делают когда датасет привязан к гриду и прочей дб-авари. Но это явно не твой случай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953260
Dimitry Sibiryakov

Евгений СтронгСовершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа.
Это рекомендация самих разработчиков.

А можно ссылку на эту рекомендацию?

Так делают когда датасет привязан к гриду и прочей дб-авари. Но это явно не твой случай.


Да это вообще был пример. Я пробовал по-разному. Хотел избежать ошибки. Как решать проблему, с помощью компонентов, так и не понятно. Я уже давно всё переписал на прямой доступ без хранимой и забил на это. Как показывает практика - это и проще. Хранимки оправданы при крупных корпоративных решениях.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953261
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений СтронгЯ пробовал по-разному. Хотел избежать ошибки. Как решать проблему, с помощью компонентов,
так и не понятно.

Открыть документацию по MySQL API чтобы выяснить когда такая ошибка может возникать не
предлагать? Тогда остаётся только одно: перестать-таки повторно использовать компоненты, а
для выполнения запросов использовать специальный метод TFDConneciton.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953264
Dimitry Sibiryakov

Евгений СтронгЯ пробовал по-разному. Хотел избежать ошибки. Как решать проблему, с помощью компонентов,
так и не понятно.

Открыть документацию по MySQL API чтобы выяснить когда такая ошибка может возникать не
предлагать? Тогда остаётся только одно: перестать-таки повторно использовать компоненты, а
для выполнения запросов использовать специальный метод TFDConneciton.


Читал документацию о том, что проблема возникает по причине того, что сервак не может отдать несколько запросов в рамках одного подключения. И там есть специальный метод IP, который сбрасывает коннект. А на стороне клиента получается надо будет передергивать коннект. Решение мягко скажем не хорошее. Тут постоянный идет выбор между MSSQL и MySQL. У меня по крайней мере. MSSQL нравится, но VPS дороговато выходит по сравнению с Linux. Поэтому и приходится использовать MySQL, но тут свои "грабли". В общем оптимальным получилось делать всё с помощью запросов из клиента.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953275
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Совершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа. Это рекомендация самих разработчиков.
Евгений Стронг
И там есть специальный метод IP, который сбрасывает коннект.
Да где же вы такие рекомендации находите?

Установите в свойствах подключения ResultMode: Store
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953276
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Установите в свойствах подключения ResultMode: Store
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953277
_Vasilisk_
Евгений Стронг
Совершенно нормально и ПРАВИЛЬНО делать Close перед манипуляциями с компонентом доступа. Это рекомендация самих разработчиков.
Евгений Стронг
И там есть специальный метод IP, который сбрасывает коннект.
Да где же вы такие рекомендации находите?

Установите в свойствах подключения ResultMode: Store


Спасибо. На будущее буду знать. Но постараюсь обходить хранимки стороной) По крайней мере на MySQL.
...
Рейтинг: 0 / 0
Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
    #39953278
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Но постараюсь обходить хранимки стороной)
Не в хранимках дело. Лучше постарайтесь читать документацию
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi Rio 10.3 FireDac MySQL Commands out of sync; you can't run this command now
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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